Redis的基本数据类型及常用命令

Redis基础命令及数据类型操作详解
本文详细介绍了Redis中的通用命令,如KEYS、DEL、EXISTS、EXPIRE、TTL,以及String、Hash、List、Set和SortedSet等数据类型及其常见操作,包括如何设置过期时间、查询和修改数据等。

Redis通用命令

KEYS命令用于查找所有匹配给定模式 pattern 的 key 。生产环境下不建议使用KEYS命令,会影响效率。

匹配规则:

  • h?llo 匹配 hello, hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello and hallo, 不匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo, ... 不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo
  • 使用 \ 转义你想匹配的特殊字符。

通过KEYS命令返回的结果为数组。下面是Redis中keys命令的简单使用

# 创建一些 key 并赋值
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
# 查找含有 name 的 key
redis> KEYS *name*
1) "firstname"
2) "lastname"
# 查找以 a 为开头长度为 3 的 key
redis> KEYS a??
1) "age"
# redis 获取所有的 key 使用 *。
redis> KEYS *
1) "age"
2) "firstname"
3) "lastname"

DEL命令用于删除给定的一个或多个 key 。不存在的key会被忽略。

DEL语句返回值为被删除的数量,下面是del命令的简单使用

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> SET key3 "redis.com.cn"
"OK"
redis> DEL key1 key2 key3 key4
(integer) 3

EXISTS命令用于检查给定 key 是否存在。

从 Redis 3.0.3 起可以一次检查多个 key 是否存在。这种情况下,返回待检查 key 中存在的 key 的个数。

注意:如果相同的 key 在参数列表中出现了多次,它会被计算多次。所以,如果somekey存在, EXISTS somekey somekey 命令返回 2。

EXISTS命令基本语法如下:

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

EXPIRE命令设置 key 的过期时间(seconds)。 设置的时间过期后,key 会被自动删除。

超时时间只能使用删除 key 或者覆盖 key 的命令清除,包括 DEL, SET, GETSET和所有的 *STORE 命令。 对于修改 key 中存储的值,而不是用新值替换旧值的命令,不会修改超时时间。例如,自增 key 中存储的值的 INCR, 向list中新增一个值 LPUSH, 或者修改 hash 域的值 HAST,这些都不会修改 key 的过期时间。

通过使用 PERSIST命令把 key 改回持久的 key,这样 key 的过期时间也可以被清除。

key使用 RENAME 改名后,过期时间被转移到新 key 上。

已经设置过期的key,可以调用 EXPIRE 重新设置。在这种情况下 key 的生存时间被更新为新值。

EXPIRE命令的返回值为两个整数1:设置成功,0:key不存在

EXPIRE 命令基本语法如下:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1

TTL命令以秒为单位返回 key 的剩余过期时间。用户客户端检查 key 还可以存在多久。

Redis 2.6 之前的版本如果 key 不存在或者 key 没有关联超时时间则返回 -1 。

Redis 2.8 起:

  • key 不存在返回 -2
  • key 存在但是没有关联超时时间返回 -1

PPTL命令返回以毫秒为单位的剩余超时时间。

该两种命令的返回值都是剩余超时秒数,失败返回负数如上。

Redis的数据类型

Redis中存在很多数据结构,常用的是以下五种:String,Hash,List,set,ScortSet

String字符串类型

根据字符串类型,又可以划分为三种:

  • string:普通字符串,比如说hello world
  • int:整数类型,可以进行自增,自减。比如说10
  • float:浮点类型,可以进行自增,自减。比如说10.1

不管是哪种类型,底层都是字节数组形式存储,只不过编码方式不同,对于纯数字的string类型,底层会采用二进制的方式存储,节省空间。字符串类型最大存储为512MB

常见命令如下

set key value

添加或修改指定的key值

get key

获取指定key值

mset key1 value1 key2 value2

批量添加多个String键值对

mget key1 key2

根据多个key获取多个value

incr key

让整型的key的值自增1

incrby key size

让整型的key的值自增并指定步长

incrbyfloat key size

让浮点型的key的值自增并指定步长

setnx key value

如果该key不存在,则添加,存在则不执行

setex key seconds value

添加键值对,并指定有效期

为了区分不同业务的存储地址,通常我们会拼接key,一般采用项目名:业务名:类型:id的格式


Hash类型

又叫散列,其value是一个无序字典,类似于Java种的HashMap结构。适合存储对象,因为可以对单个字段进行CURD,并且占用内存更少,如果采用String类型保存Java对象,需要进行序列化JSON形式的字符串,需要保存很多的{} ,: , "" 的符号,而Hash类型不需要保存这些多余的符号。

常用命令如下

hset key field value

将哈希表key中的字段field的值设置为value

hget key field

获取存储在哈希表中的指定字段

hmset key field1 value1 field2 value2

批量添加多个hash类型的key的field的值

hmget key field1 filed2

批量获取多个hash类型的key的field的值

hgetall key

获取在哈希表中指定key的所有字段和值

hdel key field

删除存储在哈希表中的指定字段

hkeys key

获取哈希表中的所有字段

hvals key

