redis-cli的使用,redis五种数据类型string、list、hash、set、zset常用的操作指令详解

本文详细介绍Redis中五种主要数据类型:String、Hash、List、Set和ZSet的使用方法及应用场景,包括各种命令的语法与实例,帮助读者快速掌握Redis的基础操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

1、windows下连接服务端

2、关闭服务

3、常见数据类型操作指令

3.1、Stirng类型常见操作

3.1.1 10秒后过期,过期之后返回nil,ex表示秒,px表示毫秒

3.1.2 key存在创建返回1,不存在返回0

3.1.3 批量设置和批量获取mset和mget

3.1.4 对数值的操作incr加1、decr减一,incrby加n,decrby减n,incrbyfloat浮点数加

3.1.5 追加字符串append指令

3.1.6 获取字符串长度strlen

3.1.7 截取字符串GETRANGE ,[a,b]

3.1.8 redis内部编码object encoding

3.1.9 键值设计:业务名:对象名:id:[属性]

3.2 哈希hash数据的常见操作

3.2.1 添加\获取

3.2.2 删除

3.2.3 返回对象有几个值

3.2.4 批量设置和获取

3.2.5 断 field 是否存在

3.2.6 获取所有 field、获取所有value、获取所有field和value

3.2.7 自增自减

3.2.8 内部编码

3.2.9 常用场景

3.3 list常用操作

3.3.1 增加删除操作图解

3.3.2 删除固定数量的元素

3.3.3 元素保留ltrim,修改某个元素的值

3.4 set集合常用操作

3.4.1 set集合特点

3.4.2 常见操作

3.4.3 集合的交、并、补集操作

3.4.5 保存交、并、补集到新的集合

3.4.6 内部编码

3.4.7 set适合的使用场景

3.5 zset有序集合

3.5.1 常见操作增删查改

3.5.2 交集、并集、补集常用操作

3.5.3 zset内部编码

3.5.4 使用场景


1、windows下连接服务端

redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456

2、关闭服务

停止 redis 服务: redis-cli shutdown

3、常见数据类型操作指令

3.1、Stirng类型常见操作

3.1.1 10秒后过期,过期之后返回nil,ex表示秒,px表示毫秒

127.0.0.1:6379> set age 23 ex 3
OK
127.0.0.1:6379> get age
"23"
127.0.0.1:6379> get age
(nil)

3.1.2 key存在创建返回1,不存在返回0

127.0.0.1:6379> setnx name test
(integer) 1
127.0.0.1:6379> setnx name test
(integer) 0
127.0.0.1:6379>

3.1.3 批量设置和批量获取mset和mget

127.0.0.1:6379> mset country china city beijing
OK
127.0.0.1:6379> mget country city adress
1) "china"
2) "beijing"
3) (nil)
127.0.0.1:6379>

3.1.4 对数值的操作incr加1、decr减一,incrby加n,decrby减n,incrbyfloat浮点数加

127.0.0.1:6379> set age 12
OK
127.0.0.1:6379> incr age
(integer) 13
127.0.0.1:6379> decr age
(integer) 12
127.0.0.1:6379> incrby age 2
(integer) 14
127.0.0.1:6379> decrby age 2
(integer) 12
127.0.0.1:6379> set score 1.1
OK
127.0.0.1:6379> incrbyfloat score 1.1
"2.2"

3.1.5 追加字符串append指令

127.0.0.1:6379> get name
"test"
127.0.0.1:6379> append name  world
(integer) 9
127.0.0.1:6379> get name
"testworld"

3.1.6 获取字符串长度strlen

127.0.0.1:6379> strlen name
(integer) 9
127.0.0.1:6379> get name
"testworld"
127.0.0.1:6379>

3.1.7 截取字符串GETRANGE ,[a,b]

127.0.0.1:6379> get name
"testworld"
127.0.0.1:6379> GETRANGE name 2 3
"st"
127.0.0.1:6379>

