Redis 相关配置说明
maxmemory-policy:
volatile-lru -> remove the key with an expire set using an LRU algorithm
内存不足时,在设置过期时间的键空间内,移除最近最少使用的key
allkeys-lru -> remove any key according to the LRU algorithm
当内存不足时,移除最近最少使用的key
volatile-random -> remove a random key with an expire set
内存不足时,在设置过期时间的键控件,随机移除
allkeys-random -> remove a random key, any key
内存不足是,随机移除
volatile-ttl -> remove the key with the nearest expire time (minor TTL)
设置更早过期时间的key有限移除(或者是快过期的key)
noeviction -> don’t expire at all, just return an error on write operations
当内存不足时以容纳新写入的数据时,新写入操作就会抛出异常
##缓存穿透:
黑客估计查询缓存中不存在的数据,导致所有的请求都去数据库查询,从而使数据库连接异常。
解决方案:
1 利用互斥锁,缓存失效时,获取锁,待数据取回,更新至缓存,释放锁。没得到锁的,等待。(互斥锁、悲观锁、乐观锁)
2 异步更新,监听缓存失效状态,通知后台更新缓存的策略。(需预加载数据)
3 提供一个有效的拦截机制,如布隆过滤器。
缓存雪崩
换从同一时间大面积失效,导致大量请求数据库,使得数据库连接异常
解决方案:
1 定一个缓存失效时间,在加上一个随机值,避免集体失效
2 使用互斥锁,但会影响吞吐量
3 双缓存,错开失效时间
问题: 1 互斥锁 、多线程安全等如何实施?
2 redis集群的存储策略?
3 redis.conf 配置参数的意义?
4 redis存储类型以及使用场景?