redis五种基本数据类型+三种特殊类型(基础代码演示)

redis数据类型

redis存在5种基本数据类型和三种特殊类型

String类型

举例:分布式锁、session相关、验证码相关、计数相关(点击量/阅读量/关注)等单一的值。

取值赋值

关键词:set get append strlen

127.0.0.1:6379> set stu1 zhangsan
OK
127.0.0.1:6379> get stu1
zhangsan
127.0.0.1:6379> append stu1 shigehaoren
19
127.0.0.1:6379> get stu1
zhangsanshigehaoren
127.0.0.1:6379> STRLEN stu1
19

加减操作

increment 自增 decrement 自减
incrby 固定增量 自定义
decrby 固定减量 自定义

##值++
incr key
##值--
decr key
##增长指定的长度
incrby key number
##减少指定的长度
decrby key number
127.0.0.1:6379> set fans 0
OK
127.0.0.1:6379> incr fans
1
127.0.0.1:6379> incr fans
2
127.0.0.1:6379> get fans
2
127.0.0.1:6379> decr fans
1
127.0.0.1:6379> decr fans
0
127.0.0.1:6379> decr fans
-1
127.0.0.1:6379> DECR fans
(integer) 0
127.0.0.1:6379> DECR fans
(integer) -1
127.0.0.1:6379> INCRBY stu1 100 ##值固定+N
(integer) 100
127.0.0.1:6379> INCRBY stu1 100
(integer) 200
127.0.0.1:6379> INCRBY stu1 100
(integer) 300
127.0.0.1:6379> DECRBY stu1 50 ##值固定-N
(integer) 250
127.0.0.1:6379> DECRBY stu1 50
(integer) 200

范围操作 range

getrange key index1 index2 获取当前指定范围 如果最大长度index2可替换为-1

127.0.0.1:6379> set content hellojiazongnihao
OK
127.0.0.1:6379> get content
"hellojiazongnihao"
127.0.0.1:6379> STRLEN content
(integer) 17
127.0.0.1:6379> GETRANGE content 5 11
"jiazong"
127.0.0.1:6379> get content
"hellojiazongnihao"
127.0.0.1:6379> GETRANGE content 0 -1 # 获取全部字符串
"hellojiazongnihao"
127.0.0.1:6379>

替换操作

setrange key offset index 内容 ## offset 偏移量 指定位置开始替换

127.0.0.1:6379> GETRANGE content 0 -1
"hellojiazongnihao"
127.0.0.1:6379> SETRANGE content 5 sunzong #将sunzong覆盖jiazong
(integer) 17
127.0.0.1:6379> GETRANGE content 0 -1
"hellosunzongnihao"
127.0.0.1:6379> SETRANGE content 5 wang #将wang覆盖jiaz
(integer) 17
127.0.0.1:6379> GETRANGE content 0 -1
"hellowangongnihao"
127.0.0.1:6379>

判断是否存在

EXISTS t6 判断值是否存在
#set with expire #如果存在设置消失时间及信息值 – 订单
setex key time v 既能增加过期时间还能够重新指定新的值,如果当前key不存在创建一个新的key和值并指
定过期时间

#如果一个值不想改变只想重新设定时间
127.0.0.1:6379> set message 1089
127.0.0.1:6379> expire message 300
#如果既想刷新时间又想改变值
127.0.0.1:6379> setex message 300 8888

#set if not expire #如果不存在 默认会创建一个新的,存在不操作 / 及判断存在不存在同时也能根据结
果进行进一步操作

setnx key v
# 如果值存在 ,不作处理
127.0.0.1:6379> setnx message ooooooooooooooo
(integer) 0
# 如果值不存在, 执行创建
127.0.0.1:6379> setnx mess ooooooooooooooo
(integer) 1

批量值操作

more set 
mset k1 v1 k2 v2
mget k1 k2
127.0.0.1:6379> mset b 123 c 123 d 123
OK
127.0.0.1:6379> get c
"123"
127.0.0.1:6379> mget a b c d
1) "123"
2) "123"
3) "123"
4) "123"
127.0.0.1:6379>

