redis五大类型的简单使用和理解

五大类型的基本使用

redis不区分大小写:

redis-server kconfig/redis.conf    #路径根据具体要求
redis-cli -h localhost -p 6379
ping    #测试是否链接
shutdown  #关闭
exit   #退出
select 0    #切换数据库,默认有16个数据库,0-15
set name duyangge
set city jiangxi
set age 18
get name
dbsize   #当前数据库中大小
keys *    #匹配当前数据库中所有的key
keys name*  #查询匹配当前数据库中前缀含有name的key
flushdb   #清空当前数据库的数据
flushall    #清空所有数据库的数据
exists name   #判断当前数据库中是否存在;1:存在;0:不存在
move city 1    #移除key,当前数据库表示1
expire name 10  #为给定 key 设置生存时间,
ttl name  #查看过期剩余时间

字符串String

单值单value
参数:set,get,mset,mget,len,trim,getset,incr,incrby,decr,decrby,setrange,getrange,

set key value #设置键值
get key   #获取key,返回value
del key  #删除key
move key 1 #移除key\
set views 0
-------数字-------------------
incr views    #自动增加1
incrby views 10  #每次增加10
decr views #自动减1
decrby views 10 #每次减10
--------字符串----------
append key "hello"  #添加新字符串到key的后面,没有就创建key,返回追加后的长度
strlen  key  #获取value的长度
#===========================
setrange 类似于Java中的replace,下标从0开始
#=============================
setrange key 1 hello   #从下标为1开始替换hello的value,返回长度
#===========================
getrange 类似于Java中的substring,,下标从0开始
#=============================
getrange key  0,3   #类似于Java中的substring,获取截取后的value的字符串,[0,3]
getrange key 0,-1  #获取key完整的value,返回截取后的字符串
===========================
setex (set with expire) 设置键秒值,可以使用 ttl key查看,定义并使用一步到位
expire name 10, 也可以使用这个来这只键秒值
setnx (set if not exists) 不存在就设置
=============================
setex key 50 expire  #设置过期时间
ttl key
setnx mykey "redis"   #不存在就创建,存在就不创建
==========批量===================key-multipy类型
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k4 v4 #不存在就创建,原子性操作,
===========对象============
传统对象
set user:1 value(json数据)
===================
#用来缓存对象 user:{id}:{files}
mset user:1:name huangxinsheng user:1:age 18
mget user:1:name user:1:age

================
getset(先get,在set),CAS(比较并替换),可以用来更新
k1为空,返回null之后创建k1 v1
k1不为空,返回value后,替换原先的value为v1
================
getset k1 v1
get k1

列表List类型:

可以用来:栈、队列、消息队列
场景:栈、队列、消息队列
参数:push,pop,range,index,len,insert,trim,rem,rpoplpush,set(相当于先删除后添加)
单值多vlaue

==============插入/移除头尾/查看================
lpush:将一个或多个值插入到列表头部。(left 左)
rpush:将一个或多个值插入到列表尾部。(right 右)
lrange:返回列表中指定区间内的元素,区间以偏移量start 和 end指定,
其中0开始,
 lpop 命令用于移除并返回列表的第一个元素。当列表 key 不存在时,返回 nil 。
 rpop 移除列表的最后一个元素,返回值为移除的元素。
