[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命令的风险
  1. 性能问题

    • KEYS 命令是阻塞操作,会遍历整个数据库来查找匹配的键。
    • 在键数量较多时,执行 KEYS 命令可能会导致 Redis 服务卡顿,影响其他操作的响应时间。
    • 这种操作的时间复杂度为 O(N),其中 N 是数据库中的键数量。
  2. 阻塞客户端

    • 如果一个客户端执行 KEYS 命令,其他客户端的请求可能会被阻塞,直到 KEYS 命令执行完毕。
    • 在高并发场景下,这种阻塞可能导致大量请求堆积,造成 Redis 服务不可用。
  3. 内存消耗

    • 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策略在所有键中移除最近最少使用的键。

相关推荐
TDengine (老段)3 分钟前
TDengine IDMP 组态面板 —— 总体介绍
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
jwn9996 分钟前
【Mysql】:如何恢复误删的数据?
数据库·mysql
yashuk21 分钟前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
lzp079128 分钟前
mysql之联合索引
数据库·mysql
qq56801807629 分钟前
【MySQL】超详细MySQL常用日期格式转换函数、字符串函数、聚合函数(最新版)
数据库·mysql
中杯可乐多加冰41 分钟前
Serverless 时代的内核革命——华为 openYuanrong 深度解析 异构多级缓存与 D2D 高速传输实测
缓存·华为·开源·serverless·openyuanrong
逆境不可逃43 分钟前
【从零入门23种设计模式21】行为型之空对象模式
java·开发语言·数据库·算法·设计模式·职场和发展
灰阳阳1 小时前
Redis的缓存机制
数据库·redis·缓存
wenlonglanying1 小时前
【Redis】设置Redis访问密码
数据库·redis·缓存
盐水冰1 小时前
【烘焙坊项目】后端搭建(6)- 店铺状态设置
java·redis