关于对象的存储

#普通的json对象
{
    
    id:1,name:zhangsan,age:40}
#redis存储的对象
{
    
    class:[{
    
    },{
    
    }]}
{
    
    id:1,name:zhangsan,age:40}
{
    
    id:2,name:lisi,age:14}

将这个对象存储到redis中, key user 注意:字符串需要去掉引号

127.0.0.1:6379> set user {
    
    id:1,name:"zhangsan",age:40}
Invalid argument(s)
127.0.0.1:6379> set user {
    
    id:1,name:zhangsan,age:40}
OK
127.0.0.1:6379> get user
"{id:1,name:zhangsan,age:40}"
127.0.0.1:6379>

希望再存储一个李四,key 希望叫user 但是直接用会被覆盖,取值也不方便。
建议: 组合键(这个组合键目的就是将对象中的属性和值打散,通过组合不同的key到redis中读取不同的值)
方式1 : 可能后面根据ID读取某一个对象的情况

127.0.0.1:6379> set user:1 {
    
    id:1,name:zhangsan,age:40}
OK
127.0.0.1:6379> set user:2 {
    
    id:2,name:lisi,age:14}
OK
127.0.0.1:6379> keys user*
1) "user:2"
2) "user:1"
127.0.0.1:6379> get user:2
"{id:2,name:lisi,age:14}"
127.0.0.1:6379>

方式2:存在通过对象-id-属性,查询某些数据

set user:1:id 1
set user:1:name zhangsan
set user:1:age 14
set user:2:id 2
set user:2:name lisi
set user:2:age 14
# 查询所有
127.0.0.1:6379> keys user*
1) "user:2:age"
2) "user:1:age"
3) "user:1:id"
5.1.8 取值赋值操作
getset 先取值,再赋值
5.1.9 关于浮点类型的增减操作
incr decr 直接使用会报错
关键词: incrbyfloat 不支持直接+1-1操作 支持固定增减量操作
5.1.10 删除数据
del key ...
5.2 List列表类型
4) "user:2:id"
5) "user:1:name"
6) "user:2:name"
# 根据id查询
127.0.0.1:6379> keys user:1:*
1) "user:1:age"
2) "user:1:id"
3) "user:1:name"
# 根据具体条件查询
127.0.0.1:6379> get user:2:name
"lisi"
127.0.0.1:6379>

取值赋值操作

getset 先取值,再赋值

127.0.0.1:6379> getset student zhangsan
(nil)
127.0.0.1:6379> getset student lisi
"zhangsan"
127.0.0.1:6379> getset student wangwu
"lisi"
127.0.0.1:6379> get student
"wangwu"
127.0.0.1:6379>

关于浮点类型的增减操作

incr decr 直接使用会报错

127.0.0.1:6379> incr price
(error) ERR value is not an integer or out of range

关键词: incrbyfloat 不支持直接+1-1操作 支持固定增减量操作

127.0.0.1:6379> incrbyfloat price 9.9
"19.8"

删除数据

del key …

127.0.0.1:6379> del ww
127.0.0.1:6379> del nn oo

List列表类型

基本赋值和取值操作

保留案例:导航信息存储
默认左侧插入值: lpush l意思 list
右侧插入值:rpush r意思 right
查询数据:lrange key start end
获取长度 llen key

127.0.0.1:6379> lpush stu zhangsan lisi
(integer) 2 #返回list长度
127.0.0.1:6379> lrange stu 0 -1 #取值
1) "lisi"
2) "zhangsan"
127.0.0.1:6379> lpush stu wangwu
(integer) 3
127.0.0.1:6379> lrange stu 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> rpush stu zhaoliu # 结尾插入值
(integer) 4
127.0.0.1:6379> lrange stu 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan"
4) "zhaoliu"
127.0.0.1:6379> llen stu # 获取当前列表长度

list结构的删除数据操作

删除整个list列表

del key #这种是直接将整个列表都删除 del删除删除任意类型