3.1.8 redis内部编码object encoding

  • <8字节返回int
  • <=39字节,返回embstr
  • >39字节返回raw
127.0.0.1:6379> set age 1000
OK
127.0.0.1:6379> set name beij
OK
127.0.0.1:6379> object encoding age
"int"  //8字节返回int
127.0.0.1:6379> object encoding name
"embstr" //《=39字节,返回embstr
127.0.0.1:6379> set a fsdfwerwerwefffffffffffffffffffffffffffdsf
OK
127.0.0.1:6379> object encoding a
"raw"//>39字节返回raw
127.0.0.1:6379>

3.1.9 键值设计:业务名:对象名:id:[属性]

127.0.0.1:6379> set order:user:1 1
OK
127.0.0.1:6379> ser order:user:2 2

3.2 哈希hash数据的常见操作

  field value 的映射表, hash 特适合用 是一个 string 类型的 field value 的映射表, hash 特适合用于存储对象。

3.2.1 添加\获取

类似于java的set操作了,指令:hset key field value
127.0.0.1:6379> hset user:1 name henry
(integer) 1
127.0.0.1:6379> hset user:1 age 12
(integer) 1
127.0.0.1:6379> hset user:1 address hubei
(integer) 1
127.0.0.1:6379> hget user:1 name
"henry"
127.0.0.1:6379> hget user:1 age
"12"
127.0.0.1:6379> hget user:1 adress
(nil)

3.2.2 删除

127.0.0.1:6379> hdel user:1 address
(integer) 1

3.2.3 返回对象有几个值

127.0.0.1:6379> hlen user:1
(integer) 2

3.2.4 批量设置和获取

127.0.0.1:6379> hmset user:2 name 123 age 12
OK
127.0.0.1:6379> hmget user:2 name  age
1) "123"
2) "12"
127.0.0.1:6379>

3.2.5 断 field 是否存在

若存在返回 1 ,不存在返回 0
127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 xxx
(integer) 0

3.2.6 获取所有 field、获取所有value、获取所有field和value

127.0.0.1:6379> hkeys user:2
1) "name"
2) "age"
127.0.0.1:6379> hvals user:2
1) "123"
2) "12"
127.0.0.1:6379> hgetall user:2
1) "name"
2) "123"
3) "age"
4) "12"

3.2.7 自增自减

增加 1 hincrby user:2 age 1
127.0.0.1:6379> hgetall user:2
1) "name"
2) "123"
3) "age"
4) "12"
127.0.0.1:6379> hincrby user:2 age 2

3.2.8 内部编码

内部编码: ziplist< 压缩列表 > hashtable< 哈希表 >
field 个数少且没有大的 value 时,内部编码为 ziplist
127.0.0.1:6379> object encoding user:2
"ziplist"
127.0.0.1:6379>
value 大于 64 字节,内部编码由 ziplist 变成 hashtable

3.2.9 常用场景

三种方案实现用户信息存储优缺点:

1,存储对象set user:1:name aaa;

优点:简单直观,每个键对应一个值
缺点:键数过多,占用内存多,用户信息过于分散,不用于生产环境

2,将对象序列化存入 redis

set user:1 serialize(userInfo);
优点:编程简单,若使用序列化合理内存使用率高
缺点:序列化与反序列化有一定开销,更新属性时需要把 userInfo 全取出来 进行反序列化,更新后再序列化到 redis

3,使用 hash 类型:

hmset user:1 name james age 23 sex boy
优点:简单直观,使用合理可减少内存空间消耗
缺点:要控制 ziplist hashtable 两种编码转换,且 hashtable 会消耗更多内存
总结: 对于更新不多的情况下,可以使用序列化,对于 VALUE 值不大于 64 字节
可以使用 hash

3.3 list常用操作

3.3.1 增加删除操作图解

