十大免费行情软件下载网站,北京哪家做网站和网络推广好的,网站开发架构师,网站地图有什么作用为什么使用redis 改善性能。当大SQL执行耗时久#xff0c;且结果不频繁变动#xff0c;就特别适合将运行结果放入缓存#xff0c;后面的请求从缓存中读取#xff0c;使得请求能够迅速响应 缓解并发压力。大并发下#xff0c;所有请求都是直接访问数据库的且结果不频繁变动就特别适合将运行结果放入缓存后面的请求从缓存中读取使得请求能够迅速响应 缓解并发压力。大并发下所有请求都是直接访问数据库的会出现连接异常。redis做一个缓冲让请求先访问redis而不是数据库。redis缺点 1、缓存与数据库双写一致性问题 2、缓存雪崩问题缓存同一时间大面积失效这时又来了一波请求结果请求都怼到数据库上从而连接异常 3、缓存击穿问题黑客故意去请求缓存中不存在的数据导致所有的请求都怼到数据库上从而连接异常 4、缓存的并发竞争问题redis的过期策略与内存淘汰机制 思考为什么redis只能存5G而你写了10Gredis怎么删除的。为什么设置过期时间时间到了内存占用率还是那么高 redis采用的是定期删除惰性删除策略 定期删除不等于定时删除定期删除是指redis默认100ms检查是否有过期的key有则删除。但redis不是每个100ms将所有的key检查一次而是随机抽取进行检查因此只采用定期删除策略会导致很多key到时间没有删除。惰性删除会在你获取key时redis检查是否过期如果过期此时就会删除。 但是如果一直没有被删除定期删除没有删也没有被访问则redis内存会越来越高应该采用内存淘汰机制 在redis.conf中有一行配置# maxmemory-policy volatile-lru 该配置就是配内存淘汰策略的(什么你没配过好好反省一下自己) 1noeviction当内存不足以容纳新写入数据时新写入操作会报错。应该没人用吧。 2allkeys-lru当内存不足以容纳新写入数据时在键空间中移除最近最少使用的key。推荐使用目前项目在用这种。 3allkeys-random当内存不足以容纳新写入数据时在键空间中随机移除某个key。应该也没人用吧你不删最少使用Key,去随机删。 4volatile-lru当内存不足以容纳新写入数据时在设置了过期时间的键空间中移除最近最少使用的key。这种情况一般是把redis既当缓存又做持久化存储的时候才用。不推荐 5volatile-random当内存不足以容纳新写入数据时在设置了过期时间的键空间中随机移除某个key。依然不推荐 6volatile-ttl当内存不足以容纳新写入数据时在设置了过期时间的键空间中有更早过期时间的key优先移除。不推荐 解决缓存击穿问题 1、利用互斥锁缓存失效的时候先获得锁得到锁了再请求数据库没得到锁则休眠一段时间重试 2、采用异步更新策略无论key是否取到值都直接返回。value值中维护一个缓存失效时间缓存过期则异步起一个线程去读数据库更新缓存需要做缓存预热操作。 3、提供一个迅速判断请求是否有效的拦截机制解决雪崩问题 1、给换成的失效时间加上随机值避免集体失效 2、使用互斥锁但是该方案吞吐量明显下降了 3、双缓存 转载于:https://www.cnblogs.com/yaohuiqin/p/9412367.html