REDIS数据库数据类型的基本操作

目录

1:redis数据类型的基本操作

1.1String:String类型一般用于缓存、限流、计数器、分布式锁、分布式Session。

1.1.1示例演示

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

1.2.1示例演示

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

1.3.1示例演示

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

1.4.1示例演示

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

1.5.1:示例演示

1.6:Bitmaps

1.6.1、setbit

1.6.2、getbit

1.6.3、bitcount

1.6.4、bitop

1.7:HyperLogLog

1.7.1示例演示

1.8:Geospatial

1.8.1示例演示


1:redis数据类型的基本操作

1.1String:String类型一般用于缓存、限流、计数器、分布式锁、分布式Session。

相关命令

序号 命令语法 描述
1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值
3 GETRANGE key start end 返回 key 中字符串值的子字符,end=-1时表示全部
4 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)
6 MSET key value [key value ...] 同时设置一个或多个 key-value 对
7 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值
8 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
9 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
10 SETNX key value 只有在 key 不存在时设置 key 的值
11 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
12 STRLEN key 返回 key 所储存的字符串值的长度
13 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
14 PSETEX key milliseconds value 与 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间
15 INCR key 将 key 中储存的数字值增一
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment)
17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment)
18 DECR key 将 key 中储存的数字值减一
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement)
20 APPEND key value 如果 key 已经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值 value 的末尾
1.1.1示例演示
127.0.0.1:6379> set name redis    #创建key与values
OK


127.0.0.1:6379> get name    #获取key的values
"redis"


127.0.0.1:6379> getrange name 0 4    #取0-4的字符
"redis"


127.0.0.1:6379> setbit bit 2 0  #把第二个位上的值设置成0
(integer) 1


127.0.0.1:6379> getbit bit 2    #获取第二个位上的值
(integer) 0


127.0.0.1:6379> mset key1 "Hello" key2 "World"    #同时设置一个或多个key与values
OK


127.0.0.1:6379> mget key1 key2    #同时获取多个key的values
1) "Hello"
2) "World"


127.0.0.1:6379> getset key1 "你好"    #将给定 key 的值设为 value ,并返回 key 的旧值
"Hello"


127.0.0.1:6379> setex key2 10 "world"  #将值 value 关联到 key ,并将 key 的过期时间设为10秒
OK
127.0.0.1:6379> get key2    #10秒后values消失
(nil)


127.0.0.1:6379> setnx key3 good    #只有在 key 不存在时设置 key 的值
(integer) 1
127.0.0.1:6379> get key3
"good"


127.0.0.1:6379> setrange key3 0 yes    #从第0位覆盖原来的值
(integer) 4
127.0.0.1:6379> get key3
"yesd"


127.0.0.1:6379> strlen key3    #返回 key 所储存的字符串值的长度
(integer) 4


127.0.0.1:6379> msetnx key4 one key5 two key6 thire    
(integer) 1        #同时设置一个或多个 key-value 对,当且仅当所有给定key都不存在


127.0.0.1:6379> psetex key4 1000 one    #与SETEX命令相似,但它以毫秒为单位设置key的生存时间
OK
127.0.0.1:6379> get key4
(nil)


127.0.0.1:6379> set key7 8    #将 key 中储存的数字值增一
OK
127.0.0.1:6379> incr key7
(integer) 9
127.0.0.1:6379> get key7
"9"
127.0.0.1:6379> 


127.0.0.1:6379> incrbyfloat key7 3    #将 key 所储存的值加上给定的增量值(increment)
"12"


127.0.0.1:6379> set key8 6.66    #将 key 所储存的值加上给定的浮点增量值(increment)
OK
127.0.0.1:6379> incrbyfloat key8 2.22
"8.88"


127.0.0.1:6379> decr key7     #将 key 中储存的数字值减一
(integer) 11


127.0.0.1:6379> decrby key7 2    #将key中储存的数字减去指定的数值
(integer) 9


127.0.0.1:6379> set key9 good
OK
127.0.0.1:6379> append key9 afternoon    #如果key已经存在并且是一个字符串,APPEND命令将指定
(integer) 13                              的value追加到该key原来值value的末尾                             
127.0.0.1:6379> get key9
"goodafternoon"
1.2 List:List类型一般用于关注人、简单队列等。

相关命令

