redis功能
- 数据缓存
- 分布式锁
- 支持数据持久化
- RDB 指定时间间隔对数据快照存储
- AOF 每收到的写命令都通过writer追加到文件中
- 支持事务
- 支持消息队列
缓存穿透
当查询一个一定不存在的数据时,由于缓存是不命中时就会从数据中查询,查询不到数据则不写入缓存,这将导致这个不存在的数据每次都要到数据库中去请求,造成缓存穿透
- 解决:
- 采用布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被拦截掉,从而避免对底层存储系统的查询压力,
- 如果一个查询返回的数据为空,我们将这个数据进行缓存,但是设置一个很短的生命周期
redis支持的客户端
- jedis 是redis的java实现客户端,功能齐全提供了对redis命令的支持
- redisson : 实现了分布式和可扩展式,但是功能简单只不支持redis事务、字符串操作等redis特性,让使用者集中的放在处理业务逻辑上
- lettuce
redis的淘汰策略
volatile-lru:从已设置过期时间的数据集合中,选择最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集合中,选择将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集合中,随机选择数据淘汰
redis常见的性能问题
主服务器写内存快照,会阻塞主线程工作,当快照比较大的时候对性能的影响是非常大的,会间断性暂停服务,所以主服务器最好不要写快照
redis主从复制的性能问题,为了主从复制连接的速度和稳定性,主从库最好在同一个局域网内