前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis入门:数据类型及操作命令

Redis入门:数据类型及操作命令

作者头像
云飞扬
发布2022-03-24 10:28:13
9330
发布2022-03-24 10:28:13
举报
文章被收录于专栏:星汉技术

Redis入门:数据类型及操作命令

Redis现在支持以下几种数据类型:

  • 字符串
  • 列表
  • 集合
  • 排序集合
  • 哈希
  • Bitmap
  • HyperLogLog
  • Stream

针对不同的数据类型,还有不同的操作命令。

1 KEY设置规则

Redis的键原则上可以使用任何字符串,但是在使用的时候,还是有一些建议规则:

  • 1.key最好不要太长。
  • 2.key也不要太短。
  • 3.使用正确的模式。
  • 4.key最大为512M。

2 STRING

String类型是Redis中的基本数据类型。Redis中的key是字符串类型的,value也可以是字符串类型,其实就是用一个字符串去表示另一个字符串。

2.1 操作命令

2.1.1 keys

keys [pattern]:查询当前的存储空间中,所有存在的key值。

例如:

代码语言:javascript
复制
127.0.0.1:6379> keys *
(empty list or set)
2.1.2 set

set [key] [value]:设置存储的key-value结构的数据,value是字符串;覆盖已经存在的key-value数据。

例如:

代码语言:javascript
复制
127.0.0.1:6379> set city beijing
OK
127.0.0.1:6379> keys *
1) "city"
127.0.0.1:6379> set city shanghai
OK
127.0.0.1:6379> keys *
1) "city"
127.0.0.1:6379> get city
"shanghai"
127.0.0.1:6379> set city beijing
OK
127.0.0.1:6379> get city
"beijing"
2.1.3 get

get [key]:获取当前key对应的value数据。

例如:

代码语言:javascript
复制
127.0.0.1:6379> set name xiao
OK
127.0.0.1:6379> get name
"xiao"
2.1.4 select

select [整数值默认0-15]:redis存在默认的0-15号的数据分库,即16个数据库。默认使用0号,功能现在不常用。是早期的遗留功能,java代码不支持分库的api。

例如:

代码语言:javascript
复制
127.0.0.1:6379> keys *
1) "city"
2) "name"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
2.1.5 exists

exists [key]:查看当前redis节点是否包含查询的key-value数据,返回1表示存在,返回0表示不存在。

redis存储的字符串类型数据value达到最大值512m;get命令判断key的存在会占用读取value过程的资源,效率低。

例如:

代码语言:javascript
复制
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists nil
(integer) 0
2.1.6 del

del [key]:删除当前存储的key-value数据。返回1表示删除成功,返回0表示删除不成功。

例如:

代码语言:javascript
复制
127.0.0.1:6379> keys *
1) "city"
2) "name"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> keys *
1) "city"
2.1.7 type

type [key]:查看当前key对应的value的数据类型。

例如:

代码语言:javascript
复制
127.0.0.1:6379> type city
string
2.1.8 help

help [命令名称]:查询当前命令的使用规则。

例如:

代码语言:javascript
复制
127.0.0.1:6379> help set
  SET key value [EX seconds] [PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

注意:help的返回内容不全面;真正需要查询某个命令的使用规则,可以到官网查询。

2.1.9 flushall

flushall:将当前的数据库[0-15]的所有数据,flush到指定的持久化文件中(dump.rbd);可以代替清空当前数据库的key-value数据的功能。

例如:

代码语言:javascript
复制
127.0.0.1:6379> set name xiao
OK
127.0.0.1:6379> set gender male
OK
127.0.0.1:6379> keys *
1) "city"
2) "gender"
3) "name"
127.0.0.1:6379> flushall
4599:M 23 Feb 11:23:35.394 * DB saved on disk
OK
127.0.0.1:6379> keys *
(empty list or set)
2.1.10 flushdb