==============================
127.0.0.1:6379> lpush mylist hello
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
4) "hello"
127.0.0.1:6379> rpush mylist hello4
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
4) "hello"
5) "hello4"
127.0.0.1:6379> lpop mylist  2
1) "hello3"
2) "hello2"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello"
3) "hello4"
127.0.0.1:6379> rpop mylist  2
1) "hello4"
2) "hello"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"
3) "hello4"
4) "hello2"
127.0.0.1:6379> rpop mylist 1
1) "hello2"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"
3) "hello4"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
127.0.0.1:6379> lpop mylist 1
1) "hello3"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
==============获取长度/某个特定元素===============
lindex:获取单个list下,某个特定数组下标  
llen:获取list数组的长度
=============================
127.0.0.1:6379> keys *
1) "mylist"
127.0.0.1:6379> lindex mylist 0
"hello1"
127.0.0.1:6379> llen mylist
(integer) 1
===========移除某个特定==========
lrem key 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
============================================
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello"
3) "hello"
4) "hello1"
127.0.0.1:6379> lrem mylist 3 hello
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
=========================保留特定区间元素====================
ltrim key 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区
间之内的元素都将被删除。
ltrim mylist 1 2  闭区间【12============================================
127.0.0.1:6379> lrange mylist 0 -1
1) "hello4"
2) "hello3"
3) "hello2"
4) "hello1"
5) "hello1"
127.0.0.1:6379> ltrim mylist  1 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
================两个list之间操作================
rpoplpush 移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
rpop  先移除list最后一个元素
lpush 再向添加一个元素
=====================================
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"
3) "hello4"
127.0.0.1:6379> rpoplpush mylist mylist2
"hello4"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"
127.0.0.1:6379> lrange mylist2 0 -1
1) "hello4"
==================更新操作==============
lset key index value :将列表 key 下标为 index 的元素的值设置为 value
用于更新操作;,防止重复
没有这个下标的值就会报错,一定要存在这个下标
=============================================
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"
127.0.0.1:6379> lset mylist 0 hello0
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello0"
2) "hello3"
====================第七段===============
linsert:插入特定某个key的前面或者后面
========================================
127.0.0.1:6379> lrange mylist 0 -1
1) "hello0"
2) "hello3"
127.0.0.1:6379> linsert mylist before "hello0" "hello"
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello0"
3) "hello3"

小结:实际上是一个链表,前后都可以插入值, 如果key不存在就会新增一个链表 如何key存在,就会新增内容
如果移除了所有值,空链表,也代表不存在 在两边插入或者改动值,效率最高,中间元素,相对来说效率会第一点; 消息排队,消息队列(lpush
rpop)先进先出 | 栈 (lpush lpop),后进先出,

集合set

单值多value
参数:add,members,randmembers,ismember,card,pop,rem,move,diff,union,inter
场景:共同关注

============添加/移除/显示==============
sadd:添加成员
smembers:显示所有的成员
srem:移除某个成员
sismember:判断是否包含该成员,类似于contains
==========================
127.0.0.1:6379> sadd myset redis redis1 redis2
(integer) 3
127.0.0.1:6379> smembers myset
1) "redis"
2) "redis2"
3) "redis1"
127.0.0.1:6379> srem myset redis1 redis2
(integer) 2
127.0.0.1:6379> smembers myset
1) "redis"
127.0.0.1:6379> sismember myset "redis"
(integer) 1
==========长度/随机/移除尾==============
scard:获取set集合的长度
spop:随机移除一个或多个元素
srandmembers:随机显示一个或多个元素
==================================
127.0.0.1:6379> smembers myset
1) "redis"
127.0.0.1:6379> scard myset
(integer) 1
127.0.0.1:6379> smembers myset
1) "redis"
2) "memberche"
3) "mongonDB"
4) "cache"
127.0.0.1:6379> srandmember myset  2
1) "cache"
2) "mongonDB"
127.0.0.1:6379> spop myset 1
1) "cache"
127.0.0.1:6379> smembers myset
1) "redis"
2) "memberche"
3) "mongonDB"
==============两个集合set之间================
smove SOURCE DESTINATION MEMBER
将指定成员 member 元素从 source 集合移动到 destination 集合
===================================
127.0.0.1:6379> smove myset myset1 "redis"
(integer) 1
127.0.0.1:6379> smembers myset1
1) "redis"
==============数字集合操作================
sdiff:差集
sunion:并集
sinter:交集
===================================
127.0.0.1:6379> sadd mynum a b c d
(integer) 4
127.0.0.1:6379> sadd mynum1 b d
(integer) 2
127.0.0.1:6379> sdiff  mynum mynum1
1) "a"
2) "c"
127.0.0.1:6379> sinter mynum mynum1
1) "d"
2) "b"
127.0.0.1:6379> sunion mynum mynum1
1) "a"
2) "b"
3) "c"
4) "d"

使用场景:微博,微信,等共同关注;
在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

哈希Hash

kv模式不变,但v是一个键值对(k-map),键值对的映射表
参数:set,get,mset,mget,keys,vals,keys,len,incrby,setnx,exists
场景:存储对象
与string类型一样,只是前面加一个hashkeys,使用h开头

