redis知识点汇总

redis集群支持批量操作命令吗?
Mset, Mget这样的多个key的原生批量操作命令,redis只支持所有的key落在同一个slot的情况,如果有多个key一定要用mset命令在redis集群上操作,可以在key前面加上相同的hash tag,就是{XXX},这样参与数据分片hash slot计算的只会是大括号里的值,这样能确保不同的key
能落到同一个slot中去,
示例如下: mset {user1}:1:name li {user1}:1:age 18

Lua脚本能在redis集群里执行吗?
必须保证Lua脚本里要操作的key都落在同一个redis主节点上面,这种的话可以可以给Lua脚本的key前面加上相同的hash tag,就是{xxx}

大规模商品缓存数据冷热分离实战:
1.设置缓存过期时间;
2.再次读到的数据进行缓存延期;

缓存击穿:某个热点key过期或者大量的热点key过期,大量请求直接打到数据库
解决方式:过期时间设置为固定时长 + 随机值的,再次读取热点数据进行缓存延期

缓存穿透:大量不存在数据请求同时打在缓存和数据库(比如说查询id = -1的商品)
解决方式:缓存过期时间较短的空对象,再次请求时延长空对象的过期时间

缓存雪崩:

新产品上架:会有大量的用户去访问我们的新产品,缓存并发重建问题
解决方式:双重检查锁,即查询数据库前加锁,先查询缓存,在查询数据库,不存在则添加到缓存,但是这种加锁是JVM进程级别的锁,多节点部署的时候还是会进行几次缓存重建,但是问题不大,还会有其他问题,就是这个时候如果也有其他商品也来进行缓存重建,也需要进行排队

分布式锁:

缓存数据库双写不一致问题