获取哈希表中的所有值

hincrby key field size

让一个hash类型的key的字段值自增并执行步长

hsetnx key field value

添加一个hash类型的key的field值,如果存在则不执行


List类型

Redis种的List类型与Java中的LinkedList类型,可以当作双向链表,既可以支持正向检索也可以支持反向检索。特征也与LinkedList类似

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常见命令如下

lpush key element[element2]

将一个或者多个值插入到列表头部

lpop key

移除并返回列表左侧第一个元素

rpush key element[element2]

将一个或多个值插入到列表尾部

rpop key

移除并返回列表右侧第一个元素

lrange key start end

获取列表指定范围元素

llen key

获取列表长度

brpop[blpop] key timeout

移除并获取列表的最后一个元素[列表第一个元素],如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止


Set类型

Redis的Set结构与Java中的HashSet类似,可以看作是一个value为null的HashMap。因为Set类型本身也是一个hash表,因此具备与HashSet类似的特征

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

常见命令

sadd key member1[member2]

向集合添加一个或多个元素

srem key member1 [member2]

移除集合中一个或多个元素

scard key

获取集合的元素个数

sismember key member

判断一个元素是否存在于Set

smembers key

返回集合中的所有元素

sinter key1[key2]

返回给定所有集合的交集

sunion key1 key2 [key3]

返回所有给定集合的并集

sdiff key1 key2 [key3]

返回给定所有集合的差集


ScortSet类型

Redis中的SortSet是一个可排序的Set集合,与Java中的TreeSet相似,但底层实现差别较大,TreeSet是基于红黑树实现,且需要自己编写排序逻辑,而ScoreSet是基于score属性对元素排序,底层实现是一个跳表加hash表。具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快

常见命令如下

zadd key score1 member1[score2 member2]

向集合中添加一个或多个元素或者更新已经存在元素的分数

zrank[zrevrank] key member

获取集合中指定元素的排名[倒序排名]

zcard key

获取集合中的元素个数

zcount key min max

统计给定分数值之间的元素个数

zincrby key size member

集合指定的元素的分数自增,并指定增量

zrange key start end[withscores]

通过索引区间返回集合中指定排名范围的元素。如果添加了withscore连同分数一起展示

zrangebyscore key min max

通过score排序后,获取指定分数范围内的元素

zrem key member[member]

移除集合中的一个或多个元素

zdiff、zinter、zunion

求差集、交集、并集

### Redis 基本数据类型常用命令 #### String 类型 String 是最简单的键值对形式的数据类型,在 Redis 中,字符串可以是纯文本或者二进制安全的字节数组。对于较小长度的字符串(≤ 44 字节),采用 EMBSTR 编码提高效率;当超过该长度则使用 RAW 编码[^5]。 常用的 `String` 操作命令如下: - **SET key value**:设置指定键的字符串值。 - **GET key**:获取存储在给定键上的字符串值。 - **INCR/DECR key**:将键中的数字值增加或减少一。 ```bash SET mykey "Hello" GET mykey ``` #### Hash 类型 哈希表是一种用于存储字段和值映射关系的数据结构。适合用来表示对象属性等场景下的关联数组[^2]。 主要的操作指令包括但不限于: - **HSET key field value**:为哈希表中的字段赋值。 - **HGET key field**:读取特定字段的内容。 - **HMSET/HMGET key field1 [field2 ...]**:批量存入或取出多个字段的信息。 ```bash HSET user:info name "Alice" HGET user:info name ``` #### List 类型 列表是由链表实现的一系列有序项组成的集合。支持两端高效插入删除操作。 典型的应用场景有消息队列等功能模块开发需求下应用广泛。 涉及的主要命令列举如下: - **LPUSH/RPUSH list-key element[s]**:向列表左侧或右侧压入新成员。 - **LPOP/RPOP list-key**:弹出并返回列表左端或右端的第一个元素。 ```bash RPUSH queue item1 item2 LRANGE queue 0 -1 ``` #### Set 类型 无序不重复元素集合作为 set 存储单元提供了去重功能的同时还具备交集、并集运算能力。 核心命令汇总: - **SADD key member [member ...]**:添加一个或更多成员到集合里。 - **SMEMBERS/SISMEMBER key member**:查看某个成员是否存在以及遍历整个集合内的全部条目。 ```bash SADD unique-items apple banana orange SCARD unique-items ``` #### Sorted Set (ZSet) 类型 有序集合不仅能够保持唯一性还能依据分数排序展示结果,因此非常适合排行榜类应用场景的需求。 代表性命令描述: - **ZADD key score member [score member ...]**:按照分值顺序加入新的记录。 - **ZRANK/ZREVRANK key member**:查询某成员所在排名位置(正序/逆序)。 ```bash ZADD leaderboard 98 playerA 76 playerB ZRANGEBYSCORE leaderboard 0 +inf WITHSCORES ``` 除了上述针对不同类型特有的专用命令外,还有一些适用于所有种类 Key 的通用工具方法可供调用,比如通过 `KEYS pattern` 来查找匹配模式的所有 Keys[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmbwcx2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值