redis缓存设计-Redis(八)

这篇具有很好参考价值的文章主要介绍了redis缓存设计-Redis(八)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上篇文章介绍了redis缓存设计,热点key,bigkey注意事项。

原创 redis缓存设计-Redis(七)https://blog.csdn.net/ke1ying/article/details/131268967

  • 命令使用
  1. hgetall,lrange,smembers,zrange,sinter等并非不能使用,要指定明确的值,遍历的话要使用hscan、sscan、zscan代替。
  2. 禁止使用keys,flushall,flushdb等,通过rename禁止掉,或者用scan方式渐进。
  3. 合理的使用select:

redis多DB较弱,而且如果每个都有很大的高并发访问,而都接入一个redis,效率是底下且会造成干扰。(不想干的业务进行拆分,不共用)

  1. 可以采用pipeline代替mget,mset:

前者是非原生的,后者是原生的,原生有原子性,非原生没有,pipeline可以打包不同命令,并且他需要客户端服务端都支持。

  1. redis事务比较弱建议用lua脚本实现。
  • 核心参数
  1. maxTotal

最大连接数,早期较maxActive

一般maxTotal*nodes 小于 maxclients

为什么呢?

因为如果每个客户端处理的是1000,而我们有10个客户端,那么可以处理10000,即使maxclients设计的再大,剩余的也不会存储。

如果我们要求业务QPS是50000?

那么根据每个客户处理1000,则需要配置50个客户端就可以完成QPS5000的业务,但实际要考虑一些网络消耗时间,所以实际要比这个值稍微大一点。

但又不是越大越好,占用太多服务器和客户端资源,而且如果有一个大的阻塞key,对于配置再多也无济于事。

  1. maxIdle和minIdle

最大空闲连接 和 最小空闲连接

当redis在业务峰值期间连接了几十个redis连接,这时候峰值过后,redis会慢慢关闭连接,留下maxIdle空闲连接数,正常配置默认都是maxIdle。

连接池预热,当redis刚启动的时候,就有大量并发访问,这时候可以采用ping命令先连接redis,保证先有空闲连接数。(预热的时候千万别执行jedis.close)

当我们并发量很高,或者并发量很频繁的时候,maxIdle和maxTotal设置可以保持一致,这样避免连接创建和关闭造成的性能损耗,并发量不是特别高就没必要。

  • redis删除策略

删除分为 被动删除 和 主动删除

  1. 被动删除:又叫惰性删除,当我们删除一个key的时候不会立马删掉,会在下一次访问的时候,触发惰性删除策略。(获取前判断key是否过期,过期则删除返回null)

这种情况下会出现一个问题是冷数据无法及时清理,如果一个数据不被访问了,不是一直不会被删除吗。

  1. 主动删除:所以redis会定期清理一些已过期的key。
  2. 当已用内存超过maxmemory时,触发主动删除策略。

主动删除策略在4.0之前有6种,redis4.0之后8种。

针对过期key:

  1. volitile-ttl:在筛选时候,会针对过期时间,越早过期的先删除。
  2. Volitile-random:对设置过期的key,随机删除。
  3. Volatile-lru:采用lru算法对过期key删除。
  4. Volatile-lfu:采用lfu算法对过期key删除。

针对所有key

  1. allkeys-random:对所有key随机删除。
  2. Allkeys-lru:lru算法对所有key进行删除。
  3. Allkeys-lfu:lfu算法对所有key进行删除。

不删除

  1. noeviction:不删除任何数据,提示OOM,这时候redis只支持读数据。

Lru算法:用最近一次访问时间作为参考,淘汰很久时间之前访问的数据。

Lfu算法:以访问次数参考,淘汰次数少的数据。

热点数据如果用lru算法,效率可能会更高,但如果是偶发、周期性的批量操作导致LRU命中率急剧下降,缓存污染比较严重,这时候LFU更好。

(比如热点数据访问100次,但是冷数据访问就2次,但因为是按访问时间来淘汰的,所以这时候可能会把热点数据淘汰,所以这时候采用lfu更好)

