redis缓存设计-Redis(八)

news2024/10/6 10:28:22

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

原创 redis缓存设计-Redis(七)icon-default.png?t=N5F7https://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删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【初识Linux】——01Linux系统

目录索引 Linux介绍:Linux历史:Linux系统应用:*服务器系统:**嵌入式系统:**桌面应用系统:**版本:* Linux系统的安装:虚拟机:安装VMware:安装centOS操作系统&a…

【AI实战】开源可商用的中英文大语言模型baichuan-7B,从零开始搭建

【AI实战】开源可商用的中英文大语言模型baichuan-7B,从零开始搭建 baichuan-7B 简介baichuan-7B 中文评测baichuan-7B 搭建参考 baichuan-7B 简介 baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约…

解决安卓12限制32个线程

Android 12及以上用户在使用Termux时,有时会显示[Process completed (signal 9) - press Enter],这是因为Android 12的PhantomProcesskiller限制了应用的子进程,最大允许应用有32个子进程。 这里以ColorOS 12.1为例(其他系统操作略…

状态机编程实例-嵌套switch-case法

嵌入式软件开发中,状态机编程是一个比较实用的代码实现方式,特别适用于事件驱动的系统。 本篇,以一个炸弹拆除的小游戏为例,介绍状态机编程的思路。 C/C语言实现状态机编程的方式有很多,本篇先来介绍最简单最容易理解…

uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器

前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能。 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseImage,uni.uni.uploadFile 它和pc端原理差不多,都是…

5年测试经验,测试老鸟总结功能测试——全测试点覆盖

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 功能测试主要包括…

使用vscode编写并运行typescript代码

1.安装vsCode Visual Studio Code - Code Editing. Redefined 2.安装nodejs 下载 | Node.js 中文网 3.打开vscode,在vscode里面打开终端(快捷键是ctrl~) 查看是否成功安装node和npm: node -v npm -v 在终端中输入如下命令并…

ELK详细安装配置

1.安装jdk1.8(略) 2.安装配置本机防火墙(略) 3.ELK版本选择 参考:支持一览表 | Elastic 选择支持java8的版本 4.版本6安装 root依次用户执行 wget https://artifacts.elastic.co/downloads/elasticsearch/elast…

C++基础(1)——程序内存模型和引用

前言 本文主要介绍了C中内存模型的四区及存放的数据,引用的基本语法。 1.1:代码区(程序运行前) 1:存放CPU执行的机器指令 2:代码区是共享的,共享的目的是对于频繁被执行的程序,只…

在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

第3章 作业(268EF)【网络安全】

第3章 作业【网络安全】 前言推荐第3章 作业268EF如何不用计算机计算求模 最后 前言 2023-6-19 15:49:17 以下内容源自《网络安全》 仅供学习交流使用 推荐 第2章 作业(2456)【网络安全】 第3章 作业 2 3.2什么是MAC? MAC:消息认证码…

网页设计实习周记范文5篇(合集)

网页设计实习周记(一) 本周主要是做网站维护更新。 网站要注意经常维护更新内容,保持内容的新鲜,不要一做好就放在那儿不变了,只有不断地给它补充新的内容,才能够吸引住浏览者。 通过目前的实习,在设计方面我感觉自己有…

探究设备管理系统在工业领域的应用

在现代工业领域,设备是生产过程中至关重要的组成部分。有效管理和维护设备对于保障生产的连续性、提高生产效率和降低成本至关重要。而设备管理系统的引入为企业提供了一种综合性的解决方案,能够全面监控、维护和优化设备的运行状态。本文将探讨设备管理…

Linux MySQL 备份与恢复 日志管理

数据库备份 备份策略 完全备份 每次备份都备份完整的数据库。 备份数据最大,每次都要完整备份。但是恢复最方便差异备份 只备份上一次完全备份后的更新数据。 第一次完整备份,之后备份第一次没有备份的内容增量备份 每次备份只备份上一次完全备份或增量备…

终于!Ubuntu下水“不可变”!

来源丨51CTO技术栈(ID:blog51cto) 要说今年Linux哪个概念火?肯定少不了“不可变”。Ubuntu也终于按捺不住了。 就在6月初,Ubuntu的母公司Canonical宣布:将很快加入不可变的发行版潮流。 虽然一开始Snap的首…

Spring学习笔记——从配置文件到注解开发 创建对象+成员变量赋值 增强方法

目录 引出Spring入门案例初识Spring入门案例1----用配置文件实现 Druid JDBCTemplate dao1.之前的方式:new对象2.用配置文件的方法把new对象交给Spring3.如果要用对象,从spring的容器中获取ac.getBean("userDao");4.实体类和dao层的代码--问…

【Leetcode60天带刷】day11栈与队列——20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

题目: 20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个…

ARM存储器概论

一、ARM指令集概述 1.指令集 指令 (1)能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...) (2)指令在内存中以机器码(二进制)的方式存在 (3)每…

奉加微电子蓝牙芯片SDK例程怎么用

摘要:本文以定时器例程为例,介绍奉加微电子蓝牙芯片PHY6222的例程怎么样打开,怎么样编译,怎么样烧录。 硬件如上图,软件使用了两个,一个是keil5,另一个是PhyPlusKit(奉加微电子的烧录…

直到我买了服务器才知道有个自己的服务器有多爽!

一、我为什么要买服务器 我在大学时候就买了一个自己的小服务器,其实就是电视盒子刷的centos,当时还花了两百多大洋呢!当时那个服务器只是用来放自己的博客,但是那个服务器性能太垃圾了,也就只能放个网页了&#xff0…