redis数据类型详解+实例

redis中的数据类型: string,list, set, zset, hash,bitmaps, hyperloglog, gepspatial

目录

一、 String

二、List

三、Set

四、Zset

五、Hash

六、Bitmaps

七、Hyperloglog

八、Gepspatial


一、 String

        redis最基本的数据类型,一个 key 对应一个 value。

        一般用于缓存、限流、计数器、分布式锁、分布式Session等

        String类型的值最大能存储512MB

相关命令:

1、set key value        设置指定key的值

set name zhangsan

设置一个key为name的value为zhangsan       

2、get key        获取指定 key 的值

get name

获取到name的值为 "zhangsan"         

3、getrange key start end        返回 key 中字符串值的子字符,end=-1时表示全部

getrange name 0 -1

获取到name中的所有值即 "zhangsan"

4、setbit key offset value        对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)

      getbit key offset                 对 key 所储存的字符串值,获取指定偏移量上的位(bit)

      偏移量offset必须大于或等于0,小于2^32

127.0.0.1:6379> get mykey
"123456789"
127.0.0.1:6379> setbit mykey 0 0
(integer) 0
127.0.0.1:6379> getrange mykey 0 3
"1234"
127.0.0.1:6379> setbit mykey 3 0
(integer) 1
127.0.0.1:6379> getrange mykey 0 3
"!234"127.0.0.1:6379> set mykey '1234'
OK
127.0.0.1:6379> get mykey
"1234"
127.0.0.1:6379> setbit mykey 15 1
(integer) 0
127.0.0.1:6379> get mykey
"1334"

当键key不存在时,会自动生成一个位图。如果偏移量大于键key对应的位图长度,位图会先进行伸展,以确保它可以将value保存在指定的偏移量上。当位图进行伸展时,空白位置以0填充

5、mset key value [key value ...]        同时设置一个或多个 key-value 对

mset num1 n1 num2 n2 num3 n3

同时设置多个key-value 对:        num1:n1        num2:n2        num3:n3

     

msetnx key value [key value ...]        

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在

对不存在的key执行命令:
127.0.0.1:6379> msetnx key1 'a' key2 'b'
(integer) 1
127.0.0.1:6379> get key1
"a"
127.0.0.1:6379> get key2
"b"对已存在的key执行命令:
127.0.0.1:6379> msetnx key2 'bb' key3 'c'    #key2以及存在,因此操作失败
(integer) 0
127.0.0.1:6379> exists key3                  #因为命令是原子性的,所以key3没有被设置
(integer) 0
127.0.0.1:6379> get key2                     #key2没有被修改
"b"

6、mget key [key2...]        获取所有(一个或多个)给定 key 的值

127.0.0.1:6379> mget num1 num2 num3
1) "n1"
2) "n2"
3) "n3"

同时获取所有给定num1,num2,num3的值

7、getset key value        将给定 key 的值设为 value ,并返回 key 的旧值(old value)

127.0.0.1:6379> getset name lisi
"zhangsan"

设置name的值为lisi,返回了name之前的旧值zhangsan

8、setex key seconds value        

      将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)

127.0.0.1:6379> setex name 10 lisi
OK
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> get name
(nil)

将lisi关联到name,并将name的过期时间设为10s,过十秒后name的值lisi过期了,再次将访问获取不到 lisi

9、setnx key value        只有在 key 不存在时设置 key 的值

     设置成功,返回1。设置失败,返回0

127.0.0.1:6379> setnx names wangwu
(integer) 1
127.0.0.1:6379> setnx name wangwu
(integer) 1
127.0.0.1:6379> setnx name lisi
(integer) 0
127.0.0.1:6379> get names
"wangwu"
127.0.0.1:6379> get name
"wangwu"

10、setrange key offset value        

       用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始

127.0.0.1:6379> get name
"wangwu"
127.0.0.1:6379> setrange name 4 liu
(integer) 7
127.0.0.1:6379> get name
"wangliu"

11、strlen key         返回 key 所储存的字符串值的长度

127.0.0.1:6379> get name
"wangliu"
127.0.0.1:6379> strlen name
(integer) 7

12、psetex key milliseconds value

        与 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间

127.0.0.1:6379> psetex name 4000 wangliu
OK
127.0.0.1:6379> get name
"wangliu"
127.0.0.1:6379> get name
(nil)