删除list列表中的某一些数据
关键词:pop 弹出 抛出
语法:
lpop count 左侧弹出

# 没给count值,默认左 弹出1 返回的信息是弹出的值
127.0.0.1:6379> lpop stu
"lisi"
# count 提供值,可以弹出多个,返回值就是弹出的值得列表
127.0.0.1:6379> lpop stu 10
1) "zhangsan"

rpop count 右侧弹出

127.0.0.1:6379> rpop stu
"zhangsan"
127.0.0.1:6379> rpop stu 1
1) "lisi"
127.0.0.1:6379>

删除指定值 list remove
关键词:lrem key count value ---- 默认从左侧开始查询并删除

127.0.0.1:6379> lpush stu wangwu zhaoliu zhangsan lisi wangwu tianqi zhangsan
zhangsan
127.0.0.1:6379> lrem stu 2 zhangsan
# count正数 从左向右删除 count负数, 从右向左删除
127.0.0.1:6379> lrange stu 0 -1

索引相关index

通过索引获取数据
lindex key index

127.0.0.1:6379> lindex stu 1

截取列表中一部分值
trim 在Java和脚本中是去掉前后空格,本身意思 修剪、整理。 在redis中作用域截取部分值,截取完成只保
留获取的内容。
ltrim key start end

127.0.0.1:6379> ltrim stu 1 4

列表中替换值
lset

127.0.0.1:6379> lset stu 1 zhaoliu

其他

在指定的一个位置前面插入值(不是索引)
在指定的一个位置后面插入值(不是索引)
linsert key before|after 原始值位置 新的值

127.0.0.1:6379> linsert stu before zhaoliu lisi
127.0.0.1:6379> linsert stu after lisi wangwu

两个列表值交换 需要两个列表, 第一个列表中的最后一个值插入到第二个列表中的第一位
rpoplpush r pop l push (右弹出左推进) 如果list1和list2为同一个,最后一个值置顶
rpoplpush list1[第一个列表] list2[第二个列表]

127.0.0.1:6379> rpoplpush stu teacher
#置顶数据
127.0.0.1:6379> rpoplpush teacherteacher

set集合类型

特点: 无序、不能重复 所有命令 s 开头
用途:点赞,签到,like等功能、抽奖功能

基本操作

通过测试:重复的值无法添加成功,并且值得顺序也不是固定的

添加值 :sadd key v…

127.0.0.1:6379> sadd book sanguoyanyi jinpingmei hongloumeng

查询值 :smembers members 成员 组成

127.0.0.1:6379> smembers book

通用删除 del key 将整个集合直接删除
删除指定指定的元素 srem key value

127.0.0.1:6379> srem book jinpingmei

其他操作

判断当前集合中是否存在指定的值 s is member 是否是成员
语法 sismember key v

127.0.0.1:6379> sismember book jinpingmei
(integer) 1
127.0.0.1:6379> sismember book jinpingmei2
(integer) 0

查看当前集合中值个数 s card
语法:sacrd key

127.0.0.1:6379> scard book
(integer) 4

随机获取和随机删除
随机获取: srandmember [ s random member ]
语法:srandmember key count

127.0.0.1:6379> srandmember book
"jinpingmei"
127.0.0.1:6379> srandmember book 2
1) "hongloumeng"
2) "jinpingmei"

随机删除: spop
语法: spop key count

127.0.0.1:6379> spop book
"jinpingmei"
127.0.0.1:6379> spop book 10
1) "hongloumeng"
2) "sanguoyanyi"

特殊操作

解决中文问题
[root@lxip ~]# redis-cli -h 127.0.0.1 -p 6379 --raw
差集 diff 差异 只返回第一个集合的差值

127.0.0.1:6379> sadd zb1 xiaozhi dasima caixukun lijiaqi
4
127.0.0.1:6379> sadd zb2 liziqi xiaozhi dasima wangdaxian xuxubaobao
5
127.0.0.1:6379> sdiff zb1 zb2
caixukun
lijiaqi
127.0.0.1:6379> sdiff zb2 zb1
wangdaxian
liziqi
xuxubaobao
127.0.0.1:6379>