类型指令
新增lpush,rpush,linsert
查找lrange,lindex,llen
修改lset
删除lpop,rpop,lrem,ltrim
阻塞blpop,brpop
添加
127.0.0.1:6379> rpush mylist c b a
(integer) 3d
查询所有
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
查询0-1
127.0.0.1:6379> lrange mylist 0 1
1) "c"
2) "b"
左边加入
127.0.0.1:6379> lpush mylist d
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
在固定节点之前加入
127.0.0.1:6379> linsert mylist before b bb
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "bb"
4) "b"
5) "a"
127.0.0.1:6379> lindex mylist -1
"a"
127.0.0.1:6379> lindex mylist -2
"b"
127.0.0.1:6379> lindex mylist -3
"bb"
列表长度
127.0.0.1:6379> llen mylist
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "bb"
4) "b"
5) "a"
删除节点
127.0.0.1:6379> lpop mylist
"d"
127.0.0.1:6379> rpop mylist
"a"
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "bb"
3) "b"
127.0.0.1:6379>

3.3.2 删除固定数量的元素

127.0.0.1:6379> lpush test b b b b b x y z
(integer) 8
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
4) "b"
5) "b"
6) "b"
7) "b"
8) "b"
从左边开始,删除4个b
127.0.0.1:6379> lrem test 4 b
(integer) 4
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
4) "b"
删除所有的b
127.0.0.1:6379> lrem test 0 b
(integer) 1
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
127.0.0.1:6379>

3.3.3 元素保留ltrim,修改某个元素的值

127.0.0.1:6379> lrange test 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "z"
6) "y"
7) "x"
保留第5个元素到最后一个元素,其他的删除
127.0.0.1:6379> ltrim test 4 -1
OK
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
修改第一个元素
127.0.0.1:6379> lset test 0 zz
OK
127.0.0.1:6379> lrange test 0 -1
1) "zz"
2) "y"
3) "x"
127.0.0.1:6379>

3.4 set集合常用操作

3.4.1 set集合特点

  • 无序,不重复
  • 最多可以存2^23-1
  • 除了支持增删查改,还支持几个的交并差集

3.4.2 常见操作

新增sadd

:6379> exists student
(integer) 0
127.0.0.1:6379> sadd student a b c c
(integer) 3
127.0.0.1:6379> sadd student abc
(integer) 1
127.0.0.1:6379> sadd student a b c
(integer) 0
127.0.0.1:6379> exists student
(integer) 1

查询打印所有元素smembers
 

127.0.0.1:6379> SMEMBERS student
1) "c"
2) "a"
3) "b"
4) "abc"

删除指定元素

127.0.0.1:6379> srem student abc
(integer) 0
127.0.0.1:6379> SMEMBERS student
1) "c"
2) "a"
3) "b"

统计元素个数scard

127.0.0.1:6379> scard student
(integer) 4

判断元素是否存在sismember

127.0.0.1:6379> sismember student a
(integer) 1
127.0.0.1:6379> sismember student aa
(integer) 0
127.0.0.1:6379> srandmember student 2
1) "b"
2) "a"

返回随机元素srandmember 

127.0.0.1:6379> srandmember student 2
1) "b"
2) "a"

 删除集合中的元素spop

127.0.0.1:6379> sadd user5 1 2 3
(integer) 3
127.0.0.1:6379> spop user5
"1"
127.0.0.1:6379> SMEMBERS user5
1) "2"
2) "3"
127.0.0.1:6379>

3.4.3 集合的交、并、补集操作

初始化两个集合

127.0.0.1:6379> SMEMBERS user1
1) "a"
2) "girl"
3) "24"
127.0.0.1:6379> SMEMBERS user2
1) "b"
2) "24"
3) "boy"

交集sinter

127.0.0.1:6379> sinter user1 user2
1) "24"
127.0.0.1:6379>

并集sunion

127.0.0.1:6379> sunion user1 user2
1) "24"
2) "girl"
3) "boy"
4) "a"
5) "b"

差集sdiff

127.0.0.1:6379> sdiff user1 user2
1) "a"
2) "girl"
127.0.0.1:6379>

3.4.5 保存交、并、补集到新的集合

