赞
踩
redis整体来说并非只有一个线程(多线程),只是redis在处理网络请求,k/v读写操作这个过程是用一个线程来处理的,它的其他功能:持久化、异步删除、集群同步都是采用额外的线程来完成的。
Redis6.0 引入多线程主要是为了提高网络 IO 读写性能(Redis 的瓶颈并不在 CPU,而在内存和网络。)
虽然,Redis6.0 引入了多线程,但是 Redis 的多线程只是在网络数据的读写这类耗时操作上使用了, 执行命令仍然是单线程顺序执行。因此,你也不需要担心线程安全问题。
流程简述如下:
该设计有如下特点
Redis6.0 的多线程默认是禁用的,只使用主线程。
如需开启需要修改 redis 配置文件 redis.conf
io-threads-do-reads yes
开启多线程后,还需要设置线程数,否则是不生效的。同样需要修改 redis 配置文件 redis.conf
io-threads 4 #官网建议4核的机器建议设置为2或3个线程,8核的建议设置为6个线程
缓存穿透:key中对应的缓存数据不存在,导致去请求数据库,造成数据库的压力倍增的情况。
缓存击穿:redis过期后的一瞬间,有大量用户请求同一个缓存数据,导致这些请求都去请求数据库,造成数据库压力倍增的情,针对一个key而言。
缓存雪崩:缓存服务器宕机或者大量缓存集中某个时间段失效,导致请求全部去到数据库,造成数据库压力倍增的情况,这个是针对多个key而言。
缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,造成数据库的压力倍增的情况。
例:发起为id值为 -1 的数据或 id 为特别大不存在的数据。
解决方案:
缓存服务器宕机或者大量缓存集中某个时间段失效,导致请求全部去到数据库,造成数据库压力倍增的情况,这个是针对多个key而言。
解决
setRedis(Key,value,time + Math.random() * 10000);
redis过期后的一瞬间,有大量用户请求同一个缓存数据,导致这些请求都去请求数据库,造成数据库压力倍增的情,针对一个key而言。
缓存击穿与缓存雪崩的区别是这里针对的是某一热门key缓存,而雪崩针对的是大量缓存的集中失效。
解决方案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。