flushdb:指定清空或者flush当前数据库的数据到磁盘文件中。

例如:

代码语言:javascript
复制
127.0.0.1:6379> set name xiao
OK
127.0.0.1:6379> set city beijing
OK
127.0.0.1:6379> keys *
1) "city"
2) "name"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> set name xiao
OK
127.0.0.1:6379[1]> set city beijing
OK
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "city"
2) "name"
2.1.11 incr/decr

incr decr 自增,自减:对于字符串纯数字的数据可以进行自增和自减操作。

例如:

代码语言:javascript
复制
127.0.0.1:6379> set num1 100
OK
127.0.0.1:6379> incr num1
(integer) 101
127.0.0.1:6379> type num1
string
127.0.0.1:6379> set num2 oo100
OK
127.0.0.1:6379> incr num2
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr num1
(integer) 100
2.1.12 incrby/decrby

incrby [key] [整数] decrby [key] [整数]:自增自减指定数量的值。

例如:

代码语言:javascript
复制
127.0.0.1:6379> incrby num1 5
(integer) 105
127.0.0.1:6379> decrby num1 50
(integer) 55

自增自减的使用情景:内存数据库的计算需要消耗资源,上线人数:50399,数字是时刻跳动的,不会一个一个添加或者减少。

2.1.13 apend

apend [key] [value]:在指定key的value上追加数据。

例如:

代码语言:javascript
复制
127.0.0.1:6379> append city daxing
(integer) 13
127.0.0.1:6379> get city
"beijingdaxing"
2.1.14 mset/mget

mset mget:设置一批key-value和获取一批key对应的value值。

例如:

代码语言:javascript
复制
127.0.0.1:6379> mset num01 100 num02 200 num03 300
OK
127.0.0.1:6379> keys *
1) "num01"
2) "num02"
3) "num03"
4) "num2"
5) "city"
6) "name"
7) "num1"
127.0.0.1:6379> mget num01 num02 num03 num2 city
1) "100"
2) "200"
3) "300"
4) "oo100"
5) "beijingdaxing"

也是redis早期版本的遗留功能,不支持jedis的分片计算,java代码无法操作和使用。

2.1.15 expire ttl

expire [key] 时间数字(单位秒):设置当前key-value数据的存活时间,配合ttl的命令可以查看剩余的寿命。

寿命是整数-2代表超时,大于0代表存活描述,永久存活的值是-1。

例如:

代码语言:javascript
复制
127.0.0.1:6379> expire bomb 100
(integer) 1
127.0.0.1:6379> ttl bomb
(integer) 93
127.0.0.1:6379> set bomb c4
OK
127.0.0.1:6379> expire bomb 100
(integer) 1
127.0.0.1:6379> ttl bomb
(integer) 93
127.0.0.1:6379> ttl bomb
(integer) 88
127.0.0.1:6379> set bomb2 c5
OK
127.0.0.1:6379> expire bomb2 10
(integer) 1
127.0.0.1:6379> ttl bomb2
(integer) 7
127.0.0.1:6379> ttl bomb2
(integer) 2
127.0.0.1:6379> ttl bomb2
(integer) 0
127.0.0.1:6379> ttl bomb2
(integer) -2
127.0.0.1:6379> ttl bomb2
(integer) -2
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> keys *
1) "num01"
2) "num03"
3) "city"
4) "num1"
5) "num02"
6) "num2"
7) "name"
127.0.0.1:6379> ttl num1
(integer) -1

使用场景:可以作为抢单、秒杀的倒计时;如果单位是秒的话不够精确,至少要毫秒。

2.1.16 pexpire

pexpire [key]:时间整数[毫秒]。

例如:

代码语言:javascript
复制
127.0.0.1:6379> pexpire bomb3 15000
(integer) 1
127.0.0.1:6379> ttl bomb3
(integer) 11

3 LIST

Redis的List是通过链表实现的。能够以非常快速的方式将元素添加到非常长的列表中。

