[Redis]基本全局命令
Redis存储方式介绍
在 Redis 中数据是以键值对的凡事存储的,键(Key)和值(Value)是基本的数据存储单元。以下是对 Redis 键值对的详细讲解:
键(Key):
类型:键是字符串类型,可以包含任何二进制数据。
长度限制:键的最大长度为 512 MB。
命名规范:虽然 Redis 对键的命名没有严格的要求,但为了提高可读性和管理性,通常使用有意义的命名规范。例如: session:abc123
值(Value):
值可以是多种数据类型之一,Redis 提供了丰富的数据结构来存储不同类型的数据:
比如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set,ZSet)、位图(Bitmap)、HyperLogLog、地理空间索引(Geospatial)、流(Stream)
这里以字符串类型举例,其他数据类型后面会介绍
基础全局命令介绍
设置和获取键值对(string)

这里操作就是这是一个key1 value1的键值对,key1为键,value1为值
设置好后,再用get命令获取到key1对应的值
获取到value1
检查键是否存在
exists key

因为有key1,所以使用key1可以查询到,返回了1
(这里也可以一次性查询多个key,返回就是有几个查到了,就返回几)
没有key2,查询不到,返回0
查找键
keys [pattern]
返回所有满足样式(pattern)的 key。支持如下统配样式。
h?llo 匹配 hello , hallo 和 hxllo
h*llo 匹配 hllo 和 heeeello
h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello
h[a-b]llo 匹配 hallo 和 hbllo
keys * 返回数据库中所有key

使用 keys 命令在 Redis 中有很大的风险,特别是在生产环境中。这是因为 keys 命令会扫描整个数据库并返回匹配指定模式的所有键。这种操作可能会对 Redis 服务器的性能产生严重影响,特别是在键数量较多的情况下。
keys命令的风险
-
性能问题:
KEYS命令是阻塞操作,会遍历整个数据库来查找匹配的键。- 在键数量较多时,执行
KEYS命令可能会导致 Redis 服务卡顿,影响其他操作的响应时间。 - 这种操作的时间复杂度为 O(N),其中 N 是数据库中的键数量。
-
阻塞客户端:
- 如果一个客户端执行
KEYS命令,其他客户端的请求可能会被阻塞,直到KEYS命令执行完毕。 - 在高并发场景下,这种阻塞可能导致大量请求堆积,造成 Redis 服务不可用。
- 如果一个客户端执行
-
内存消耗:
KEYS命令返回的结果集可能非常大,导致返回的数据量超出客户端的处理能力。- 结果集需要在内存中存储,可能导致 Redis 服务器的内存压力增大。
当然,也有其他命令可以代替keys,比如scan命令,后面会讲到。
在数据量很小的情况下,使用keys命令问题不大。
删除键
del key

这里因为存在key1,所以使用del删除返回1,表示删除成功1个
但是key2不存在,没有删除任何key,返回0
设置过期时间
expire key seconds (单位是秒)
pexpire key millisecond (单位是毫秒)

设置key1,然后设置key1的过期时间为10秒
10秒后用exists查询,返回0,说明key1已经过期被删除了
查询键的剩余生存时间
TTL:获取键的剩余生存时间(单位是秒)
PTTL:获取键的剩余生存时间(单位是毫秒)

设置键值对并设置过期时间
用ttl和pttl查询剩余过期时间
过期后,key1被删除,返回-2