交集 sinter 交集

127.0.0.1:6379> sinter zb2 zb1
dasima
xiaozhi

并集 s union 联盟 工会 ---- 去重复

127.0.0.1:6379> sunion zb1 zb2
lijiaqi
dasima
xuxubaobao
xiaozhi
caixukun
wangdaxian
liziqi

Hash类型(map结构)

key-value(map) 比较适合对象类型的数据存储 key -(key-value)

基础语法

存值(key (key - value))
语法:
hset key k1 v1 k2 v2 k3 v3
hget key k – 获取单个值

# book redis的key name 值得key pingandeshijie 值中的值 (key key value)
127.0.0.1:6379> hset book name pingandeshijie
127.0.0.1:6379> hget book name
pingandeshijie
127.0.0.1:6379> hset book name pingandeshijie price 30 author luyao
# 如果存储对象
127.0.0.1:6379> hset student name zhangsan age 19 hobbies chouyanhejiutangtou
# 如果存储对象集合
{
    
    id:1,name:zhangsan}
{
    
    id:2,name:lisi}
127.0.0.1:6379> hset student 1 {
    
    id:1,name:zhangsan} 2 {
    
    id:2,name:lisi}
127.0.0.1:6379> hget student 2

hmget 名称k k k #获取多个key

127.0.0.1:6379> hmget student 1 2

获取全部的值 hgetall 名称k

127.0.0.1:6379> hgetall student
1
{
    
    id:1,name:zhangsan}
2
{
    
    id:2,name:lisi}

通过key删除所有数据 – 通用

127.0.0.1:6379> del student

通过值的key删除指定的数据

127.0.0.1:6379> hdel student 2
1

读取当前hash表(map集合)中数据的个数

127.0.0.1:6379> hlen student

其他用法

判断是否存在

127.0.0.1:6379> hexists student 10
0
127.0.0.1:6379> hexists student 3
1

读取所有的key ----- 1w条数据 取某一些特定的数据,取到所有key 循环 取值 判断 筛选。

127.0.0.1:6379> hkeys student
1
3
2

取所有的value — 案例:Java中想将redis中的hash结构转化为set结构

127.0.0.1:6379> hvals student
{
    
    id:1,name:zhangsan}
{
    
    id:1,name:zhangsan}
{
    
    id:2,name:lisi}

Zset

有序不重复集合,在set的基础上多增加一个值 set k1 * v1 (zset k1 排序的值(score) v1)
有序不可重复的set集合
主要使用方向:工资、班级成绩等等之类的数据。 或者 权重处理 0 普通 1 重要

基本语法

# emps k
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:3,name:wangwu,sal:12000}
#增加数据
127.0.0.1:6379> zadd emps 8000 {
    
    id:1,name:zhangsan,sal:8000}
1
127.0.0.1:6379> zadd emps 5000 {
    
    id:2,name:lisi,sal:5000}
1
127.0.0.1:6379> zadd emps 12000 {
    
    id:3,name:wangwu,sal:12000}
1
127.0.0.1:6379> zrange emps 0 -1 #查询 - 默认升序
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}
127.0.0.1:6379> zrandmember emps 1 #随机读取
{
    
    id:1,name:zhangsan,sal:8000}

删除数据
删除整个key del key

zrem k v
127.0.0.1:6379> zrem emps {
    
    id:2,name:lisi,sal:5000}
1

zset复杂查询

#显示所有信息,从小到大 (范围) -inf 负无穷 +inf正无穷
语法:** z range by score** key min max — min max使用的是排序字段的值

127.0.0.1:6379> zrangebyscore emps 8000 10000
{
    
    id:1,name:zhangsan,sal:8000}
127.0.0.1:6379> zrangebyscore emps -inf +inf
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}

升序操作