3.1 操作命令

3.1.1 lrange

查看list。起始位置start,结束位置stop,分别对应的是元素的下标。如果stop=-1展示从start位置到结束的所有元素。

代码语言:javascript
复制
redis 127.0.0.1:6379> lrange mylist3 0 -1
3.1.2 lpush

LPUSH:在key对应list的头部添加字符串元素(上为头,下为尾)。

代码语言:javascript
复制
redis 127.0.0.1:6379> lpush mylist "world"
(integer) 1
redis 127.0.0.1:6379> lpush mylist "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3.1.3 rpush

RPUSH:在key对应list的尾部添加字符串元素。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist2 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist2 "world"
(integer) 2
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
3.1.4 linsert

linsert:在key对应list的特定位置之前或之后添加字符串元素。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist3 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist3 "world"
(integer) 2
redis 127.0.0.1:6379> linsert mylist3 before "world" "there"
(integer) 3
redis 127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
2) "there"
3) "world"
3.1.5 lset

lset:设置list中指定下标的元素值。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist4 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist4 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist4 "three"
(integer) 3
redis 127.0.0.1:6379> lset mylist4 0 "four"
OK
redis 127.0.0.1:6379> lset mylist4 -2 "five" 倒数第二
OK
redis 127.0.0.1:6379> lrange mylist4 0 -1
1) "four"
2) "five"
3) "three"
3.1.6 lrem

lrem:从key对应list中删除count个和value相同的元素。

count>0时,按从头到尾(上到下)的顺序删除。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
redis 127.0.0.1:6379>

count<0时,按从尾到头(下到上)的顺序删除。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist6 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist6 -2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379>

count=0时,删除全部。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist7 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist7 0 "hello"
(integer) 3
redis 127.0.0.1:6379> lrange mylist7 0 -1
1) "foo"
redis 127.0.0.1:6379>
3.1.7 ltrim

保留指定key 的值范围内的数据。

代码语言:javascript
复制
redis 127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist8 "three"
(integer) 3
redis 127.0.0.1:6379> rpush mylist8 "four"
(integer) 4
redis 127.0.0.1:6379> ltrim mylist8 1 -1
OK
redis 127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
2) "three"
3) "four"
redis 127.0.0.1:6379>
3.1.8 lpop

从list的头部删除元素,并返回删除元素。

代码语言:javascript
复制
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> lpop mylist
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "world"
redis 127.0.0.1:6379>
3.1.9 rpop

从list的尾部删除元素,并返回删除元素。

代码语言:javascript
复制
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpop mylist2
"world"
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
redis 127.0.0.1:6379>
3.1.10 rpoplpush

从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的。如果第一个list是空或者不存在返回nil。

代码语言:javascript
复制
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
3) "hello"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "hello"
3) "foo"
redis 127.0.0.1:6379>
3.1.11 lindex

返回名称为key的list中index位置的元素。

代码语言:javascript
复制
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lindex mylist5 0
"three"
redis 127.0.0.1:6379> lindex mylist5 1
"foo"
redis 127.0.0.1:6379>
3.1.12 llen

返回key对应list的长度。

代码语言:javascript
复制
redis 127.0.0.1:6379> llen mylist5
(integer) 2
redis 127.0.0.1:6379>

4 HASH

Hash类型类似对象属性和值的结构.

4.1 操作命令

4.1.1 hset/hget

HSET和HGET:赋值和取值。

命令格式:

代码语言:javascript
复制
HSET key field value
HGET key field
HMSET key field value [field value…]
HMGET key field value [field value…]
HGETALL key
代码语言:javascript
复制
127.0.0.1:6379> hset user username chenchen
(integer) 1
127.0.0.1:6379> hget user username
"chenchen"
127.0.0.1:6379> hset user username chen
(integer) 0
127.0.0.1:6379> keys user
1) "user"
127.0.0.1:6379> hgetall user
1) "username"
2) "chen"
127.0.0.1:6379> 
127.0.0.1:6379> hset user age 30
(integer) 1
127.0.0.1:6379> hgetall user
1) "username"
2) "chen"
3) "age"
4) "30"

HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

4.1.2 hmset/hmget

HMSET和HMGET:批量设置和获取对象属性。

代码语言:javascript
复制
127.0.0.1:6379> hmset person username tony age 18
OK
127.0.0.1:6379> hmget person age username
1) "18"
2) "tony"
127.0.0.1:6379> hgetall person
1) "username"
2) "tony"
3) "age"
4) "18"

注意:上面HMGET字段顺序可以自行定义。

4.1.3 hexists

HEXISTS:属性是否存在。

代码语言:javascript
复制
127.0.0.1:6379> hexists killer
(error) ERR wrong number of arguments for 'hexists' command
127.0.0.1:6379> hexists killer a
(integer) 0
127.0.0.1:6379> hexists user username
(integer) 1
127.0.0.1:6379> hexists person age
(integer) 1
4.1.4 hdel

HDEL:删除对象字段。

代码语言:javascript
复制
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "username"
2) "chen"
127.0.0.1:6379> hgetall person
1) "username"
2) "tony"
3) "age"
4) "18"
4.1.5 hkeys/hvals

只获取字段名HKEYS或字段值HVALS。

代码语言:javascript
复制
127.0.0.1:6379> hkeys person
1) "username"
2) "age"
127.0.0.1:6379> hvals person
1) "tony"
2) "18"
4.1.6 hlen

获取字段数量HLEN

代码语言:javascript
复制
127.0.0.1:6379> hlen user
(integer) 1
127.0.0.1:6379> hlen person
(integer) 2

5 SET

Redis的Set是无序的字符串集合。

5.1 操作命令

5.1.1 sadd

此命令用来添加新的新的元素,可以单个添加,也可添加一组。

例如:

代码语言:javascript
复制
127.0.0.1:6379> sadd muset 1 2 3 4
(integer) 4
5.1.2 smembers

此命令用于返回set的值。返回的值是无序的,这个顺序是随机组成的。

例如:

代码语言:javascript
复制
127.0.0.1:6379> smembers muset
1) "1"
2) "2"
3) "3"
4) "4"
5.1.3 sismember

此命令用于检查元素是否存在。

例如:

代码语言:javascript
复制
127.0.0.1:6379> sismember muset 3
(integer) 1
127.0.0.1:6379> sismember muset 5
(integer) 0
5.1.4 sinter

此命令用于获取set的交集。

例如:

代码语言:javascript
复制
127.0.0.1:6379> sadd news:1000:tags 1 2 5 77
(integer) 4
127.0.0.1:6379> sadd tag:1:news 1000
(integer) 1
127.0.0.1:6379> sadd tag:2:news 1000
(integer) 1
127.0.0.1:6379> sadd tag:5:news 1000
(integer) 1
127.0.0.1:6379> sadd tag:77:news 1000
(integer) 1
127.0.0.1:6379> smembers news:1000:tags
1) "1"
2) "2"
3) "5"
4) "77"
127.0.0.1:6379> sinter tag:1:news tag:2:news tag:5:news tag:77:news
1) "1000"
5.1.5 spop

此命令用于从set中随机删除一个元素,并将这个元素返回给客户端。

例如:

代码语言:javascript
复制
127.0.0.1:6379> spop news:1000:tags
"2"
127.0.0.1:6379> smembers news:1000:tags
1) "1"
2) "5"
3) "77"
5.1.6 sunionstore

此命令用于获取两个set的并集,并且会去重。

例如:

代码语言:javascript
复制
127.0.0.1:6379> sadd set1 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd set2 4 5 6 7
(integer) 4
127.0.0.1:6379> sunionstore set3 set1 set2
(integer) 7
127.0.0.1:6379> smembers set3
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
5.1.7 scard