保存交集到新集合sinterstore

127.0.0.1:6379> sinterstore userinter user1 user2
(integer) 1
127.0.0.1:6379> SMEMBERS userinter
1) "24"

保存并集到新集合sunionstore 

127.0.0.1:6379> sunionstore userunion user1 user2
(integer) 5
127.0.0.1:6379> SMEMBERS userunion
1) "24"
2) "girl"
3) "boy"
4) "a"
5) "b"
127.0.0.1:6379>

保存补集到新集合sdiffstore 

127.0.0.1:6379> sdiffstore userdiff user1 user2
(integer) 2
127.0.0.1:6379> SMEMBERS userdiff
1) "a"
2) "girl"
127.0.0.1:6379>

3.4.6 内部编码

  • 当元素个数少(小于 512 )且都为整数,redis 使用 intset 减少内存的使用
  • 当超过 512 个或不为整数(比如 a b)时,编码为 hashtable
127.0.0.1:6379> sadd user4 a
(integer) 1
127.0.0.1:6379> object encoding user4
"hashtable"
127.0.0.1:6379> sadd user5 1 2 3
(integer) 3
127.0.0.1:6379> object encoding user5
"intset"
127.0.0.1:6379>

3.4.7 set适合的使用场景

  1. 查询共同爱好,使用交集
  2. 给标签、点赞添加用户
  3. 使用spop,srandmember随机获取数据,比如抽奖等

3.5 zset有序集合

特点:有序不重复,使用分值实现排序,适合排行榜,点赞数

数据结构是:score+member 的形式

3.5.1 常见操作增删查改

新增

127.0.0.1:6379> zadd user:zan 200 a 300 b
(integer) 2

key必须不存在才能添加成功

127.0.0.1:6379> zadd test:1 nx 100 a
(integer) 1
127.0.0.1:6379> zadd test:1 nx 200 a
(integer) 0

修改某个member 的score,xx必须存在才能修改成功

127.0.0.1:6379> zadd test:1 xx incr 200 a
"300"
127.0.0.1:6379> zadd test:1 xx ch incr -299 a
"1"
127.0.0.1:6379> zincrby test:1 10 a

查询member和score

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "200"
3) "b"
4) "300"

查询所有member
 

127.0.0.1:6379> zrange user:zan 0 -1
1) "a"
2) "b"

查看分数score

127.0.0.1:6379> zadd user:zan 200 a 300 b
(integer) 2
127.0.0.1:6379> zscore user:zan a
"200"

计算元素个数zcard

127.0.0.1:6379> zcard test:1
(integer) 1
127.0.0.1:6379>

新增的数据是根据score排好了顺序的
 

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "200"
3) "b"
4) "300"
5) "c"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zadd user:zan 100 e
(integer) 1
127.0.0.1:6379> zrange user:zan 0 -1 withscores
 1) "e"
 2) "100"
 3) "a"
 4) "200"
 5) "b"
 6) "300"
 7) "c"
 8) "300"
 9) "d"
10) "400"
127.0.0.1:6379>

查询元素b的排行

127.0.0.1:6379> zrange user:zan 0 -1 withscores
 1) "e"
 2) "100"
 3) "a"
 4) "200"
 5) "b"
 6) "300"
 7) "c"
 8) "300"
 9) "d"
10) "400"
127.0.0.1:6379> zscore user:zan e
"100"
127.0.0.1:6379> zrank user:zan b
(integer) 2
127.0.0.1:6379>

反序查找元素的排行

127.0.0.1:6379> zrange user:zan 0 -1 withscores
 1) "e"
 2) "100"
 3) "a"
 4) "200"
 5) "b"
 6) "300"
 7) "c"
 8) "300"
 9) "d"
10) "400"
127.0.0.1:6379> zrevrank user:zan d
(integer) 0

删除元素zrem 

127.0.0.1:6379> zrange user:zan 0 -1 withscores
 1) "e"
 2) "100"
 3) "a"
 4) "200"
 5) "b"
 6) "300"
 7) "c"
 8) "300"
 9) "d"