序号 命令语法 描述
1 LPUSH key value1 [value2] 将一个或多个值插入到列表头部
2 LPOP key 移出并获取列表的第一个元素
3 LRANGE key start stop 获取列表指定范围内的元素
4 LPUSHX key value 将一个值插入到已存在的列表头部
5 RPUSH key value1 [value2] 在列表中添加一个或多个值
6 RPOP key 移除列表的最后一个元素,返回值为移除的元素
7 RPUSHX key value 为已存在的列表添加值
8 LLEN key 获取列表长度
9 LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素
10 LINDEX key index 通过索引获取列表中的元素
11 LSET key index value 通过索引设置列表元素的值
12 LREM key count value 移除列表元素
13 LTRIM key start stop 对一个列表进行修剪,就是让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
14 BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
15 BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
16 BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可lpu弹出元素为止
17 RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
1.2.1示例演示
127.0.0.1:6379> get mykey1
(nil)
127.0.0.1:6379> lpush mykey1 5 6 7    #将一个或多个值插入到列表头部
(integer) 3
127.0.0.1:6379> lrange mykey1 0 2
1) "7"
2) "6"
3) "5"

127.0.0.1:6379> lpop mykey1    #移出并获取列表的第一个元素
"7"


127.0.0.1:6379> lrange mykey1 0 1    #获取列表指定范围内的元素
1) "6"
2) "5"


127.0.0.1:6379> lpushx mykey1 8    #将一个值插入到已存在的列表头部
(integer) 3
127.0.0.1:6379> lrange mykey1 0 2    
1) "8"
2) "6"
3) "5"




127.0.0.1:6379> rpush mykey1 1 2 3    #在列表中添加一个或多个值
(integer) 6
127.0.0.1:6379> lrange mykey1 0 6
1) "8"
2) "6"
3) "5"
4) "1"
5) "2"
6) "3"


127.0.0.1:6379> rpop mykey1    #移除列表的最后一个元素,返回值为移除的元素
"3"


127.0.0.1:6379> lrange mykey1 0 7    #为已存在的列表添加值(列表末尾添加)
1) "8"
2) "6"
3) "5"
4) "1"
5) "2"
6) "9"


127.0.0.1:6379> linsert mykey1 before 1 4    #在列表的元素前插入元素
(integer) 7
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "6"
3) "5"
4) "4"
5) "1"
6) "2"
7) "9"
127.0.0.1:6379> linsert mykey1 after 1 3    #在列表的元素后插入元素
(integer) 8
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "6"
3) "5"
4) "4"
5) "1"
6) "3"
7) "2"
8) "9"


127.0.0.1:6379> llen mykey1    #获取列表长度
(integer) 6


127.0.0.1:6379> lindex mykey1 3    #通过索引获取列表中的元素
"4"


127.0.0.1:6379> lset mykey1 2 6    #通过索引设置列表元素的值
OK
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "6"
3) "6"
4) "1"
5) "3"
6) "2"
7) "9"


127.0.0.1:6379> lrem mykey1 2 6    #移除列表元素
(integer) 2
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "1"
3) "3"
4) "2"
5) "9"


127.0.0.1:6379> ltrim mykey1 2 4    #对一个列表进行修剪,就是让列表只保留指定区间内的元素,
OK                                   不在指定区间之内的元素都将被删除
127.0.0.1:6379> lrange mykey1 0 8
1) "3"
2) "2"
3) "9"


127.0.0.1:6379> blpop mykey1 5    #移出并获取列表的第一个元素
1) "mykey1"
2) "3"
127.0.0.1:6379> blpop mykey2 5    #如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为
(nil)                              止
(5.07s)


127.0.0.1:6379> brpop mykey1 5    #移出并获取列表的最后一个元素
1) "mykey1"
2) "9"
127.0.0.1:6379> brpop mykey2 5    #如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为
(nil)                              止
(5.04s)


127.0.0.1:6379> brpoplpush mykey1 mykey2 5    #从列表中弹出一个值,将弹出的元素插入到另外一
"2"                                            个列表中并返回它;
127.0.0.1:6379> llen mykey1    #查看key的长度确认为0
(integer) 0
127.0.0.1:6379> brpoplpush mykey1 mykey2 5    #如果列表没有元素会阻塞列表直到等待超时或发现
(nil)                                          可lpu弹出元素为止
(5.07s)


127.0.0.1:6379> rpoplpush mykey1 mykey2     #移除列表的最后一个元素,并将该元素添加到另一个
"1"                                          列表并返回
1.3 Set:Set类型一般用于赞、踩、标签、好友关系等。

相关命令