13、incr key        将 key 中储存的数字值增一

127.0.0.1:6379> set numble 100
OK
127.0.0.1:6379> incr numble
(integer) 101

14、incrby key increment        将 key 所储存的值加上给定的增量值(increment)

127.0.0.1:6379> incrby numble 49
(integer) 150

15、increbyfloat key increment        将 key 所储存的值加上给定的浮点增量值(increment)

127.0.0.1:6379> incrbyfloat numble 1.0
"151"

16、decr key        将 key 中储存的数字值减一

127.0.0.1:6379> set numble 100
OK
127.0.0.1:6379> decr numble
(integer) 99

17、decrby key decrement        key 所储存的值减去给定的减量值(decrement)

127.0.0.1:6379> decrby numble 49
(integer) 50

18、append key value

        如果 key 已经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值 value 的末尾

127.0.0.1:6379> get names
"wangwu"
127.0.0.1:6379> append names nihao
(integer) 11
127.0.0.1:6379> get names
"wangwunihao"

二、List

Redis列表是简单的字符串列表,按照插入顺序排序。

添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 2^32^ - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

List类型一般用于关注人、简单队列等。

 相关命令:

1、lpush key value1 [value2]        将一个或多个值插入到列表头部 

127.0.0.1:6379> lpush numble 1 2 3
(integer) 3

        从左推入         值依次是3 2 1

2、lpop key        移出并获取列表的第一个元素

127.0.0.1:6379> lpop numble
"3"

3、lrange key start stop        获取列表指定范围内的元素

127.0.0.1:6379> lpush numble 3 2 1
(integer) 3
127.0.0.1:6379> lrange numble 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange numble 0 1
1) "1"
2) "2"

4、lpushx key value        将一个值插入到已存在的列表头部

127.0.0.1:6379> lpushx numble 0
(integer) 4
127.0.0.1:6379> lrange numble 0 -1
1) "0"
2) "1"
3) "2"
4) "3"

5、rpush key value1 [value2]        在列表中添加一个或多个值

127.0.0.1:6379> rpush numble 4 5 6
(integer) 7
127.0.0.1:6379> lrange numble 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"

6、rpop key        移除列表的最后一个元素,返回值为移除的元素

127.0.0.1:6379> rpop numble
"6"
127.0.0.1:6379> lrange numble 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"

7、rpushx key value        为已存在的列表添加值

127.0.0.1:6379> rpushx numble 6
(integer) 7
127.0.0.1:6379> lrange numble 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"

8、llen key        获取列表长度

127.0.0.1:6379> llen numble
(integer) 7

9、linsert key before|after pivot value        在列表的元素前或者后插入元素

127.0.0.1:6379> linsert numble before 2 12
(integer) 8
127.0.0.1:6379> linsert numble after 3 34
(integer) 9
127.0.0.1:6379> lrange numble 0 -1
1) "0"
2) "1"
3) "12"
4) "2"
5) "3"
6) "34"
7) "4"
8) "5"
9) "6"

10、lindex key index        通过索引获取列表中的元素

127.0.0.1:6379> lindex numble 2
"12"

11、lset key index value        通过索引设置列表元素的值

127.0.0.1:6379> lset numble 0 01
OK
127.0.0.1:6379> lrange numble 0 -1
1) "01"
2) "1"
3) "12"
4) "2"
5) "3"
6) "34"
7) "4"
8) "5"
9) "6"

12、lrem key count value        移除列表元素

127.0.0.1:6379> lrem numble 0 01
(integer) 1
127.0.0.1:6379> lrange numble 0 -1
1) "1"
2) "12"
3) "2"
4) "3"
5) "34"
6) "4"
7) "5"
8) "6"

13、ltrim key start stop 

对一个列表进行修剪,就是让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

127.0.0.1:6379> ltrim numble 1 7
OK
127.0.0.1:6379> lrange numble 0 -1
1) "12"
2) "2"
3) "3"
4) "34"
5) "4"
6) "5"
7) "6"

14、blpop key1 [key2] timeout

移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

127.0.0.1:6379> blpop name 5
(nil)
(5.02s)
127.0.0.1:6379> blpop numble 5
1) "numble"
2) "12"
127.0.0.1:6379> blpop numble 5
1) "numble"
2) "2"

如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

在实例中,操作会被阻塞,列表name不存在数据,则在等待5秒后会返回 nil 。

