java知识总结
核心篇
数据缓存
-
Redis 有哪些类型
五种数据类型:string hash list set 和 zset string类型是二进制安全的,可以包含任何数据比如jpg图片或者序列化对象,是redis基本数据类型 最大储存512mb 常用命令:set get decr incr mget hash是键值对的集合:string类型的field和value的映射表,适合存储对象 常用命令:hset hget hgetall 用于存储一些结构化数据,比如用户的昵称,年龄等一个用户信息对象数据 list列表为简单的字符串列表,按照插入顺序排序,常被用作消息队列服务 常用命令:lpush rpush lpop rpop set集合为string类型的无序集合。和list一样在执行插入和删除以及判断是否存在某元素时,效率是 很高的。可以进行交集,并集和差集操作,通过哈希表实现查找的复杂度为O(1) 应用场景: 1.利用交集求共同好友 2.利用唯一性统计访问网站的所有独立ip 常用命令:sadd spop smembers sunion zset有序集合每个元素都会关联一个double类型的分数。通过分数来为集合中的成员进行从小到大排序 常用命令:zadd zrange zrem zcard -
Redis 内部结构
-
聊聊 Redis 使用场景
1.热点数据缓存,设置过效时间 2.expire设置键存在的时间,做限时活动或手机验证码 3.计数器 incr decr 4.排行榜 zset 5.分布式锁 setnx 6.消息队列 list lpush lpop -
Redis 持久化机制
redis的数据全部在内存当中,如果突然宕机数据就会全部丢失,因此需要有一种机制来保证redis数据 不会因为故障丢失,就是redis的持久化机制 持久化机制有两种,第一种是RDB快照,第二种是AOF日志。快照是一次全量备份,AOF日志是连续的 增量备份,都是在redis.conf中配置 -
Redis 如何实现持久化
-
Redis 集群方案与实现
主从复制,以rdb的形式全量复制 哨兵机制,切换主从库 -
Redis 为什么是单线程的
单线程可以避免多线程的上下文切换的系统调用开销 -
缓存雪崩
原有缓存失效,新缓存未到时候,原本访问缓存的请求都去查询数据库对数据库cpu和内存造成巨大压力 甚至导致宕机 解决方案:使用锁或者队列来控制请求,设置过期标志更新缓存,或者使用二级缓存 -
缓存穿透
用户查询数据,缓存和数据库都没有,这样导致每次查询都会去数据库查一遍,然后返回空 解决方案:查询数据为空的回收任然将结果缓存,设置过期时间小于5min -
缓存预热
数据量不大的时候,项目启动时自动加载 定时刷新缓存 -
缓存降级
访问量剧增或者服务出现问题或非核心服务影响到核心流程的性能的时候仍然要保证服务可用,即使是 有损服务,可以依据一些数据进行降级 -
使用缓存的合理性问题