序号 命令语法 描述
1 SADD key member1 [member2] 向集合添加一个或多个成员
2 SMEMBERS key 返回集合中的所有成员
3 SCARD key 获取集合的成员数
4 SRANDMEMBER key [count] 返回集合中一个或多个随机数
5 SISMEMBER key member 判断 member 元素是否是集合 key 的成员
6 SREM key member1 [member2] 移除集合中一个或多个成员
7 SDIFF key1 [key2] 返回给定所有集合的差集
8 SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
9 SINTER key1 [key2] 返回给定所有集合的交集
10 SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
11 SUNION key1 [key2] 返回所有给定集合的并集
12 SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
13 SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
14 SPOP key 移除并返回集合中的一个随机元素
15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素
1.3.1示例演示
127.0.0.1:6379> sadd scond hello world    #向集合添加一个或多个成员
(integer) 2


127.0.0.1:6379> smembers scond    #返回集合中的所有成员
1) "world"
2) "hello"


127.0.0.1:6379> scard scond    #获取集合的成员数
(integer) 2


127.0.0.1:6379> srandmember scond 2    #返回集合中一个或多个随机数
1) "world"
2) "hello"


127.0.0.1:6379> sismember scond member    #判断 member hello 元素是否是集合 key 的成员
(integer) 0                                若是返回1不是返回0
127.0.0.1:6379> sismember scond hello
(integer) 1


127.0.0.1:6379> srem scond hello    #移除集合中一个或多个成员
(integer) 1
127.0.0.1:6379> smembers scond    #返回集合中的所有成员
1) "world"


127.0.0.1:6379> smembers scond    #返回scond集合所有成员
1) "one"
2) "world"
3) "good"
4) "hello"
5) "two"
127.0.0.1:6379> smembers third    #返回third集合所有成员
1) "four"
2) "one"
3) "two"
4) "thire"
127.0.0.1:6379> sdiff scond third    #返回给定所有集合的差集
1) "world"
2) "hello"
3) "good"


127.0.0.1:6379> sdiffstore redis scond third    ##返回给定所有集合的差集并存储在 redis 中
(integer) 3
127.0.0.1:6379> smembers redis    #返回redis的所有成员
1) "world"
2) "hello"
3) "good"


127.0.0.1:6379> sinter scond third    #返回给定所有集合的交集
1) "one"
2) "two"


127.0.0.1:6379> sinterstore redis1 scond third    #返回给定所有集合的交集并存储在redis中
(integer) 2
127.0.0.1:6379> smembers redis1    #返回redis所有成员
1) "one"
2) "two"


127.0.0.1:6379> sunion scond third    #返回所有给定集合的并集
1) "two"
2) "thire"
3) "four"
4) "world"
5) "one"
6) "good"
7) "hello"


127.0.0.1:6379> sunionstore redis2 scond third    #所有给定集合的并集存储在redis2集合中
(integer) 7
127.0.0.1:6379> smembers redis2    #返回redis2中所有成员
1) "two"
2) "thire"
3) "four"
4) "world"
5) "one"
6) "good"
7) "hello"


127.0.0.1:6379> smove scond third good    #将good元素从scond集合移动到third集合
(integer) 1
127.0.0.1:6379> smembers third    #返回third集合中所有成员查看是否有good这个成员
1) "four"
2) "one"
3) "two"
4) "thire"
5) "good"


127.0.0.1:6379> spop scond    #移除并返回集合中的一个随机元素
"one"


127.0.0.1:6379> sscan redis2 0 match t* count 3    #迭代集合中的元素
1) "1"
2) 1) "two"
127.0.0.1:6379> sscan redis2 1 match t* count 3
1) "7"
2) 1) "thire"
127.0.0.1:6379> sscan redis2 7 match t* count 3
1) "0"
2) (empty array)
1.4 Zset:Zset类型一般用于排行榜等。

相关命令

序号 命令语法 描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 获取有序集合的成员数
3 ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4 ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
5 ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
6 ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
7 ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员
8 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
9 ZRANK key member 返回有序集合中指定成员的索引
10 ZREM key member [member ...] 移除有序集合中的一个或多个成员
11 ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
12 ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员
13 ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员
14 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
15 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
16 ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
17 ZSCORE key member 返回有序集中,成员的分数值
18 ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
19 ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)
1.4.1示例演示
127.0.0.1:6379> zadd course 1 one    #向有序集合添加一个或多个成员,或者更新已存在成员的分数
(integer) 1
127.0.0.1:6379> zadd course 2 two
(integer) 1
127.0.0.1:6379> zadd course 3 thire
(integer) 1
127.0.0.1:6379> zadd course 4 four
(integer) 1


127.0.0.1:6379> zcard course    #获取有序集合的成员数
(integer) 4


127.0.0.1:6379> zcount course 1 4    #计算在有序集合中指定区间分数的成员数
(integer) 4


127.0.0.1:6379> zincrby course 5 two    #有序集合中对指定成员的分数加上增量 
"7"