==============添加/查看==========
hset、hmset:用于为哈希表中的字段赋值一个或者多个
hget、hmget:得到一个或多个哈希表中的map或者map中的values
hgetall:查看哈希表中所有的map键值对
hvals:查看哈希表中所有map值中的vals;
hkeys:查看哈希表中所有map值中的keys
=========================================
127.0.0.1:6379> hset myhash file "zhangshan" file1 "lishi"
(integer) 2
127.0.0.1:6379> hget myhash file file1
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hmget myhash file file1
1) "zhangshan"
2) "lishi"
127.0.0.1:6379> hmset myhash file "zhangshan" file1 "lishi"
OK
127.0.0.1:6379> hgetall myhash
1) "file"
2) "zhangshan"
3) "file1"
4) "lishi"
127.0.0.1:6379> hget myhash file
"zhangshan"
127.0.0.1:6379> hdel myhash file
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "file1"
2) "lishi"
127.0.0.1:6379> hkeys myhash
1) "file1"
127.0.0.1:6379> hvals myhash
1) "lishi"
127.0.0.1:6379> hmset myhash file3 "zhangshan" file2 "lishi"
OK
127.0.0.1:6379> hgetall myhash
1) "file1"
2) "lishi"
3) "file3"
4) "zhangshan"
5) "file2"
6) "lishi"
127.0.0.1:6379> 
====================长度/数字类===========
hlen:获取哈希表中的长度
hincrby:使得哈希表中map中value自增,步长(没有自减,且必须加步长)
============================================
127.0.0.1:6379> hgetall myhash
1) "file1"
2) "lishi"
3) "file3"
4) "zhangshan"
5) "file2"
6) "lishi"
127.0.0.1:6379> hlen myhash
(integer) 3
127.0.0.1:6379> hset myhash views 0
(integer) 1
127.0.0.1:6379> hincrby myhash views 10
(integer) 10
===================判断============
hexists:判断该map中key是否存在
hsetnx:未哈希表中不存在的字段赋值
==================================
127.0.0.1:6379> hkeys myhash
1) "file1"
2) "file3"
3) "file2"
4) "views"
127.0.0.1:6379> hexists myhash views
(integer) 1
127.0.0.1:6379> hsetnx myhash file2 "zhangsi"
(integer) 0
127.0.0.1:6379> hsetnx myhash file5 "zhangsi"
(integer) 1
127.0.0.1:6379> hgetall myhash
 1) "file1"
 2) "lishi"
 3) "file3"
 4) "zhangshan"
 5) "file2"
 6) "lishi"
 7) "views"
 8) "60"
 9) "file5"
10) "zhangsi"
127.0.0.1:6379>

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
存储部分变更的数据,如用户信息等。

有序集合Zset

 *在set基础上,加上一个score值,

之前是 set k1 v1 现在 set k1 score1 v1
参数:add,rem,rangebyscore,revrange,rank,card,count,
场景:排序,重要消息,带权重判断*

===============添加/移除/排序================
zadd:添加
zrem:移除
zrevrange:降序
zrange:升序
============================
127.0.0.1:6379> zadd myzset 6000 "zhangshan" 7999 "lishi" 9090 "wanger"
(integer) 3
127.0.0.1:6379> zrevrange myzset 0 -1 withscores
1) "wanger"
2) "9090"
3) "lishi"
4) "7999"
5) "zhangshan"
6) "6000"
127.0.0.1:6379> zrem myzset wanger
(integer) 1
127.0.0.1:6379> zrevrange myzset 0 -1 withscores
1) "lishi"
2) "7999"
3) "zhangshan"
4) "6000"
127.0.0.1:6379> zrangebyscore  myzset -inf +inf withscores
1) "zhangshan"
2) "6000"
3) "lishi"
4) "7999"
127.0.0.1:6379> zrangebyscore myzset -inf +inf 
1) "zhangshan"
2) "lishi"
============元素个数=====================
zcard:计算set集合中总元素个数,scard
zcount:计算有序集合中指定分数区间的个数(针对于有序集合)
===========================================
127.0.0.1:6379> zrangebyscore  myzset -inf +inf
1) "zhangshan"
2) "lishi"
127.0.0.1:6379> zcount myzset 0 10000
(integer) 2
127.0.0.1:6379> zrangebyscore myzset -inf +inf withscores
1) "zhangshan"
2) "6000"
3) "lishi"
4) "7999"
127.0.0.1:6379> zcard myzset
(integer) 2

=============排序====================
zrank:排名,默认是升序查找,返回下标,0开始,逻辑业务需要+1
zrevrange:降序
zrange:升序
============================
127.0.0.1:6379> zrangebyscore myzset -inf +inf withscores
1) "zhangshan"
2) "6000"
3) "lishi"
4) "7999"
127.0.0.1:6379> zrank myzset lishi
(integer) 1