此命令用于获取集合中元素的个数。

例如:

代码语言:javascript
复制
127.0.0.1:6379> scard set3
(integer) 7
127.0.0.1:6379> scard set1
(integer) 4
127.0.0.1:6379> scard set2
(integer) 4
5.1.8 srandmember

此命令用于从set中随机获取一个元素,但是不删除此元素。

例如:

代码语言:javascript
复制
127.0.0.1:6379> srandmember set3
"4"
127.0.0.1:6379> smembers set3
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379>

6 SORTED SET

排序集由一组有序的不重复的字符串元素组成。有序集合中的每个元素都与一个浮点值相关联,称为分数

排序规则:

  • 1.如果A和B是具有不同分数的两个元素,如果A.score>B.score则A>B。
  • 2.如果A和B具有完全相同的分数,则如果A字符串在字典顺序上大于B字符串,则A>B。A和B字符串不能相等,因为排序集只有唯一元素。

6.1 操作命令

6.1.1 zadd

此命令用于给集合添加元素。

命令格式如下:

代码语言:javascript
复制
zadd name score value

例如:

代码语言:javascript
复制
127.0.0.1:6379> zadd zset1 1940 "Alan Kay"
(integer) 1
127.0.0.1:6379> zadd zset1 1957 "Sophie Wilson"
(integer) 1
127.0.0.1:6379> zadd zset1 1953 "Richard Stallman"
(integer) 1
127.0.0.1:6379> zadd zset1 1949 "Anita Borg"
(integer) 1
6.1.2 zrange

以分数从小到大排序显示集合所有元素。

例如:

代码语言:javascript
复制
127.0.0.1:6379> zrange zset1 0 -1
1) "Alan Kay"
2) "Anita Borg"
3) "Richard Stallman"
4) "Sophie Wilson"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "Alan Kay"
2) "1940"
3) "Anita Borg"
4) "1949"
5) "Richard Stallman"
6) "1953"
7) "Sophie Wilson"
8) "1957"
  • 0和-1表示从元素索引0到最后一个元素。
  • withscores:此为可选项,用于表示是否显示分数。
6.1.3 zrevrange

以分数从大到小排序显示集合所有元素。后面的参数与zrange一样。

例如:

代码语言:javascript
复制
127.0.0.1:6379> zrevrange zset1 0 -1
1) "Sophie Wilson"
2) "Richard Stallman"
3) "Anita Borg"
4) "Alan Kay"
6.1.4 zrangebyscore

此命令用于显示集合中的指定部分数据。

例如:

代码语言:javascript
复制
127.0.0.1:6379> zadd zset2 1 a
(integer) 1
127.0.0.1:6379> zadd zset2 2 b
(integer) 1
127.0.0.1:6379> zadd zset2 3 c
(integer) 1
127.0.0.1:6379> zadd zset2 4 d
(integer) 1
127.0.0.1:6379> zadd zset2 5 e 6 f
(integer) 2
127.0.0.1:6379> zrange zset2 0 -1 withscores
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "4"
 9) "e"
10) "5"
11) "f"
12) "6"
127.0.0.1:6379> zrangebyscore zset2 -inf 3
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> zrangebyscore zset2 4 6
1) "d"
2) "e"
3) "f"

-inf表示负无穷。

6.1.5 zremrangebyscore

此命令用于批量删除元素,并且返回删除元素的个数。

例如:

代码语言:javascript
复制
127.0.0.1:6379> zremrangebyscore zset2 3 5
(integer) 3
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "f"
6) "6"
127.0.0.1:6379>
6.1.6 zrank

此命令用于返回元素的正向位置。集合中第一个元素下标为0。

例如:

代码语言:javascript
复制
127.0.0.1:6379> zrank zset2 f
(integer) 2
127.0.0.1:6379> zrank zset2 b
(integer) 1
127.0.0.1:6379>
6.1.7 zrevrank