# 默认取所有数据
127.0.0.1:6379> zrange emps 0 -1
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}
# 根据当前排序结果取所有数据
127.0.0.1:6379> zrangebyscore emps -inf +inf
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}
# 根据当前排序结果取所有数据 并显示排序字段
127.0.0.1:6379> zrangebyscore emps -inf +inf withscores
{
    
    id:2,name:lisi,sal:5000}
5000
{
    
    id:1,name:zhangsan,sal:8000}
8000
{
    
    id:3,name:wangwu,sal:12000}
12000
# 根据当前排序结果取所有数据 并显示排序字段 并截取某一部分值
127.0.0.1:6379> zrangebyscore emps -inf +inf withscores limit 0 1
{
    
    id:2,name:lisi,sal:5000}
5000
# 取排序字段值大于**的数据
127.0.0.1:6379> zrangebyscore emps 8000 +inf
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}
# 取排序字段值小于**的数据
127.0.0.1:6379> zrangebyscore emps -inf 8000
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
127.0.0.1:6379>

降序操作
z rev range k start stop start stop取索引的范围。

127.0.0.1:6379> zrange emps 0 -1
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}
127.0.0.1:6379> zrangebyscore emps -inf +inf
{
    
    id:2,name:lisi,sal:5000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:3,name:wangwu,sal:12000}
127.0.0.1:6379> zrevrange emps 0 -1
{
    
    id:3,name:wangwu,sal:12000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:2,name:lisi,sal:5000}
127.0.0.1:6379> zrevrangebyscore emps +inf -inf
{
    
    id:3,name:wangwu,sal:12000}
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:2,name:lisi,sal:5000}
127.0.0.1:6379> zrevrangebyscore emps +inf -inf withscores
{
    
    id:3,name:wangwu,sal:12000}
12000
{
    
    id:1,name:zhangsan,sal:8000}
8000
{
    
    id:2,name:lisi,sal:5000}
5000
127.0.0.1:6379> zrevrangebyscore emps +inf -inf withscores limit 0 1
{
    
    id:3,name:wangwu,sal:12000}
12000
127.0.0.1:6379> zrevrangebyscore emps +inf 8000
{
    
    id:3,name:wangwu,sal:12000}
{
    
    id:1,name:zhangsan,sal:8000}
127.0.0.1:6379> zrevrangebyscore emps 8000 -inf
{
    
    id:1,name:zhangsan,sal:8000}
{
    
    id:2,name:lisi,sal:5000}
127.0.0.1:6379>

geospatial 地理位置

作用:朋友圈定位,附近的人,打车距离计算。
添加地理位置信息 GEOADD
geoadd key 精度 纬度 名称

# maps
127.0.0.1:6379> geoadd maps 116.22518499110029 39.951383565611934 xuejiaao
127.0.0.1:6379> geoadd maps 116.22119922850416 39.95185236700199 hongyun
127.0.0.1:6379> geoadd maps 116.32169891808317 39.894741892979205 beijingxizhan
127.0.0.1:6379> geoadd maps 116.77067924950407 39.830968132325836 huanhuxiaozhan
127.0.0.1:6379> geoadd maps 116.69798065636442 39.52723389254955 langfang
127.0.0.1:6379> geoadd maps 117.20129181359098 39.083057286402244 tianjing
127.0.0.1:6379> geoadd maps 121.47772003624723 31.19857972418721 shanghai
127.0.0.1:6379> geoadd maps 121.52029205773161 25.050634672686915 taiwan

查询指定位置的经纬度 GEOPOS

127.0.0.1:6379> geopos maps taiwan
121.52029305696487427
25.05063527678047564
127.0.0.1:6379> geopos maps langfang
116.69798165559768677
39.52723385909389719
127.0.0.1:6379>

查询两地点之间的距离 GEODIST
geodist key 地点1 地点2 单位(默认 米)

127.0.0.1:6379> geodist maps xuejiaao hongyun M
343.8236
127.0.0.1:6379> geodist maps xuejiaao hongyun km
0.3438
127.0.0.1:6379> geodist maps beijingxizhan shanghai
1073394.0301
127.0.0.1:6379> geodist maps beijingxizhan shanghai km
1073.3940
127.0.0.1:6379>