默认推荐用lru算法,maxmemory-policy默认是noeviction。这里maxmemory一定要设置,如果不设置,redis超过物理内存限制,内存数据和磁盘会频繁swap,会导致性能下降。

对于主从节点,主节点是策略删除,从节点是被同步的del key删除。文章来源地址https://www.toymoban.com/news/detail-498763.html

到了这里,关于redis缓存设计-Redis(八)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 49.Redis缓存设计与性能优化

    缓存与数据库双写不一致 小概率事件 //线程1 写数据库stock = 5 ---------------》更新缓存 //线程2 写数据库stock = 4 -----》更新缓存 //线程1 ------》写数据库stock = 10 -----》删除缓存 //线程2 -----------------------------------------------------------------------------------------------》写数据库stock = 9 -

    2024年02月08日
    浏览(43)
  • 【Redis(7)】缓存技术的挑战及设计方案

    缓存是计算机科学中用于提升系统性能的一种关键技术。在本文中,我们将针对缓存的基本概念、可能遇到的问题、优缺点、常见策略以及设计一个高可用、高性能、高并发缓存方案的思路进行探讨。 缓存是一种数据存储实践,它将频繁访问的数据保存在快速访问的存储介质

    2024年04月25日
    浏览(36)
  • 缓存解析:从架构设计到Redis应用及最佳实践

    在现代软件架构中,缓存是优化数据检索、提高应用性能的关键组件。缓存的存储位置多种多样,每个位置针对特定的优化目标和需求。理解这些层级对于设计高效的系统至关重要。 浏览器缓存 :这是最接近用户端的缓存层。浏览器缓存存储了用户经常访问的静态资源,如

    2024年01月22日
    浏览(48)
  • redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)

    1 redis其它操作 2 redis管道 3 django中使用redis 3.1 通用方案 3.2 第三方模块 4 django缓存 5 celery介绍 5.1 celery的快速使用

    2024年02月07日
    浏览(50)
  • 博客摘录「 Redis( 缓存篇 ==> 超详细的缓存介绍与数据一致性解决方案 &; 代码实现」

    Redis 旁路缓存 由于高并发原因,先更新数据库和先更新缓存策略都会因为延迟时间而导致数据不一致问题。 两种策略 先删除缓存,再更新数据库; 先更新数据库,再删除缓存。 因为缓存的写入通常要远远快于数据库的写入 ,所以先更新数据库再删缓存,删完缓存,下次访

    2024年02月15日
    浏览(40)
  • Redis缓存设计与性能优化【并发创建同一个缓存,解决方案:互斥锁】

    开发人员使用“缓存+过期时间”的策略既可以加速数据读写, 又保证数据的定期更新, 这种模式基本能够满足绝大部分需求。 但是有两个问题如果同时出现, 可能就会对应用造成致命的危害: 当前key是一个热点key(例如一个热门的娱乐新闻),并发量非常大。 重建缓存不

    2024年04月09日
    浏览(52)
  • 系统架构设计师之缓存技术:Redis与Memcache能力比较

    系统架构设计师之缓存技术:Redis与Memcache能力比较 

    2024年02月11日
    浏览(47)
  • 常用的缓存工具有ehcache、memcache和redis,这里介绍spring中ehcache的配置。

    常用的缓存工具有ehcache、memcache和redis,这里介绍spring中ehcache的配置。 1.在pom添加依赖: 2.在applicationContext.xml添加命名空间: 3.在applicationContext.xml中配置ehcache: 4.创建ehcache的配置文件ehcache-setting.xml: 这里我们配置了自定义缓存cacheTest,10秒过期。 cache元素的属性: name:缓

    2024年02月16日
    浏览(42)
  • 【Redis】十大数据类型(上篇)

    命令官网 英文版:https://redis.io/commands/ 中文版:http://redis.cn/commands.html/ Key命令 命令不区分大小写,但是key区分 命令 说明 keys * 查看当前库所有的key exists key 判断某个key是否存在,返回1表示存在,返回0表示不存在 type key 查看你的key是什么类型 del key 删除指定的key数据 unli

    2023年04月15日
    浏览(35)
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、广播变量)介绍及示例(8) - 完整版

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包