小结:和set相比,sorted
set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的sorted
set,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。可以用sorted
set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。排行榜应用,取TOP
N操作 !

**五种基本类型小结:

  1. string,-k-v
  2. list-队列
  3. hash-和string大致一样,只是加了一个key-map,
  4. set-
  5. zset:和set大致一样,只是多了一个score**

三大特殊类型使用

Geo地理位置

*geo的文档说明
参数:geoadd、geopos、geodist、georadius、georadiusbymember、gethash,zrem,zrange
场景:附近位置
Redis 的 GEO 特性在 Redis 3.2 版本中推出, 这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。geo的数据类型为zset。

GEO 的数据结构总共有六个常用命令:geoadd、geopos、geodist、georadius、georadiusbymember、gethash*

=============添加:geoadd============
# 语法
geoadd key longitude(经度) latitude(纬度) member ...
# 将给定的空间元素(纬度、经度、名字)添加到指定的键里面。
# 这些数据会以有序集he的形式被储存在键里面,从而使得georadius和georadiusbymember这样的命令可以在之后通过位置查询取得这些元素。
# geoadd命令以标准的x,y格式接受参数,所以用户必须先输入经度,然后再输入纬度。
# geoadd能够记录的坐标是有限的:非常接近两极的区域无法被索引。
# 有效的经度介于-180-180度之间,有效的纬度介于-85.05112878 度至 85.05112878 度之间。,
#当用户尝试输入一个超出范围的经度或者纬度时,geoadd命令将返回一个错误。
========================================
[root@10-9-170-137 bin]# redis-cli --raw -p 6379  目的是可以输出中文,防止乱码
127.0.0.1:6379> geoadd china:city 113.88 22.55 深圳 108.9 34.23 重庆
=============查看:geopos=======================
# 语法
geopos key member [member...]
#从key里返回所有给定位置元素的位置(经度和纬度)
===============================================
127.0.0.1:6379> geopos china:city 深圳 上海 重庆
113.87999922037124634
22.5500010475923105
121.48000091314315796
31.40000025319353938
108.90000075101852417
34.23000121926852302
===========计算两个城市之间的直线距离:geodist===========
# 语法
geodist key member1 member2 [unit]
# 返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在,那么命令返回空值。
# 指定单位的参数unit必须是以下单位的其中一个:
# m表示单位为米
# km表示单位为千米
# mi表示单位为英里
# ft表示单位为英尺
# 如果用户没有显式地指定单位参数,那么geodist默认使用米作为单位。
#geodist命令在计算距离时会假设地球为完美的球形,在极限情况下,这一假设最大会造成0.5%的误
差。
================================================
127.0.0.1:6379> geodist china:city 深圳 上海 km
1238.6732
=============以给定经度纬度为中心,找出符合半径的元素:georadius==========
# 语法
georadius key longitude latitude radius m|km|ft|mi [withcoord][withdist]
[withhash][asc|desc][count count]
# 以给定的经纬度为中心, 找出某一半径内的元素
=================================================
127.0.0.1:6379> georadius china:city 100  40  2000 km
重庆
南昌
127.0.0.1:6379> georadius china:city 100  40  4000 km
重庆
深圳
南昌
上海
127.0.0.1:6379> georadius china:city 100  40  4000 km withcoord withdist
重庆
1016.4215
108.90000075101852417
34.23000121926852302
深圳
2340.3633
113.87999922037124634
22.5500010475923105
南昌
1920.8810
115.84000200033187866
28.65000015634961272
上海
2155.4807
121.48000091314315796
31.40000025319353938
127.0.0.1:6379> georadius china:city 100  40  4000 km withcoord withdist count 1
重庆
1016.4215
108.90000075101852417
34.23000121926852302
127.0.0.1:6379> georadius china:city 100  40  4000 km withcoord withdist count 2
重庆
1016.4215
108.90000075101852417
34.23000121926852302
南昌
1920.8810
115.84000200033187866
28.65000015634961272
=========找出位于指定范围内的元素,中心点由元素规定:georadiusbymember==========
# 语法
georadiusbymember key member radius m|km|ft|mi [withcoord][withdist]
[withhash][asc|desc][count count]
# 找出位于指定范围内的元素,中心点是由给定的位置元素决定
georadius与georadiusbymember不同之处,就是中心点一个是需要手动自定,一个是由元素规定
==================================================
127.0.0.1:6379> georadiusbymember china:city 上海 2000 km
重庆
深圳
南昌
上海
127.0.0.1:6379> georadiusbymember china:city 上海 2000 km withcoord withdist count 2
上海
0.0000
121.48000091314315796
31.40000025319353938
南昌
623.2016
115.84000200033187866
28.65000015634961272
===============删除元素:zrem=========
geo底层是使用zset实现的,
======================================
127.0.0.1:6379> zrange china:city 0 -1
重庆
深圳
南昌
上海
127.0.0.1:6379> zrem china:city 南昌
1
127.0.0.1:6379> zrange china:city 0 -1
重庆
深圳
上海
=============返回hash:geohash=============
将元素的经纬度,转换成hash值返回
==============================
127.0.0.1:6379> geohash china:city 重庆 深圳   
wqj6wp6s1y0
ws0br3hgk20

