redis配置详解以及参数调优

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存储类型以及使用场景?