列表numble存在数据则会返回第一个元素

15、brpop key1 [key2 ] timeout

移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

127.0.0.1:6379> brpop name 5
(nil)
(5.07s)
127.0.0.1:6379> brpop numble 5
1) "numble"
2) "6"

16、brpoplpush source destination timeout

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可lpu弹出元素为止

127.0.0.1:6379> lpush list1 'a'
(integer) 1
127.0.0.1:6379> lpush list2 'b'
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "a"
127.0.0.1:6379> lrange list2 0 -1
1) "b"
127.0.0.1:6379> brpoplpush list1 list2 5
"a"
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
127.0.0.1:6379> lrange list1 0 -1
(empty list or set)

17、rpoplpush source destination

       移除列表的最后一个元素,并将该元素添加到另一个列表并返回

127.0.0.1:6379> rpoplpush list2 list1
"b"
127.0.0.1:6379> lrange list1 0 -1
1) "b"
127.0.0.1:6379> lrange list2 0 -1
1) "a"

三、Set

redis 的 Set 是 String 类型的无序集合。

集合中成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32^ - 1 (4294967295, 每个集合可存储40多亿个成员)。

Set类型一般用于赞、踩、标签、好友关系等。

相关命令:

1、sadd key member1 [member2]        向集合添加一个或多个成员

127.0.0.1:6379> sadd member 1 2 3 4
(integer) 4

2、smembers key        返回集合中的所有成员

127.0.0.1:6379> smembers member
1) "1"
2) "2"
3) "3"
4) "4"

3、scard key        获取集合的成员数

127.0.0.1:6379> scard member
(integer) 4

4、srandmember key [count]        返回集合中一个或多个随机数

127.0.0.1:6379> srandmember member 2
1) "3"
2) "2"
127.0.0.1:6379> srandmember member 2
1) "1"
2) "2"

5、sismember key member        判断 member 元素是否是集合 key 的成员

127.0.0.1:6379> sismember member 2
(integer) 1

返回1代表2是集合member的成员 

6、srem key member1 [member2]        移除集合中一个或多个成员

127.0.0.1:6379> srem member 3 4
(integer) 2
127.0.0.1:6379> smembers member
1) "1"
2) "2"

7、sdiff key1 [key2]        返回给定所有集合的差集

127.0.0.1:6379> sadd key1 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd key2 2 3 4 5
(integer) 4
127.0.0.1:6379> sdiff key1 key2
1) "1"
127.0.0.1:6379> sdiff key2 key1
1) "5"

8、sdiffstore destination key1 [key2]        返回给定所有集合的差集并存储在 destination 中

127.0.0.1:6379> sdiffstore key3 key1 key2
(integer) 1
127.0.0.1:6379> smembers key3
1) "1"
127.0.0.1:6379> sdiffstore key4 key2 key1
(integer) 1
127.0.0.1:6379> smembers key4
1) "5"

9、sinter key1 [key2]        返回给定所有集合的交集

127.0.0.1:6379> sinter key1 key2
1) "2"
2) "3"
3) "4"

10、sinterstore destination key1 [key2]        返回给定所有集合的交集并存储在 destination 中

127.0.0.1:6379> sinterstore member3 member member1
(integer) 2
127.0.0.1:6379> smembers member3
1) "1"
2) "2"

11、sunion key1 [key2]        返回所有给定集合的并集

127.0.0.1:6379> sunion key1 key2 key3
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

12、sunionstore destination key1 [key2]        所有给定集合的并集存储在 destination 集合中

127.0.0.1:6379> sunionstore key5 key1 key2 key3 key4
(integer) 5
127.0.0.1:6379> smembers key5
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

13、smove source destination member     将 member 元素从 source 集合移动到 destination 集合

127.0.0.1:6379> smembers key2
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> smembers key1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> smove key1 key2 "1"
(integer) 1
127.0.0.1:6379> smembers key2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> smembers key1
1) "2"
2) "3"
3) "4"

元素4 从 member2集合 移动到 member集合

14、spop key        移除并返回集合中的一个随机元素

127.0.0.1:6379> spop key2 1
1) "4"
127.0.0.1:6379> spop key2 3
1) "3"
2) "2"
3) "5"
127.0.0.1:6379> smembers key2
1) "1"