10) "400"
127.0.0.1:6379> zrem user:zan c
(integer) 1
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379>

返回指定范围内的score和member,正序和倒叙

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zrevrange user:zan 0 -1 withscores
1) "d"
2) "400"
3) "b"
4) "300"
5) "a"
6) "200"
7) "e"
8) "100"
127.0.0.1:6379>

返回指定分数范围内的成员zrangebyscore 、zrevrangebyscore 

127.0.0.1:6379> zrevrange user:zan 0 -1 withscores
1) "d"
2) "400"
3) "b"
4) "300"
5) "a"
6) "200"
7) "e"
8) "100"
127.0.0.1:6379> zrangebyscore user:zan 200 300 withscores
1) "a"
2) "200"
3) "b"
4) "300"
127.0.0.1:6379> zrevrangebyscore user:zan 300 100 withscores
1) "b"
2) "300"
3) "a"
4) "200"
5) "e"
6) "100"
127.0.0.1:6379>

返回指定分数范围成员个数zcount 

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zcount user:zan 200 400
(integer) 3

删除排名范围内元素

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zremrangebyrank user:zan 0 1
(integer) 2
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "b"
2) "300"
3) "d"
4) "400"
127.0.0.1:6379>

删除指定分数范围的元素

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "100"
3) "c"
4) "290"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zremrangebyscore user:zan 100 300
(integer) 3
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "d"
2) "400"

删除指定分数大于100的元素不包括100

127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "100"
3) "b"
4) "200"
5) "c"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zremrangebyscore user:5 (100 +inf
(integer) 0
127.0.0.1:6379> zremrangebyscore user:zan (100 +inf
(integer) 3
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "100"
127.0.0.1:6379>

3.5.2 交集、并集、补集常用操作

数据初始化


127.0.0.1:6379> zadd user:1 1 a 2 b 4 c 5 d
(integer) 4
127.0.0.1:6379> zadd user:2 2 a 3 b 1 e 8 f
(integer) 4

交集,默认member相同,score相加

127.0.0.1:6379> zinterstore user_inter 2 user:1 user:2
(integer) 2
127.0.0.1:6379> zrange user_inter 0 -1 withscores
1) "a"
2) "3"
3) "b"
4) "5"

交集min,member相同,取小的socre

127.0.0.1:6379> zinterstore user_min 2 user:1 user:2 aggregate min
(integer) 2
127.0.0.1:6379> zrange user_min 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"

交集max,member相同,取大的socre

127.0.0.1:6379> zinterstore user_max 2 user:1 user:2 aggregate max
(integer) 2
127.0.0.1:6379> zrange user_max 0 -1 withscores
1) "a"
2) "2"
3) "b"
4) "3"

weights把两个集合扩大固定倍数再取交集

先把user:1扩大2倍,再把user:2扩大4倍再取交集

127.0.0.1:6379> zinterstore user_weight 2 user:1 user:2 weights 2 4 aggregate max
(integer) 2
127.0.0.1:6379> zrange user_weight 0 -1 withscores
1) "a"
2) "8"
3) "b"
4) "12"
127.0.0.1:6379>

并集,具体说明参考上一个

127.0.0.1:6379> zunionstore user_uw 2 user:1 user:2 weights 2 3 aggregate max
(integer) 6
127.0.0.1:6379> zrange user_uw 0 -1 withscores
 1) "e"
 2) "3"
 3) "a"
 4) "6"
 5) "c"
 6) "8"
 7) "b"
 8) "9"
 9) "d"
10) "10"
11) "f"
12) "24"
127.0.0.1:6379>

3.5.3 zset内部编码

  1. 当元素个数少(小于 128 个),元素值小于 64 字节时, 使用 ziplist 编码,可有效减少内存的使用
  2. 大于 128 个元素或元素值大于 64 字节时

3.5.4 使用场景

排行榜:文章点赞排行,视频浏览排行等
 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值