此命令用于返回元素的反向位置。

例如:

代码语言:javascript
复制
127.0.0.1:6379> zrevrank zset2 f
(integer) 0

7 BITMAP

Bitmap即位图,它不是实际的数据类型,而是在String类型上定义的一组面向位操作的数组。它的最大程度为512M,最长的位为2的32次方。

位图操作分为两部分:一部分是offset,另一部分是value。

位图的offset大小为2的32次方,value只能是0或1。

7.1 操作命令

7.1.1 setbit

此命令用于设置位图对应offset的value。

格式如下:

代码语言:javascript
复制
setbit key offset value

例如:

代码语言:javascript
复制
127.0.0.1:6379> setbit key 10 1
(integer) 0
7.1.2 getbit

此命令用于获取位图对应offset的value。

格式:

代码语言:javascript
复制
getbit key offset

例如:

代码语言:javascript
复制
127.0.0.1:6379> getbit key 10
(integer) 1
7.1.3 bitcount

格式如下:

代码语言:javascript
复制
bitcount key [start end]

获取位图指定范围中值为1的个数,如果不指定start和end,则取所有。

例如:

代码语言:javascript
复制
127.0.0.1:6379> bitcount key 0 11
(integer) 1
7.1.4 bitop

格式如下:

代码语言:javascript
复制
bitop opration destKey key1 [key2…]

获取多个位图的交集、并集、非、异或操作之后的结果,结果保存在destKey中。

opration:可以是and,or,not,xor。

例如:

代码语言:javascript
复制
127.0.0.1:6379> bitop and bitm3 bitm1 bitm2
(integer) 2
7.1.5 bitpos

格式如下:

代码语言:javascript
复制
bitpos key bit [start end]

查找指定范围内的指定值出现第一次的位置。如果不指定star和end,则取所有。

例如:

代码语言:javascript
复制
127.0.0.1:6379> bitpos bitm3 1
(integer) 2
127.0.0.1:6379> bitpos bitm3 0
(integer) 0

8 HYPERLOGLOG

HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。

8.1 操作命令

8.1.1 pfadd

格式如下:

代码语言:javascript
复制
pfadd key element [element …]

向HyperLogLog中添加指定元素。

例如:

代码语言:javascript
复制
127.0.0.1:6379> pfadd hll a b c d e
(integer) 1

8.1.2 pfcount

格式如下:

代码语言:javascript
复制
pfcount key [key…]

返回指定HyperLogLog的基数估算值。

例如:

代码语言:javascript
复制
127.0.0.1:6379> pfcount hll
(integer) 5
127.0.0.1:6379> pfadd hl2 d e f g
(integer) 1
127.0.0.1:6379> pfcount hll hl2
(integer) 7
127.0.0.1:6379>
8.1.3 pfmerge

格式如下:

代码语言:javascript
复制
pfmerge destkey sourcekey [sourcekey…]

将多个HyperLogLog合并为一个。

例如:

代码语言:javascript
复制
127.0.0.1:6379> pfcount hll hl2
(integer) 7
127.0.0.1:6379> pfmerge hl3 hll hl2
OK
127.0.0.1:6379> pfcount hl3
(integer) 7
127.0.0.1:6379>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/01/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis入门:数据类型及操作命令
    • 1 KEY设置规则
      • 2 STRING
        • 2.1 操作命令
      • 3 LIST
        • 3.1 操作命令
      • 4 HASH
        • 4.1 操作命令
        • 4.1.2 hmset/hmget
      • 5 SET
        • 5.1 操作命令
      • 6 SORTED SET
        • 6.1 操作命令
      • 7 BITMAP
        • 7.1 操作命令
      • 8 HYPERLOGLOG
        • 8.1 操作命令
    相关产品与服务
    云数据库 Redis®
    腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档