如果返回-1,说明key是永久存在的,没有设置过期时间
redis过期策略
Redis 通过多种策略来管理键的过期和内存回收
可以在redis系统文件的配置,也就是redis.conf里修改过期策略
1. 惰性删除(Lazy Deletion)
惰性删除策略意味着当客户端访问某个键时,Redis 会检查该键是否已经过期。如果该键已经过期,Redis 将立即删除它,并返回一个不存在的结果。
- 实现方式:
- 每次读取或写入一个键时,Redis 都会检查该键的过期时间。
- 如果过期时间已到,Redis 会删除该键,然后返回不存在的结果或进行相应的写操作。
- 优点:
- 不会额外占用 CPU 资源,因为只在访问键时进行检查。
- 缺点:
- 过期键在没有被访问时仍会占用内存。
2. 定期删除(Periodic Deletion)
定期删除策略是指 Redis 以固定的时间间隔对带有过期时间的键进行扫描和删除。
- 实现方式:
- Redis 内部会运行一个后台任务,以每秒 10 次的频率随机抽取一部分带有过期时间的键进行检查。
- 如果发现这些键已经过期,Redis 会删除它们。
- 优点:
- 相对平衡了性能和内存回收的需求。
- 可以在一定程度上避免大量过期键长时间占用内存。
- 缺点:
- 由于是定期抽样检查,仍有可能存在一些过期键在被检查到之前长时间占用内存。
Redis 过期键处理策略(惰性删除和定期删除)是内置的,不需要特别配置。
但是可以通过以下配置调整定期删除的频率:(在redis.conf配置文件里)
hz 10
这表示 Redis 的事件循环频率,每秒执行 10 次事件循环。这个值会影响定期删除过期键的频率。
3. 主动删除(Active Deletion)
主动删除策略主要是通过内存淘汰策略(Eviction Policy)来实现,当 Redis 内存达到配置的最大使用量时,会主动删除一些键来释放内存。
-
配置方式:
- 可以通过
maxmemory配置项设置 Redis 的最大内存使用量。 - 可以通过
maxmemory-policy配置项设置内存淘汰策略,包括以下几种:volatile-lru:从设置了过期时间的键中移除最近最少使用的键。allkeys-lru:从所有键中移除最近最少使用的键。volatile-lfu:从设置了过期时间的键中移除最不常使用的键。allkeys-lfu:从所有键中移除最不常使用的键。volatile-ttl:从设置了过期时间的键中移除将要过期的键。noeviction:当内存达到限制时,不再进行删除操作,直接返回错误。volatile-random:从设置了过期时间的键中随机移除键。allkeys-random:从所有键中随机移除键。
- 可以通过
-
优点:
- 可以确保 Redis 在达到内存上限时继续运行。
- 根据不同的策略,可以优化特定场景下的性能和内存使用。
-
缺点:
- 可能导致一些热键(高频访问的键)被移除,从而影响性能。
4. 内存淘汰策略
当 Redis 内存使用达到限制时,会根据配置的内存淘汰策略删除一些键,以释放内存。以下是一些常用的内存淘汰策略:
- LRU(Least Recently Used):删除最近最少使用的键。
- LFU(Least Frequently Used):删除使用频率最少的键。
- TTL(Time to Live):删除最早过期的键。
- 随机删除:随机删除一些键。
可以通过 maxmemory-policy 配置项来设置具体的淘汰策略。
比如:
maxmemory-policy allkeys-lru
这表示当达到最大内存限制时,Redis 将采用 LRU策略在所有键中移除最近最少使用的键。
相关文章:
[Redis]基本全局命令
Redis存储方式介绍 在 Redis 中数据是以键值对的凡事存储的,键(Key)和值(Value)是基本的数据存储单元。以下是对 Redis 键值对的详细讲解: 键(Key): 类型:…...
【Linux】- HBase集群部署 [19]
简介 apache HBase是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。 和Redis一样,HBase是一款KeyValue型存储的数据库。 不过和Redis涉及方向不同 Redis设计为少量数据,超快检索HBase设计为海量数据,快速检索 HBase在大数据邻域…...
js如何遍历FormData的值
遍历FormData的值,一般有2种方法:forEach 和 for...of entries const data new FormData();data.append(aaa, 111); data.append(bbb, 222);// 方法1 data.forEach((value, key) > {console.log(key, value); }) 输出 aaa 111 和 bbb 222// 方法2 …...
【C语言】明析部分C语言内存函数
目录 1.memcpy 2.memmove 3.memset 4.memcmp 以下都是内存函数,作用单位均是字节 1.memcpy memcpy是C/C语言中的一个内存拷贝函数,其原型为: void* memcpy(void* dest, const void* src, size_t n);目标空间(字节)…...
一阶数字高通滤波器
本文的主要内容包含一阶高通滤波器公式的推导和数字算法的实现以及编程和仿真 1 计算公式推导 1.1.2 算法实现及仿真 利用python实现的代码如下: import numpy as np # from scipy.signal import butter, lfilter, freqz import matplotlib.pyplot as plt #2pifW…...
Linux多线程系列2: 模拟封装简易语言级线程库,线程互斥和锁,线程同步和条件变量,线程其他知识点
Linux多线程系列2: 模拟封装简易语言级线程库,线程互斥和互斥锁,线程同步和条件变量,线程其他知识点 1.前言 一.模拟C11线程库自己封装简易语言级线程库1.实现框架2.迅速把构造等等函数写完3.start和work1.尝试一2.尝试二3.最终版本4.给出代码 二.模拟实现多线程(为编写线程池做…...
VUE3-form表单保存附件与基本信息
element-ui代码 <el-dialog :title"上传附件" v-model"dialogAdds.visible" width"500px" append-to-body> <el-form-item label"唯一标识"> <dict-tag v-if"form.groupId" :options"unique_identifica…...
无线网络安全技术基础
无线网络安全技术基础 无线网络安全风险和隐患 随着无线网络技术广泛应用,其安全性越来越引起关注.无线网络的安全主要有访问控制和数据加密,访问控制保证机密数据只能由授权用户访问,而数据加密则要求发送的数据只能被授权用户所接受和使用。 无线网络在数据传输时以微波进…...
sheng的学习笔记-docker部署Greenplum
目录 docker安装gp数据库 mac版本 搭建gp数据库 连接数据库 windows版本 搭建gp数据库 连接数据库 docker安装gp数据库 mac版本 搭建gp数据库 打开终端,输入代码,查看版本 ocker search greenplum docker pull projectairws/greenplum docker…...
【投稿资讯】区块链会议CCF A -- SP 2025 截止6.6、11.14 附录用率
会议名称:46th IEEE Symposium on Security and Privacy( S&P) CCF等级:CCF A类学术会议 类别:网络与信息安全 录用率:2023年 195/1147,2024年录用了17篇和区块链相关的论文 Topics of interest inc…...
C++哪些函数不能被声明为虚函数
在C中,某些函数不能被声明为虚函数。下面详细解释哪些函数不能被声明为虚函数,并通过代码示例进行说明。 C哪些函数不能被声明为虚函数 不能声明为虚函数的函数示例代码及解释一、构造函数不能是虚函数二、静态成员函数不能是虚函数三、友元函数不能是虚…...
vue中数据已经改变了,但是table里面内容没更新渲染!
解决方案: 给table或者el-table标签上添加一个动态key值,只要数据发生改变,key值变动一下即可 标签上: :key“timeStamp” 初始data:timeStamp:0, 更新数据:this.timeStamp 这样每次更新数据ÿ…...
头歌实践教学平台:Junit实训入门篇
第2关:Junit注解 任务描述 给出一个带有注解的Junit代码及其代码打印输出,要求学员修改注解位置,让输出结果变为逆序。 相关知识 Junit注解 Java注解((Annotation)的使用方法是" 注解名" 。借助注解&a…...
matlab使用教程(80)—修改图形对象的透明度
1.更改图像、填充或曲面的透明度 此示例说明如何修改图像、填充或曲面的透明度。 1.1坐标区框中所有对象的透明度 透明度值称为 alpha 值。使用 alpha 函数设置当前坐标区范围内所有图像、填充或曲面对象的透明度。指定一个介于 0(完全透明)和 1&#x…...
mysql bin 日志转成sql
首先确定mysql binlog 服务开启 SHOW VARIABLES LIKE log_bin; 找到binlog日志 find / -name mysql-bin.* -type f 下载下来 本地找到mysql安装位置的bin目录 在窗口路径处直接输入cmd 执行 mysqlbinlog --no-defaults --base64-outputdecode-rows -v --start-datetime&…...
河南道路与桥梁乙级资质申请:注册证书与职称证书准备
在河南道路与桥梁乙级资质申请中,注册证书与职称证书的准备是不可或缺的环节。以下是关于如何准备这些证书的一些关键步骤和要点: 明确所需证书类型: 注册证书:这通常指的是相关专业的注册工程师证书,如注册土木工程师…...
3D工业视觉
前言 本文主要介绍3D视觉技术、工业领域的应用、市场格局等,主要技术包括激光三角测量、结构光、ToF、立体视觉。 一、核心内容 3D视觉技术满足工业领域更高精度、更高速度、更柔性化的需求,扩大工业自动化的场景。 2D视觉技术基于物体平面轮廓&#…...
使用auth_basic模块进行基础认证
在建立和维护Web服务器时,身份认证是一个至关重要的环节。Nginx作为一个高性能的Web服务器,支持许多认证方法,其中较为简单和常用的一种即是基础身份认证(Basic Authentication),这需要借助auth_basic模块实…...
深度解析物联网平台:优化数据点位管理的实战策略
策略管理 策略,作为在物联网平台数据点位创建过程中可设定的规则,涵盖了多个重要方面,策略是在创建点位的时候,可以设置的规则,包括存储策略、告警策略、通知策略以及联动策略。这些策略都是通过专门的列表页面进行集…...
Spring常见问题
如何理解spring属于低侵入式设计? 在代码中不需要写明具体依赖对象,在运行时进行自动注入,降低了组件的耦合依赖的是接口,而接口的实现类具有拓展性 Spring IOC 实现了什么功能,谈谈你对IOC的理解。 负责创建对象&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
