Master Redis Data Types: Essential Commands and Real-World Examples
Explore comprehensive Redis data type operations—including strings, hashes, lists, sets, and sorted sets—through detailed command examples, usage scenarios, and practical tips, while also learning how to manage keys, expiration, and messaging queue concepts for effective in‑memory data handling.
Redis Data Types
General Operations
# 判断key是否存在
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS name1
(integer) 0
# 修改key名字
127.0.0.1:6379> RENAME name name2
OK
# 查看指定key的数据类型
127.0.0.1:6379> type name2
string
127.0.0.1:6379> type PHPREDIS_SESSION:5555fb82ae8b698030baad3da87f9a8b
string
# 删除key
127.0.0.1:6379> del name2
(integer) 1
# 查看一个key的生存时间
127.0.0.1:6379> ttl age
(integer) -1
127.0.0.1:6379> ttl PHPREDIS_SESSION:5555fb82ae8b698030baad3da87f9a8b
(integer) 1212
# 以秒为单位设置生存时间
127.0.0.1:6379> EXPIRE aaa 100
# 以毫秒为单位设置生存时间
127.0.0.1:6379> PEXPIRE aaa 100
# 取消生存时间
127.0.0.1:6379> PERSIST aaaString Type Operations (strings)
Increase
# 设置key
127.0.0.1:6379> set name zls
OK
# 设置多个key
127.0.0.1:6379> mset name zls name1 huanglong name2 wuyangke
OK
# 查看多个key值
127.0.0.1:6379> MGET name name1 name2
1) "zls"
2) "huanglong"
3) "wuyangke"
# 先获取一个key的值,再设置或者修改key值
127.0.0.1:6379> getset xxx 123
(nil)
127.0.0.1:6379> get xxx
"123"
# 设置key同时设置生存时间(秒为单位)
127.0.0.1:6379> set book hongloumeng ex 100
OK
# 设置key同时设置生存时间(毫秒为单位)
127.0.0.1:6379> set book hongloumeng px 100
OK
# 字符串自增
127.0.0.1:6379> incr zan
(integer) 1
# 指定增加数量
127.0.0.1:6379> incrby fans 10000
(integer) 10023
# 自减
127.0.0.1:6379> decr fans
(integer) 10012
# 执行自减数量
127.0.0.1:6379> decrby fans 1000
(integer) 9012
# 按照小数自增
127.0.0.1:6379> incrbyfloat zls 0.1
"1.4"Delete
127.0.0.1:6379> del zls
(integer) 1Modify
# 字符串追加
127.0.0.1:6379> APPEND name1 liquanyi
(integer) 17
127.0.0.1:6379> get name1
"huanglongliquanyi"
# 修改第N个字符
127.0.0.1:6379> setrange name1 5 L
(integer) 17
127.0.0.1:6379> get name1
"huangLongliquanyi"Query
# 查看一个key
127.0.0.1:6379> get name1
"huangLongliquanyi"
# 查看多个key
127.0.0.1:6379> mget name1 name2
1) "huangLongliquanyi"
2) "wuyangke"
# 查看字符串的长度
127.0.0.1:6379> strlen name1
(integer) 17
127.0.0.1:6379> strlen name2
(integer) 8
# 查看生存时间(秒)
127.0.0.1:6379> ttl name1
(integer) 93
# 查看生存时间(毫秒)
127.0.0.1:6379> pttl name1
(integer) 91417
# 字符串截取
127.0.0.1:6379> getrange name1 0 4
"huang"Hash Type (Dictionary)
Application scenario: Storing partially changing data such as user or product information; the structure closest to a relational table.
# 创建key
hset keyname field value
hset student_id_1 name zls
hset student_id_1 name zls age 18 gender m
hmset student_id_1 name zls age 18 gender m
# 查询
hget keyname field
hget student_id_1 name
hgetall keyname
hgetall student_id_1
hmget student_id_1 name age
# 删除
127.0.0.1:6379> hdel student_id_1 age gender
(integer) 2
127.0.0.1:6379> hgetall student_id_1
127.0.0.1:6379> del student_id_1
# 修改
127.0.0.1:6379> hset student_id_1 name zls age 18 gender m
(integer) 3
127.0.0.1:6379> hgetall student_id_1
1) "fans"
2) "8"
3) "zan"
4) "9"
5) "name"
6) "zls"
7) "age"
8) "18"
9) "gender"
10) "m"List Type (List)
Message Queue Concept: A list can be used as a simple message queue where producers push messages and consumers pop them, enabling asynchronous processing and decoupling of services.
# 将数据添加在最右边
127.0.0.1:6379> rpush name1 hl
(integer) 1
127.0.0.1:6379> rpush name1 wyk
(integer) 2
127.0.0.1:6379> rpush name1 zls
(integer) 3
# 如果数据不存在则不创建
lpushx name2 hl
# 将数据插入到key的任意位置
127.0.0.1:6379> linsert name2 after hl hjx
# after:在...之后,before:在...之前
# 查看key中的指定范围数据
127.0.0.1:6379> lrange name 0 2
(empty array)
127.0.0.1:6379> lrange name1 0 2
1) "hl"
2) "wyk"
3) "zls"
# 从key的最左边取出数据
127.0.0.1:6379> lpop name1
"hl"
127.0.0.1:6379> lpop name1
"wyk"
127.0.0.1:6379> lpop name1
"zls"
# 查看key的长度
127.0.0.1:6379> llen name1
# 将name1右边的数据取出,写入name2左边
127.0.0.1:6379> lrange name1 0 2
1) "wyk"
2) "hjx"
3) "xwq"
127.0.0.1:6379> lrange name2 0 2
1) "hl"
2) "hjx"
3) "zls"
127.0.0.1:6379> rpoplpush name1 name2
"xwq"
127.0.0.1:6379> lrange name2 0 2
1) "xwq"
2) "hl"
3) "hjx"
127.0.0.1:6379> lrange name2 0 3
1) "xwq"
2) "hl"
3) "hjx"
4) "zls"
# 删除(从左边开始删除指定个数元素)
127.0.0.1:6379> lrange name2 0 100
1) "hl"
2) "hl"
3) "hl"
4) "hl"
5) "hl"
6) "hl"
7) "xwq"
8) "hl"
9) "hjx"
10) "zls"
11) "hl"
12) "hl"
13) "hl"
14) "hl"
127.0.0.1:6379> lrem name2 7 hl
(integer) 7
127.0.0.1:6379> lrange name2 0 100
1) "xwq"
2) "hjx"
3) "zls"
4) "hl"
5) "hl"
6) "hl"
7) "hl"
# 保留指定下标的元素,其余的都删除(ltrim)
127.0.0.1:6379> lrange name2 0 100
1) "xwq"
2) "hjx"
3) "zls"
4) "hl"
5) "hl"
6) "hl"
7) "hl"
127.0.0.1:6379> ltrim name2 0 1
OK
127.0.0.1:6379> lrange name2 0 100
1) "xwq"
2) "hjx"
# 修改元素
127.0.0.1:6379> lrange name1 0 100
1) "wyk"
2) "hjx"
127.0.0.1:6379> lset name1 0 xwq
OK
127.0.0.1:6379> lrange name1 0 100
1) "xwq"
2) "hjx"
# 按索引查询
127.0.0.1:6379> lindex name1 1
"hjx"
127.0.0.1:6379> lindex name1 0
"xwq"
127.0.0.1:6379> lindex name1 2
(nil)
127.0.0.1:6379> lindex name1 -1
"hjx"
# 朋友圈示例(使用list模拟)
127.0.0.1:6379> lpush wechat 'monday hl sb'
(integer) 1
127.0.0.1:6379> lpush wechat 'tiusiday hl yiran sb'
(integer) 2
127.0.0.1:6379> lpush wechat 'wensiday hl always sb'
(integer) 3
127.0.0.1:6379> lrange wechat 0 -1
1) "wensiday hl always sb"
2) "tiusiday hl yiran sb"
3) "monday hl sb"Set Type (Set)
Example sets: Group1: 1 2 3 4 5 Group2: 1 3 5 7 9
Intersection: 1 3 5 Union: 1 2 3 4 5 7 9 Difference: 2 4 7 9
# 创建集合
127.0.0.1:6379> sadd zls_fans wyk hl
(integer) 2
127.0.0.1:6379> sadd tly_fans mls gaofei wyk
(integer) 3
# 查询集合中的元素是否存在
127.0.0.1:6379> sismember zls_fans hl
(integer) 1
127.0.0.1:6379> sismember zls_fans cls
(integer) 0
# 查询集合中的所有元素
127.0.0.1:6379> SMEMBERS zls_fans
1) "hl"
2) "wyk"
# 查询集合中元素数量
127.0.0.1:6379> scard zls_fans
(integer) 2
127.0.0.1:6379> scard tly_fans
(integer) 3
# 差集(取前面集合的不同之处)
127.0.0.1:6379> sdiff hl_fans tly_fans zls_fans
1) "xiaoxuesheng"
# 交集(共同好友)
127.0.0.1:6379> sinter hl_fans zls_fans
1) "hl"
# 并集
127.0.0.1:6379> sunion hl_fans zls_fans
1) "hl"
2) "wyk"
3) "mls"
4) "xiaoxuesheng"
# 将交集存入新集合
127.0.0.1:6379> sinterstore new_set hl_fans zls_fans
(integer) 1
127.0.0.1:6379> SMEMBERS new_set
1) "hl"
# 将并集存入新集合
127.0.0.1:6379> sunionstore new_set2 hl_fans zls_fans
(integer) 4
127.0.0.1:6379> SMEMBERS new_set2
1) "hl"
2) "wyk"
3) "mls"
4) "xiaoxuesheng"
# 随机取值
127.0.0.1:6379> srandmember zls_fans
"mls"
# 将集合的元素移动到另一个集合
127.0.0.1:6379> SMOVE hl_fans zls_fans mls
(integer) 1
# 删除指定元素
127.0.0.1:6379> srem zls_fans hl
(integer) 1
127.0.0.1:6379> SMEMBERS zls_fans
1) "wyk"
2) "mls"
# 无序集合示例(添加多个元素)
127.0.0.1:6379> sadd zls_fans 111 222 333 444 555 666
(integer) 6
127.0.0.1:6379> SMEMBERS zls_fans
1) "abc"
2) "111"
3) "mls"
4) "123"
5) "def"
6) "333"
7) "222"
8) "456"
9) "444"
10) "555"
11) "666"
12) "wyk"Sorted Set (Ordered Set)
Application scenario: Leaderboard implementations where members are ranked by a score.
# 增
127.0.0.1:6379> zadd myzset 1 "one" 2 "two" 3 "three"
# 查询成员(仅成员)
127.0.0.1:6379> zrange chengji 0 -1
1) "wyk"
2) "hl"
3) "zls"
# 查询成员和分数
127.0.0.1:6379> zrange chengji 0 -1 WITHSCORES
1) "wyk"
2) "1"
3) "hl"
4) "38"
5) "zls"
6) "100"
# 查询成员的索引
127.0.0.1:6379> zrank chengji wyk
(integer) 0
127.0.0.1:6379> zrank chengji zls
(integer) 2
# 查询成员数量
127.0.0.1:6379> zcard chengji
(integer) 3
# 统计分数在30到40之间的成员数量
127.0.0.1:6379> zcount chengji 30 40
(integer) 1
127.0.0.1:6379> zcount chengji 30 101
(integer) 2
# 获取指定成员的分数
127.0.0.1:6379> ZSCORE chengji wyk
"1"
127.0.0.1:6379> ZSCORE chengji zls
"100"
# 按分数范围查询成员(正序)
127.0.0.1:6379> zrangebyscore chengji 30 40
1) "hl"
# 按分数范围查询成员并限制返回数量(正序)
127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 2 3
1) "hjx"
2) "xwq"
3) "zls"
# 删除指定分数范围的成员
127.0.0.1:6379> zremrangebyscore chengji 30 40
(integer) 1
# 按索引范围删除成员
127.0.0.1:6379> zremrangebyrank chengji 0 2
(integer) 3
# 倒序排名(包括分数)
127.0.0.1:6379> zrevrange chengji 0 -1 WITHSCORES
1) "zls"
2) "100"
3) "hjx"
4) "60"
5) "xwq"
6) "50"
7) "hl"
8) "38"
9) "wyk"
10) "1"
# 按分数段倒序查询成员并限制返回数量
127.0.0.1:6379> zrevrangebyscore chengji 101 30 WITHSCORES limit 1 2
1) "hjx"
2) "60"
3) "xwq"
4) "50"Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Raymond Ops
Linux ops automation, cloud-native, Kubernetes, SRE, DevOps, Python, Golang and related tech discussions.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