127.0.0.1:6379> zlexcount course [one [four    #在有序集合中计算指定字典区间内成员数量
(integer) 0


127.0.0.1:6379> zrange course 0 10 withscores    #通过索引区间返回有序集合指定区间内的成员
1) "one"
2) "1"
3) "thire"
4) "3"
5) "four"
6) "4"
7) "two"
8) "7"


127.0.0.1:6379> zrangebylex course [o [z    #通过字典区间返回有序集合的成员
1) "one"
2) "thire"
3) "four"
4) "two"


127.0.0.1:6379> zrangebyscore course 1 7    #通过分数返回有序集合指定区间内的成员
1) "one"
2) "thire"
3) "four"
4) "two"


127.0.0.1:6379> zrank course two    #返回有序集合中指定成员的索引
(integer) 3


127.0.0.1:6379> zrem course two    #移除有序集合中的一个或多个成员
(integer) 1


127.0.0.1:6379> zremrangebylex course [a [z    #移除有序集合中给定的字典区间的所有成员
(integer) 3


127.0.0.1:6379> zremrangebyrank course 0 2    #移除有序集合中给定的排名区间的所有成员
(integer) 3


127.0.0.1:6379> zremrangebyscore course 1 3    #移除有序集合中给定的分数区间的所有成员
(integer) 3


127.0.0.1:6379> zrevrange course 0 4    #返回有序集中指定区间内的成员,通过索引,分数从高到
1) "four"                                低
2) "thire"
3) "two"
4) "one"


127.0.0.1:6379> zrevrangebyscore course 4 1     #返回有序集中指定分数区间内的成员,分数从高
1) "four"                                        到低排序
2) "thire"
3) "two"
4) "one"


127.0.0.1:6379> zrevrank course two    #返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
(integer) 2


127.0.0.1:6379> zscore course thire    #返回有序集中,成员的分数值
"3"


127.0.0.1:6379> zinterstore class 2 course stud    #计算给定的一个或多个有序集的交集并将结
(integer) 2                                         果集存储在新的有序集合class中


127.0.0.1:6379> zunionstore address 2 course ip    #计算给定的一个或多个有序集的并集,并存
(integer) 6                                         储在新的 key 中


127.0.0.1:6379> zscan address 0 match f* count 2    #迭代有序集合中的元素(包括元素成员和元
1) "0"                                               素分值)
2) 1) "four"
   2) "4"
   3) "five"
   4) "5"
1.5 Hasn:Hash类型一般用于存储用户信息、用户主页访问量、组合查询等。

相关命令

序号 命令语法 描述
1 HSET key field value 将哈希表 key 中的字段 field 的值设为 value
2 HGET key field 获取存储在哈希表中指定字段的值
3 HGETALL key 获取在哈希表中指定 key 的所有字段和值
4 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
5 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值
6 HKEYS key 获取所有哈希表中的字段
7 HVALS key 获取哈希表中所有值
8 HLEN key 获取哈希表中字段的数量
9 HMGET key field1 [field2] 获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2] 同时将多个 field-value (域-值)对设置到哈希表 key 中
11 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
12 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment
13 HDEL key field1 [field2] 删除一个或多个哈希表字段
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对
1.5.1:示例演示
127.0.0.1:6379> hset myhash field1 "zhangsan"    #将哈希表 key 中的字段 field 的值设为 value
(integer) 1


127.0.0.1:6379> hget myhash field1    #获取存储在哈希表中指定字段的值
"zhangsan"


127.0.0.1:6379> hgetall myhash    #获取在哈希表中指定 key 的所有字段和值
1) "field1"
2) "zhangsan"


127.0.0.1:6379> hexists myhash field2    #查看哈希表 key 中,指定的字段是否存在,若不存在则
(integer) 0                               返回0,若存在则返回1
127.0.0.1:6379> hexists myhash field1
(integer) 1


127.0.0.1:6379> hsetnx myhash field2 "lisi"    #只有在字段field不存在时,设置哈希表字段的值
(integer) 1


127.0.0.1:6379> hgetall myhash    #获取所有哈希表中的字段
1) "field1"
2) "zhangsan"
3) "field2"
4) "lisi"


127.0.0.1:6379> hvals myhash    #获取哈希表中所有值
1) "zhangsan"
2) "lisi"


127.0.0.1:6379> hlen myhash    #获取哈希表中字段的数量
(integer) 2


127.0.0.1:6379> hmget myhash field1 field2    #获取所有给定字段的值
1) "zhangsan"
2) "lisi"


127.0.0.1:6379> hmset myhash field3 "wangwu" field4 "laoliu" field5 "fanqi"   
OK                                   #同时将多个 field-value (域-值)对设置到哈希表 key 中