查询附近的城市(定位) GEORADIUS

127.0.0.1:6379> georadius maps 116.22518499110029 39.951383565611934 1500 KM

查询附近的城市(定位)–显示到中间的距离 GEORADIUS
关键词: withdist

127.0.0.1:6379> georadius maps 116.22518499110029 39.951383565611934 500 KM withdist
langfang
62.1354
tianjing
127.8360
huanhuxiaozhan
48.4408
beijingxizhan
10.3666
hongyun
0.3440
xuejiaao
0.0002

查询附近的城市(定位)–显示他人精准信息 GEORADIUS
关键词:withcoord

127.0.0.1:6379> georadius maps 116.22518499110029 39.951383565611934 500 KM withdist
withcoord
langfang
62.1354
116.69798165559768677
39.52723385909389719
tianjing
127.8360
117.20129281282424927
39.08305692729481251
huanhuxiaozhan
48.4408

查询附近的城市(定位)–显示他人精准信息 并指定返回个数 GEORADIUS
关键词: count

127.0.0.1:6379> georadius maps 116.22518499110029 39.951383565611934 500 KM withdist
withcoord count 1
xuejiaao
0.0002
116.22518330812454224
39.95138395901303596

GEO RADIUS BY MEMBER 通过元素(非坐标)定位信息

127.0.0.1:6379> georadiusbymember maps hongyun 10 KM
hongyun
xuejiaao

Geohash 返回hash值 作用是将二维写的经纬度转化为一维的字符串,字符串越像表示距离越近

127.0.0.1:6379> geohash maps hongyun
wx4ek9j8qj0
127.0.0.1:6379> geohash maps xuejiaao
wx4ekbbtej0
127.0.0.1:6379> geohash maps shanghai
wtw3kr92uh0

HyperLogLog基数统计

什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数重复元素为5(个数)。
基数(不估计就是在误差可接受的范围内,快速计算基数。

案例:网页访问次数(一个人访问一个网页多次但是记录的时候也只算一个人)
这种方式其实完全可以使用set方式去实现,但是set的方式会存储大量的用户ID就会比较占用内存,比较麻
烦,而我们的目的是为了计数,所以set就显得有些不足。

添加基础数据

127.0.0.1:6379> pfadd clazz zhangsan lisi wangwu zhaoliu tianqi 99 2111 99.9
1
127.0.0.1:6379> pfadd clazz zhangsan lisi wangwu zhaoliu
0
127.0.0.1:6379> pfadd clazz zhangsan lisi wangwu zhaoliu 33
1

获取总数

127.0.0.1:6379> pfcount clazz
11

合并 – 规则 将后面的数据合并到第一个指定的key中–合并之后也是默认去重复。

127.0.0.1:6379> pfadd stu xiongda xionger zhangsan
1
127.0.0.1:6379> pfmerge clazz stu
OK
127.0.0.1:6379> pfcount clazz
11
127.0.0.1:6379> pfcount stu
3

Bitmaps位图

1Byte=8bit(比特)
1KB=1024Byte(字节)=8*1024bit
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB

首先增加基础数据 setbit

127.0.0.1:6379> setbit kq 1 1
0
127.0.0.1:6379> setbit kq 2 1
0
127.0.0.1:6379> setbit kq 2 0
1
127.0.0.1:6379> setbit kq 3 1
0
127.0.0.1:6379> setbit kq 4 1
0
127.0.0.1:6379> setbit kq 5 0
0
127.0.0.1:6379> setbit kq 6 0
0
127.0.0.1:6379> setbit kq 7 0
0
127.0.0.1:6379>

查看某一天的打卡记录 getbit

127.0.0.1:6379> get kq
X
127.0.0.1:6379> getbit kq 1
1
127.0.0.1:6379> getbit kq 6
0

统计打卡的天数 bitcount

127.0.0.1:6379> bitcount kq
3
127.0.0.1:6379>

猜你喜欢

转载自blog.csdn.net/weixin_52859229/article/details/129864865