HyperLogLog

场景:可容错的基数统计(如用户浏览不同网页的浏览量)
参数:pfadd,pfcount,pfmerge
简介:
Redis 在 2.8.9 版本添加了 HyperLogLog 结构(一种数据结构)。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积
非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基
数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
HyperLogLog则是一种算法,它提供了不精确的去重计数方案。

举个栗子:假如我要统计网页的UV(浏览用户数量,一天内同一个用户多次访问只能算一次),传统的
解决方案是使用Set来保存用户id,然后统计Set中的元素数量来获取页面UV。但这种方案只能承载少量
用户,一旦用户数量大起来就需要消耗大量的空间来存储用户id。我的目的是统计用户数量而不是保存
用户,这简直是个吃力不讨好的方案!而使用Redis的HyperLogLog最多需要12k就可以统计大量的用户
数,尽管它大概有0.81%的错误率,但对于统计UV这种不需要很精确的数据是可以忽略不计的。

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

=================添加:pfadd;统计:pfcount;合并:pfmerge=============
PFADD key element [element ...] 添加指定元素到 HyperLogLog 中。
PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值。
PFMERGE destkey sourcekey [sourcekey ...]将多个 HyperLogLog 合并为一HyperLogLog,并集计算
========================使用==========================
127.0.0.1:6379> pfadd mydata a b c d e f g a e
1
127.0.0.1:6379> pfcount mydata
7
127.0.0.1:6379> pfadd mydata1 a b c h i j k m n
1
127.0.0.1:6379> pfcount mydata1
9
127.0.0.1:6379> pfmerge mydata2 mydata mydata1
OK
127.0.0.1:6379> pfcount mydata2
13

Bitmap

参数:setbit,getbit,bitcount
场景:上班打卡(适用于只有两种状态0/1)

介绍: 在开发中,可能会遇到这种情况:需要统计用户的某些信息,如活跃或不活跃,登录或者不登录;又如 需要记录用户一年的打卡情况,打卡了是1,
没有打卡是0,如果使用普通的 key/value存储,则要记录 365条记录,如果用户量很大,需要的空间也会很大,所以 Redis 提供了
Bitmap 位图这中数据结构, Bitmap 就是通过操作二进制位来进行记录,即为 0 和 1;如果要记录 365 天的打卡情况,使用
Bitmap
表示的形式大概如下:0101000111000111…,这样有什么好处呢?当然就是节约内存
了,365 天相当于 365 bit,又 1 字节 = 8 bit , 所以相当于使用 46 个字节即可。

BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态, 其中的 key 就是对应元素本身,实际上
底层也是通过对字符串的操作来实现。Redis 从 2.2 版本之后新增了setbit, getbit, bitcount 等几个
bitmap 相关命令。

==============设置:setbit;获取:getbit;统计:bitcount=========
setbit key offset value : 设置 key 的第 offset 位为value (10)
getbit key offset 获取offset设置的值,未设置过默认返回0
bitcount key [start, end] 统计 key 上位为1的个数
====================================================
127.0.0.1:6379> setbit work 0 1
0
127.0.0.1:6379> setbit work 2 1
0
127.0.0.1:6379> setbit work 1 0
0
127.0.0.1:6379> setbit work 4 0
0
127.0.0.1:6379> setbit work 3 1
0
127.0.0.1:6379> getbit work 3
1
127.0.0.1:6379> bitcount work  
3
127.0.0.1:6379> bitcount work  0   4
3
127.0.0.1:6379> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值