127.0.0.1:6379> hmset myhash field6 66    #将数值放入myhash表中
OK
127.0.0.1:6379> hincrby myhash field6 11    #为哈希表 key 中的指定字段的整数值加上增量11 
(integer) 77                                 


127.0.0.1:6379> hmset myhash field7 8.8    #将浮点数放入myhash表中
OK
127.0.0.1:6379> hincrbyfloat myhash field7 1.1    #为哈希表 key 中的指定字段的浮点数值加上
"9.9"                                              增量 increment


127.0.0.1:6379> hdel myhash field1 field2    #删除一个或多个哈希表字段
(integer) 2
1.6:Bitmaps

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

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

相关命令

1.6.1、setbit

这个命令用于设置Bitmaps中某个偏移量的值(0或1),offset偏移量从0开始。格式如下:

setbit   

例如,把每个独立用户是否访问过网站存放在Bitmaps中, 将访问的用户记做1,没有访问的用户记做0,用偏移量作为用户的id。

下面示例是代表 2022-07-18 这天的独立访问用户的Bitmaps:

127.0.0.1:6379> setbit unique:users:20220718 1 1
​
127.0.0.1:6379> setbit unique:users:20220718 6 1
​
127.0.0.1:6379> setbit unique:users:20220718 11 1
​
127.0.0.1:6379> setbit unique:users:20220718 15 1
​
127.0.0.1:6379> setbit unique:users:20220718 19 1

注意:

很多应用的用户id以一个指定数字(例如10000) 开头, 直接将用户id和Bitmaps的偏移量对应势必会造成一定的浪费, 通常的做法是每次做setbit操作时将用户id减去这个指定数字。

在第一次初始化Bitmaps时, 假如偏移量非常大, 那么整个初始化过程执行会比较慢, 可能会造成Redis的阻塞。

1.6.2、getbit

这个命令用于获取Bitmaps中某个偏移量的值。格式为:

getbit  

获取键的第offset位的值(从0开始算)。例如获取id=6的用户是否在2022-07-18这天访问过, 返回0说明没有访问过:

127.0.0.1:6379> getbit unique:users:20220718 6
127.0.0.1:6379> getbit unique:users:20220718 7
1.6.3、bitcount

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

bitcount  [start end]

用于统计字符串从start字节到end字节比特值为1的数量。例如,统计id在第1个字节到第3个字节之间的独立访问用户数, 对应的用户id是11, 15, 19。

127.0.0.1:6379> bitcount unique:users:20220718 1 3
1.6.4、bitop

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

bitop and(or/not/xor)  [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:20201104
​
127.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:20201104
​
127.0.0.1:6379> bitcount unique:users:or:20201104_03
1.7:HyperLogLog

简介:

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

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

相关命令

序号 命令语法 描述
1 PFADD key element [element ...] 添加指定元素到 HyperLogLog 中
2 PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值
3 PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog
1.7.1示例演示
127.0.0.1:6379> pfadd hyper "lisi" 1 3 2 2 5 5 "lisi"    #添加指定元素到 HyperLogLog 中
(integer) 1


127.0.0.1:6379> pfcount hyper    #返回给定 HyperLogLog 的基数估算值
(integer) 5


127.0.0.1:6379> pfmerge hyper2 hyper hyper1    #将多个 HyperLogLog 合并为一个 HyperLogLog
OK
1.8:Geospatial

简介:

Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。

相关命令

序号 命令语法 描述
1 geoadd key longitude latitude member [longitude latitude member...] 添加地理位置(经度,纬度,名称)
2 geopos key member [member...] 获得指定地区的坐标值
3 geodist key member1 member2 [m|km|ft|mi] 获取两个位置之间的直线距离
4 georadius key longitude latitude radius [m|km|ft|mi] 以给定的经纬度为中心,找出某一半径内的元素
1.8.1示例演示
127.0.0.1:6379> geoadd geokey 108 54 xian 115 39 beijing    #添加地理位置(经度,纬度,名称)
(integer) 2


127.0.0.1:6379> geopos geokey xian beijing    #获得指定地区的坐标值
1) 1) "108.00000160932540894"
   2) "53.99999994301438733"
2) 1) "114.99999850988388062"
   2) "38.99999918434559731

127.0.0.1:6379> geodist geokey xian beijing    #获取两个位置之间的直线距离
"1750270.8614"


127.0.0.1:6379> georadius geokey 110 30 1000 km    #以给定的经纬度为中心,找出某一半径内的元
(empty array)                                       素


 

你可能感兴趣的:(数据库,数据库,redis,mybatis)