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.mzph.cn/news/47271.shtml

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

相关文章

微信小程序使用云存储和Markdown开发页面

最近想在一个小程序里加入一个使用指南的页面&#xff0c;考虑到数据存储和减少页面的开发工作量&#xff0c;决定尝试在云存储里上传Markdown文件&#xff0c;微信小程序端负责解析和渲染。小程序端使用到一个库Towxml。 Towxml Towxml是一个可将HTML、Markdown转为微信小程…

一体全栈、开箱即用!麒麟信安与灵雀云携手打造“操作系统+云平台”联合解决方案

近日麒麟信安与北京凌云雀科技有限公司&#xff08;以下简称“灵雀云”&#xff09;开展生态合作&#xff0c;共同完成了灵雀云企业级全栈云原生平台ACPV3与麒麟信安操作系统V3等系列产品的兼容性认证测试。基于双方产品兼容性良好、稳定运行、性能表现卓越&#xff0c;麒麟信安…

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…

PHP自己的框架实现操作成功失败跳转(完善篇四)

1、实现效果&#xff0c;操作成功后失败成功自动跳转 2、创建操作成功失败跳转方法CrlBase.php /**成功后跳转*跳转地址$url* 跳转显示信息$msg* 等待时间$wait* 是否自动跳转$jump*/protected function ok($urlNULL,$msg操作成功,$wait3,$jump1){$code1;include KJ_CORE./tp…

【快速解决方案】浏览器的安全策略不允许通过 file:// 协议直接加载外部文件(最省事的方法)

目录 问题摘要 解决办法 检验结果 问题摘要 Failed to load resource: net::ERR_FILE_NOT_FOUND&#x1f308; Cute Code Editor &#x1f308;.html:162 Fetch API cannot load file:///D:/%E6%A1%8C%E9%9D%A2/%E4%B8%83%E5%A4%95%E5%BF%AB%E4%B9%90/index.txt. URL scheme …

Spring Boot

前言 什么是Spring Boot&#xff1f;为什么要学Spring Boot&#xff1f; Spring 的诞⽣是为了简化Java 程序的开发的&#xff0c;⽽Spring Boot 的诞⽣是为了简化Spring 程序开发 的。Spring就像汽车&#xff0c;相比以前人只能其自行车走路&#xff0c;汽车可以帮助人们更快…

C# WPF ListBox 动态显示图片

前言 最近在和其他软件联合做一个本地图片选择传输功能&#xff0c;为此希望图片能够有序的呈现在客户端&#xff0c;简单的实现了一下功能&#xff0c;通过Mvvm模式进行呈现&#xff0c;过程简单通俗&#xff0c;话不多说直接上图。 处理过程 前台代码 你只需要粘贴到你的前台…

生物识别技术与身份认证:探讨生物识别技术在强化身份认证和访问控制方面的应用

第一章&#xff1a;引言 在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;身份认证和访问控制变得越来越重要。传统的用户名和密码方式逐渐暴露出安全性不足的问题&#xff0c;为此&#xff0c;生物识别技术应运而生。生物识别技术利用人体生物特征来识别个体身份…

第9步---MySQL的索引和存储引擎

第9步---MySQL的索引和存储引擎 1.索引 1.1分类 索引可以快速的找出具有特定值的行。不用从头开始进行寻找了。 类别 hash和btree hash 根据字段值生生成一个hash的值 快速的进行定位到对应的行的值 可能会出现相同的值&#xff0c;找到对应的空间会出现对应的值 btree树…

LTMC S/4HANA 2022 – 迁移您的数据

翻译一篇&#xff0c;估计很少人用过这个LTMC功能&#xff0c;更不用说&#xff0c;LTMOM了。一个还没开始用已经被弃用的事务代码&#xff1a; 在这篇博文中&#xff0c;我将解释如何在 S/4HANA 2022 版本中通过“迁移您的数据”应用程序逐步执行数据迁移。如您所知&#xff0…

5.7.webrtc线程的启动与运行

那在上一节课中呢&#xff1f;我向你介绍了web rtc的三大线程&#xff0c;包括了信令线程&#xff0c;工作线程以及网络线程。那同时呢&#xff0c;我们知道了web rtc 3大线程创建的位置以及运行的时机。 对吧&#xff0c;那么今天呢&#xff1f;我们再继续深入了解一下&#…

Redis分布式缓存

分布式缓存 -- 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化 AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#x…

Certify The Web (IIS)

一、简介 Certify The Web 适用于 Windows的SSL 证书管理器用户界面&#xff0c;与所有 ACME v2 CA 兼容&#xff0c;为您的 IIS/Windows 服务器轻松地安装和自动更新来自 Letencrypt.org 和其他 ACME 证书授权机构的免费 SSL/TLS 证书&#xff0c;设置 https 从未如此简单。 …

JSON的处理

1、JSON JSON(JavaScript Object Notation)&#xff1a;是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写&#…

[PyTorch][chapter 49][创建自己的数据集 1]

前言&#xff1a; 后面几章主要利用DataSet 创建自己的数据集&#xff0c;实现建模&#xff0c; 训练&#xff0c;迁移等功能。 目录: pokemon 数据集深度学习工程步骤 一 pokemon 数据集介绍 1.1 pokemon: 数据集地址&#xff1a; 百度网盘路径: https://pan.baidu.com/s/1…

二、8.系统调用、可变参数和堆内存管理

系统调用&#xff1a;让用户进程申请操作系统的帮助 一个系统功能调用分为两部分&#xff0c; 一部分是暴露给用户进程的接口函数&#xff0c;它属于用户空间&#xff0c;此部分只是用户进程使用系统调用的途径&#xff0c;只负责发需求。另一部分是与之对应的内核具体实现&am…

C++day1(笔记整理)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.第一个c程序&#xff1a;hello world #include <iostream> //#:预处理标识符 //<iostream>:输入输出流类所在的头文件 //istream:输入流类 //ostream:输出流类using namespace std; //std&#x…

Goland 注释时自动在注释符号后添加空格

不得不说 JetBrains 旗下的 IDE 都好用&#xff0c;而且对于注释这块&#xff0c;使用 Ctrl / 进行注释的时候&#xff0c;大多会在每个注释符号后统一添加一个空格&#xff0c;比如 PyCharm 和 RubeMine 等。 # PyCharm # print("hello world") # RubyMine # req…

从Web 2.0到Web 3.0,互联网有哪些变革?

文章目录 Web 2.0时代&#xff1a;用户参与和社交互动Web 3.0时代&#xff1a;语义化和智能化影响和展望 &#x1f389;欢迎来到Java学习路线专栏~从Web 2.0到Web 3.0&#xff0c;互联网有哪些变革&#xff1f; ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#x…

易思智能物流无人值守系统文件上传漏洞复现

0x01 产品简介 易思无人值守智能物流系统是一款集成了人工智能、机器人技术和物联网技术的创新产品。它能够自主完成货物存储、检索、分拣、装载以及配送等物流作业&#xff0c;帮助企业实现无人值守的智能物流运营&#xff0c;提高效率、降低成本&#xff0c;为现代物流行业带…