15、sscan key cursor [MATCH pattern] [COUNT count]        迭代集合中的元素

  • ==cursor==:游标

  • ==MATCH pattern==:查询 Key 的条件

  • ==Count count==:返回的条数,默认值为 10

         SCAN 是一个基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程。SCAN 以 ==0== 作为游标,开始一次新的迭代,直到命令返回游标 0 完成一次遍历。 此命令并不保证每次执行都返回某个给定数量的元素,甚至会返回 0 个元素,但只要游标不是 0,程序都不会认为 SCAN 命令结束,但是返回的元素数量大概率符合 Count 参数。另外,SCAN 支持模糊查询。

127.0.0.1:6379> sadd set1 "baidu" "baiduwangpan" "weixin" "qq" "kugou"
(integer) 5
127.0.0.1:6379> sscan set1 0 count 3
1) "0"
2) 1) "qq"2) "weixin"3) "baiduwangpan"4) "baidu"5) "kugou"
127.0.0.1:6379> sscan set1 0 match *bai* count 3
1) "0"
2) 1) "baiduwangpan"2) "baidu"

四、Zset

Redis 有序集合和集合一样也是string类型元素的集合且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^32^ - 1 (4294967295, 每个集合可存储40多亿个成员)。 

Zset类型一般用于排行榜等。

1、zadd key score1 member1 [score2 member2]

     向有序集合添加一个或多个成员,或者更新已存在成员的分数

127.0.0.1:6379> zadd set1 60 zhangsan 65 lisi 70 wangwu
(integer) 3

2、zcard key        获取有序集合的成员数

127.0.0.1:6379> zcard set1
(integer) 3

3、zcount key min max        计算在有序集合中指定区间分数的成员数

127.0.0.1:6379> zcount set1 60 66
(integer) 2

4、zincrby key increment member       有序集合中对指定成员的分数加上增量 increment

127.0.0.1:6379> zincrby set1 5 zhangsan
"65"

5、zlexcount key min max        在有序集合中计算指定字典区间内成员数量

127.0.0.1:6379> zlexcount set1 - +
(integer) 3
127.0.0.1:6379> zlexcount set1 [lisi [wangwu
(integer) 1

6、zrange key start stop [withscores]        通过索引区间返回有序集合指定区间内的成员

127.0.0.1:6379> zrange set1 1 2
1) "zhangsan"
2) "wangwu"

7、zrangebylex key min max [limit offset count]        通过字典区间返回有序集合的成员

127.0.0.1:6379> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1
(integer) 12127.0.0.1:6379> zrangebylex zset - + limit 0 3
1) "a"
2) "aa"
3) "abc"127.0.0.1:6379> zrangebylex zset [aa [dd limit 1 4
1) "abc"
2) "apple"
3) "b"
4) "c"

8、zrangebyscore key min max [withscores] [limit]        通过分数返回有序集合指定区间内的成员

127.0.0.1:6379> zrangebyscore set1 60 66
1) "lisi"
2) "zhangsan"

9、zrank key member        返回有序集合中指定成员的索引

127.0.0.1:6379> zrank set1 wangwu
(integer) 2

10、zrem key member [member ...]        移除有序集合中的一个或多个成员

127.0.0.1:6379> zrem zset d d1 dd double
(integer) 3

11、zremrangebylex key min max        移除有序集合中给定的字典区间的所有成员

127.0.0.1:6379> zremrangebylex zset [a [c
(integer) 6

12、zremrangebyrank key start stop        移除有序集合中给定的字典区间的所有成员

127.0.0.1:6379> zrangebylex zset - +
1) "dobble"
2) "z"
3) "z1"
127.0.0.1:6379> zremrangebyrank zset 0 1
(integer) 2
127.0.0.1:6379> zrangebylex zset - +
1) "z1"

13、zremrangebyscore key min max        移除有序集合中给定的分数区间的所有成员

127.0.0.1:6379> zrangebylex set1 - +
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> zremrangebyscore set1 60 70
(integer) 3
127.0.0.1:6379> zrangebylex set1 - +
(empty list or set)

14、zrevrange key start stop [withscores]

        返回有序集中指定区间内的成员,通过索引,分数从高到低

127.0.0.1:6379> zadd zset 1 a 1 aa 2 abc 3 apple 4 b 8 c 10 d 110 d1 120 dd 60 dobble 50 z 40 z1
(integer) 12
127.0.0.1:6379> zrevrange zset 10 50
1) "aa"
2) "a"

15、zrevrangebyscore key max min [withscores]

        返回有序集中指定分数区间内的成员,分数从高到低排序

127.0.0.1:6379> zrevrangebyscore zset 100 10 limit 0 3
1) "dobble"
2) "z"
3) "z1"

16、zrevrank key member        

        返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

127.0.0.1:6379> zrevrank zset d
(integer) 5

17、zscore key member        返回有序集中,成员的分数值

127.0.0.1:6379> zscore zset d
"10"

18、zinterstore destination numkeys key [key ...]

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

取zkey1 和zkey2 2个有序集合的交集 保存至有序集合zkey3(zkey3若不存在则新建,若存在则覆盖)
127.0.0.1:6379> zadd zkey1 1 one 2 two 3 three 4 foure 5 five
(integer) 5
127.0.0.1:6379> zrange zkey1 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"7) "foure"8) "4"9) "five"
10) "5"
127.0.0.1:6379> zadd zkey2 10 one 20 two 60 six 70 seven
(integer) 4
127.0.0.1:6379> zrange zkey2 0 -1 withscores
1) "one"
2) "10"
3) "two"
4) "20"
5) "six"
6) "60"
7) "seven"
8) "70"
127.0.0.1:6379> zinterstore zkey3 2 zkey1 zkey2
(integer) 2
127.0.0.1:6379> zrange zkey3 0 -1 withscores
1) "one"
2) "11"
3) "two"
4) "22"
127.0.0.1:6379>

19、zunionstore destination numkeys key [key ...]

        计算给定的一个或多个有序集的并集,并存储在新的 key 中

127.0.0.1:6379> zunionstore zkey4 1 zset
(integer) 12
127.0.0.1:6379> zrange zkey4 0 -11) "a"2) "aa"3) "abc"4) "apple"5) "b"6) "c"7) "d"8) "z1"9) "z"
10) "dobble"
11) "d1"
12) "dd"

20、 zscan key cursor [match pattern][count count]

        迭代有序集合中的元素(包括元素成员和元素分值)

127.0.0.1:6379> ZADD wsite 8 "twle.cn" 7 "www.twle.cn" 2 "baidu.com" 3 "qq.com"
(integer) 4
127.0.0.1:6379> zscan wsite 0 match "t*"
1) "0"
2) 1) "twle.cn"2) "8"

五、Hash

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

Redis 中每个 hash 可以存储 2^32^ - 1 键值对(40多亿)。

Hash类型一般用于存储用户信息、用户主页访问量、组合查询等。

相关命令:

1、hset key field value    将哈希表 key 中的字段 field 的值设为 value

127.0.0.1:6379> hset hset1 name "zhangsan" age 18
(integer) 2


2、hget key field    获取存储在哈希表中指定字段的值

127.0.0.1:6379> hget hset1 name
"zhangsan"

    
3、hgetall key        获取在哈希表中指定 key 的所有字段和值

127.0.0.1:6379> hgetall hset1
1) "name"
2) "zhangsan"
3) "age"
4) "18"

    
4、hexists key field    查看哈希表 key 中,指定的字段是否存在

    127.0.0.1:6379> hexists hset1 name(integer) 1127.0.0.1:6379> hexists hset1 address(integer) 0

 
5、hsetnx key field value    只有在字段 field 不存在时,设置哈希表字段的值

    127.0.0.1:6379> hsetnx hset1 name lisi(integer) 0127.0.0.1:6379> hsetnx hset1 address "hunan"(integer) 1127.0.0.1:6379> hgetall hset11) "name"2) "zhangsan"3) "age"4) "18"5) "address"6) "hunan"


6、hkeys key        获取所有哈希表中的字段

    127.0.0.1:6379> hkeys hset11) "name"2) "age"3) "address"


7、hvals key        获取哈希表中所有值

    127.0.0.1:6379> hvals hset11) "zhangsan"2) "18"3) "hunan"


8、hlen key        获取哈希表中字段的数量

    127.0.0.1:6379> hlen hset1(integer) 3


9、hmget key field1 [field2]    获取所有给定字段的值

    127.0.0.1:6379> hmget hset1 name age address1) "zhangsan"2) "18"3) "hunan"


10、hmset key field value1 [field2 value2]    同时将多个 field-value (域-值)对设置到哈希表 key 中

    127.0.0.1:6379> hmset hset1 name "lisi" age 19 address "hubei"OK127.0.0.1:6379> hmset hset1 gender "M" birth 2000-01-01OK127.0.0.1:6379> hgetall hset11) "name"2) "lisi"3) "age"4) "19"5) "address"6) "hubei"7) "gender"8) "M"9) "birth"10) "2000-01-01"


11、hincrby key field increment    为哈希表 key 中的指定字段的整数值加上增量 increment

    127.0.0.1:6379> hincrby hset1 age 1(integer) 20


12、hincrbyfloat key field increment    为哈希表 key 中的指定字段的浮点数值加上增量 increment

    127.0.0.1:6379> hincrbyfloat hset1 age 1"21"

13、hdel key field1 [field2]    删除一个或多个哈希表字段

127.0.0.1:6379> hdel hset1 address
(integer) 1
127.0.0.1:6379> hgetall hset1
1) "name"
2) "lisi"
3) "age"
4) "21"
5) "gender"
6) "M"
7) "birth"
8) "2000-01-01"
127.0.0.1:6379> hdel hset1 address
(integer) 0

14、hscan key cursor [MATCH pattern] [COUNT count]    迭代哈希表中的键值对

127.0.0.1:6379> hscan hset1 0 match "*th*"
1) "0"
2) 1) "birth"2) "2000-01-01"

六、Bitmaps

现代计算机用二进制(位) 作为信息的基础单位, 1个字节等于8位, 例如“abc”字符串是由3个字节组成, 但实际在计算机存储时将其用二进制表示, “abc”分别对应的ASCII码分别是97、 98、 99, 对应的二进制分别是01100001、 01100010和01100011,如下图:

 合理地使用操作位能够有效地提高内存使用率和开发效率

1)Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作。

2)Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。

1、setbit

     用于设置Bitmaps中某个偏移量的值(0或1),offset偏移量从0开始。

     setbit <key> <offset> <value>

        Redis SETBIT 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。位的设置或清除取决于 value,可以是 0 或者是 1 。

        当 key 不存在时,自动生成一个新的字符串值。字符串会进行伸展以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。offset 参数必须大于或等于 0 ,小于 2^32 (bit 被限制在 512 MB 之内)。

127.0.0.1:6379> setbit sb1 100 1
(integer) 0
127.0.0.1:6379> getbit sb1 100
(integer) 1

2、getbit

这个命令用于获取Bitmaps中某个偏移量的值。获取键的第offset位的值(从0开始算)

getbit <key> <offset>

127.0.0.1:6379> getbit sb1 100
(integer) 1


3、bitcount

这个命令用于统计字符串被设置为1的bit数。一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。start 和 end 参数的设置,都可以使用负数值:比如 -1 表示最后一个位,而 -2 表示倒数第二个位,start、end 是指bit组的字节的下标数,二者皆包含。

bitcount <key> [start end]

用于统计字符串从start字节到end字节比特值为1的数量。

127.0.0.1:6379> setbit weekwork 1 1
(integer) 0
127.0.0.1:6379> setbit weekwork 2 1
(integer) 0
127.0.0.1:6379> setbit weekwork 3 1
(integer) 0
127.0.0.1:6379> setbit weekwork 4 1
(integer) 0
127.0.0.1:6379> setbit weekwork 5 1
(integer) 0
127.0.0.1:6379> bitcount weekwork
(integer) 5


4、bitop

这个命令是一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中。

bitop and(or/not/xor) <destkey> [key…]

例如:2020-11-04 日访问网站的userid=1,2,5,9

127.0.0.1:6379> setbit unique:users:20201104 1 1
127.0.0.1:6379> setbit unique:users:20201104 2 1
127.0.0.1:6379> setbit unique:users:20201104 5 1
127.0.0.1:6379> setbit unique:users:20201104 9 1

2020-11-03 日访问网站的userid=0,1,4,9

127.0.0.1:6379> setbit unique:users:20201103 0 1
127.0.0.1:6379> setbit unique:users:20201103 1 1
127.0.0.1:6379> setbit unique:users:20201103 4 1
127.0.0.1:6379> setbit unique:users:20201103 9 1

计算出两天都访问过网站的用户数量

127.0.0.1:6379> bitop and unique:users:and:20201104_03 unique:users:20201103 unique:users:20201104127.0.0.1:6379> bitcount unique:users:and:20201104_03

计算出任意一天都访问过网站的用户数量(例如月活跃就是类似这种), 可以使用or求并集

127.0.0.1:6379> bitop or unique:users:or:20201104_03 unique:users:20201103 unique:users:20201104127.0.0.1:6379> bitcount unique:users:or:20201104_03

七、Hyperloglog

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

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

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


什么是基数?

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


1、pfadd key element [element...]        添加指定元素到 HyperLogLog 中

127.0.0.1:6379> pfadd course "redis" "mysql"
(integer) 1

2、pfcount key [ley ...]        返回给定 HyperLogLog 的基数估算值

127.0.0.1:6379> pfcount course
(integer) 2

3、pfmerge destkey sourcekey [sourcekey...]        将多个 HyperLogLog 合并为一个 HyperLogLog

127.0.0.1:6379> pfmerge new_course course courses
OK
127.0.0.1:6379> pfcount new_course
(integer) 4

将所有元素添加到指定HyperLogLog数据结构中。如果执行命令后HLL估计的近似基数发生变化,则返回1,否则返回0。

八、Gepspatial

GEO,Geographic,地理信息的缩写。

该类型,就是元素的2维坐标,在地图上就是经纬度。

redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。

相关命令:

1、geoadd key longitude latitude member [longitude latitude member...]

        添加地理位置(经度,纬度,名称)

127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing
(integer) 3

2、geopos key member [member...]         获得指定地区的坐标值

127.0.0.1:6379> geopos china:city shanghai
1) 1) "121.47000163793563843"2) "31.22999903975783553"

3、geodist key member1 member2 [m|km|ft|mi]         获取两个位置之间的直线距离

127.0.0.1:6379> geodist china:city shanghai chongqing km
"1447.6737"

单位:
        m:表示单位为米[默认值]。
        km:表示单位为千米。
        mi:表示单位为英里。
        ft:表示单位为英尺。

4、georadius key longitude latitude radius [m|km|ft|mi]

以给定的经纬度为中心,找出某一半径内的元素

例子:获取经度为 110,纬度为 30,半径为 1000KM 的所有城市。

127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "shenzhen"

有效的经度从 -180 度到 180 度。有效的纬度从 -85.05112878 度到 85.05112878 度。
当坐标位置超出指定范围时,该命令将会返回一个错误。
已经添加的数据,是无法再次往里面添加的。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/100517.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wifi高通驱动之WCNSS_qcom_cfg.ini以及MCS、空间流数的学习和记录

一、WCNSS_qcom_cfg.ini 这个文件说是可以调优wifi的带宽&#xff0c;还有MIMO技术 Android Wi-Fi MIMO/SISO设置方法&#xff08;基于高通平台&#xff09;_广凯的博客-CSDN博客 不是太了解&#xff0c;先记录一下&#xff0c;个人感觉MCS和MIMO技术最全的应该是下面的网址…

使用ChatGPT-4优化编程效率:高效查询代码示例和解决方案

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Web Components

Web Components标准非常重要的一个特性是&#xff0c;它使开发者能够将HTML页面的功能封装为custom elements&#xff08;自定义标签&#xff09;&#xff0c;可以使用CustomElementRegistry来管理自定义标签 <script>//1、创建自定义标签class NewElement extends HTML…

FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

分布式基础

1、分布式简介 1.1、分布式定义 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 1.2、分布式特点 分布性&#xff1a;分布式系统中的多台计算机都会在空间上随意分布&#xff0c;同时&#xff0c;机器…

最新ai系统ChatGPT程序源码+详细搭建教程+mj以图生图+Dall-E2绘画+支持GPT4+AI绘画+H5端+Prompt知识库

目录 一、前言 二、系统演示 三、功能模块 3.1 GPT模型提问 3.2 应用工作台 3.3 Midjourney专业绘画 3.4 mind思维导图 四、源码系统 4.1 前台演示站点 4.2 SparkAi源码下载 4.3 SparkAi系统文档 五、详细搭建教程 5.1 基础env环境配置 5.2 env.env文件配置 六、环境…

HAProxy的配置与搭建

Haproxy概念 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0c;是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大&#xff08;并发量达1w以上&#xff09;web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy的运行模式…

C++信息学奥赛1119:矩阵交换行

解题思路&#xff1a;当输出时换行 解题程序&#xff1a; #include<iostream> using namespace std; int main() {int arr[5][5];// 输入矩阵元素for(int i0;i<5;i){for(int j0;j<5;j){cin>>arr[i][j];}} int n,m;cin>>n>>m;// 根据条件进行矩…

Qt 屏幕偶发性失灵

项目场景: 基于NXP i.mx7的Qt应用层项目开发,通过goodix使用触摸屏,走i2c协议。 问题描述 触摸屏使用过程中意外卡死,现场分为多种: i2c总线传输错误,直观表现为触摸屏无效,任何与触摸屏挂接在同一总线上的i2c设备,均受到干扰,并且在传输过程中内核报错以下代码: G…

【C语言】字符串和内存函数的介绍 -- 详解

重点介绍处理字符和字符串的库函数的使用和注意事项。 C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。 一、求字符串长度⚪strlen …

每天一道leetcode:1192. 查找集群内的关键连接(图论困难tarjan算法)

今日份题目&#xff1a; 力扣数据中心有 n 台服务器&#xff0c;分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群&#xff0c;连接是无向的。用 connections 表示集群网络&#xff0c;connections[i] [a, b] 表示服务器 a …

编写接口文档示例:从零开始,轻松掌握关键技巧

接口文档的编写是软件开发中至关重要的一环&#xff0c;本文将详细介绍如何编写接口文档示例&#xff0c;为您揭示从基础知识到高级技巧的全过程。通过实用的指导和比喻&#xff0c;让您轻松掌握编写接口文档示例的艺术。 在现代软件开发中&#xff0c;编写接口文档示例是确保项…

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存

知识点1: 掘金1&#xff1a;浏览器缓存 掘金2 :浏览器缓存 一、浏览器缓存 请求&#xff08;静态资源 &#xff5c; 动态资源&#xff09; 一、缓存是什么&#xff1f; 如果没有缓存的机制 每次都要重新请求静态资源 1.从网络上的下载时间&#xff0c;肯定大于从硬盘里读的…

轻松学会WiFi模块(ESP8266)—基于STM32,学到就是赚到!

目录 前言 一、ESP8266介绍 二、如何实现WiFi传输&#xff1f;代码详解附上 三、结果实现流程与展示 四、总结 题外话&#xff1a; 前言 哎哎哎&#xff0c;发觉好久没有更新博客了&#xff0c;最近一直事情比较多&#xff0c;也没什么时间注意博客&#xff0c;不过接下…

开源全球地理空间数据可视化框架——Cesium学习(2023.8.21)

Cesium学习 2023.8.21 1、Cesium简介1.1 Github上的Cesium 2、Cesium下载安装使用2.1 方式一&#xff1a;页面在线引用2.2 方式二&#xff1a;页面离线使用2.3 方式三&#xff1a;完整项目使用 3、CesiumJS学习教程&#xff08;快速上手 API文档&#xff09;3、Cesium官方示例…

java excel导出 本地运行数据正常 docker或者服务器导出数据为空 已解决

加上这个 response.addHeader("Content-Type","application/octet-stream;charsetutf-8"); 如图

认识这对搭档,解决 90% 的查询问题

在excel里&#xff0c;对于“查找”的实现&#xff0c;vlookup绝对是使用得最为频繁的一个函数。 但是&#xff0c;遇到下面问题&#xff0c;vlookup就没用了。 下面的表格记录了员工的信息&#xff0c;现在想通过“姓名”查找对应的“工号”。如图所示&#xff0c;通过输入不同…

opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()

人脸识别是指程序对输入的人脸图像进行判断&#xff0c;并识别出其对应的人的过程。人脸识别程 序像我们人类一样&#xff0c;“看到”一张人脸后就能够分辨出这个人是家人、朋友还是明星。 当然&#xff0c;要实现人脸识别&#xff0c;首先要判断当前图像内是否出现了人脸&…

Databend 开源周报第 107 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 理解连接参数 …

Linux知识点 -- Linux多线程(二)

Linux知识点 – Linux多线程&#xff08;二&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;二&#xff09;一、线程互斥1.背景概念2.多线程访问同一个全局变量3.加锁保护4.问题5.锁的实现 二、线程安全1.可重入与线程安全2.常见情况3.可重入与线程安全的联系 三…