通用命令
- 一. 前言.
- 1.1 通用命令
- 1.2 Redis常用的数据类型
- 1.2.1 String(字符串)
- 1.2.2 List(列表)
- 1.2.3 Set(集合)
- 1.2.4 Hash(哈希)
- 1.2.5 Zset(有序集合)
- 二. 通用命令
- 2.1 keys
- 2.2 exists
- 2.3 del
- 2.4 expire(pexpire)
- 2.4.1 key的过期策略是什么?(经典面试题)
- 2.5 ttl
- 2.6 type
一. 前言.
1.1 通用命令
- 定义: Redis的通用命令是指那些不特定于某种数据类型,而是可以在多种数据类型上使用的命令。
1.2 Redis常用的数据类型
1.2.1 String(字符串)
- String是最基本的数据类型于存储二进制安全的字符串,可以包含任何类型的数据,如文本、数字、图片等。
- 内部实现主要采用简单动态字符串(SDS)或整数(int)来存储。
1.2.2 List(列表)
- List是一个简单的字符串列表,按照插入顺序排序。它可以作为一个队列(先进先出)或者栈(后进先出)来使用。
- 内部实现主要是双向链表(LinkedList)或压缩列表(ZipList),在Redis 3.2之后引入了快速列表(QuickList)作为List的底层实现。
1.2.3 Set(集合)
- Set是一个无序的字符串集合,不允许有重复元素。
- 内部实现主要是哈希表(Hashtable)。
1.2.4 Hash(哈希)
- Hash是一个键值对集合,其中的键和值都是字符串。
- 内部实现根据存储的元素数量和大小,可能会使用压缩列表(ZipList)或哈希表(Hashtable)。
1.2.5 Zset(有序集合)
- Zset是Redis的一个特殊类型,可以存储一个字符串成员(member)与之关联的浮点数分数(score),通过分数来为集合中的成员进行从小到大的排序。
- 内部实现主要使用跳跃表(SkipList)和哈希表(Hashtable)。
二. 通用命令
2.1 keys
- 在Redis中,KEYS命令用于查找所有符合给定模式(pattern)的键(key)。这个命令非常强大,但因为它会扫描数据库中所有的键,所以在使用时需要特别小心,特别是在包含大量键的数据库中,因为它可能会导致性能问题。
- 基本格式:
KEYS pattern
- 所支持的基本查询格式:
- 命令使用演示:
2.2 exists
-
在 Redis 中,EXISTS 是一个用于检查键是否存在的命令。如果指定的键存在,则返回 1;否则返回 0。
-
基本格式:
EXISTS key [key …]
- 命令使用演示:
2.3 del
- 在Redis中,DEL 命令用于删除一个或多个指定的键(key)。如果键不存在,则忽略该操作。如果键存在,则删除该键以及与之相关联的值。DEL 命令是一个通用的删除命令,可以用于删除任何类型的键,包括字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)和哈希表(hashes)等。
- 基本格式:
DEL key [key …]
- 命令使用演示:
2.4 expire(pexpire)
- 在Redis中,EXPIRE 命令用于为存储在Redis数据库中的键(key)设置过期时间。一旦键的过期时间到达,该键及其关联的值将自动被Redis删除(但请注意,删除操作可能是惰性的或定期的,具体取决于Redis的过期策略)。
- 基本格式:
EXPIRE key seconds [NX | XX | GT | LT]
NX、XX、GT、LT 这些选项在 EXPIRE key seconds 命令中并不直接适用。它们通常与Redis的其他命令或功能相关联,用于提供额外的条件控制。在设置键的过期时间时,你可以使用 EXPIRE 命令直接为键设置过期时间(以秒为单位),而不附加这些条件选项。
- 命令使用演示:
2.4.1 key的过期策略是什么?(经典面试题)
- 定期删除:Redis会在后台线程中设置一个定期任务,用于扫描和删除过期键。这个任务会在特定的时间间隔内执行,默认每100毫秒运行一次。在每次定期任务执行时,Redis会从已设置过期时间的键中随机抽取一部分键进行检查,而不是一次性检查所有键。~~ 保证这个抽取检查的过程,足够快!! 因为redis是单线程的程序, 主要的任务(处理每个命令的任务, 刚才扫描过期key…). 如果扫描过期key消耗的时间太多,就可能导致正常处理请求命令就被阻塞了
- 惰性删除: 在取出键时才对键进行过期检查,如果发现键已经过期,则删除该键。用到的时候才删
- 内存淘汰策略.当Redis服务器占用的内存数超过了maxmemory选项所设置的上限值时,会触发内存淘汰策略。
2.5 ttl
- 在Redis中,TTL(Time To Live)命令用于获取存储在Redis数据库中的某个键(key)的剩余生存时间(TTL, time to live),这个时间是以秒为单位的。简单来说,TTL命令会告诉你一个键在多少秒后会被自动删除(如果它设置了过期时间的话)。
- 基本格式:
TTL key
- 命令使用演示:
2.6 type
- TYPE命令接受一个键(key)作为参数,并返回该键存储的值的数据类型。Redis支持多种数据类型,包括字符串(string)、列表(list)、集合(set)、有序集合(zset,也称为sorted set)、哈希(hash)以及流(stream,在Redis 5.0及更高版本中引入)。如果指定的键不存在,TYPE命令将返回none。
- 基本格式:
TTL key
- 命令使用演示: