一 各种数据类型介绍
1.1 概述10大数据类型
2.总结汇总
1.2 String类型
1.2.1 基本操作
1.基本操作,设置,读取
127.0.0.1:6379> set sk1 hello
OK
127.0.0.1:6379> get sk1
"hello"
2.多个字符串设置,读取
127.0.0.1:6379> mset sk2 hello sk3 world
OK
127.0.0.1:6379> mget sk1 sk2
1) "hello"
2) "hello"
127.0.0.1:6379> mget sk1 sk2 sk3
1) "hello"
2) "hello"
3) "world"
127.0.0.1:6379> set sk4 555 nx
OK
127.0.0.1:6379> incr sk4
(integer) 556
1.2.2 分布式锁
set sk5 666; expire sk5 10 ======》设置成原子操作 setex sk5 10 666
将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
好像没有setnx命令。
127.0.0.1:6379> set sk5 666
OK
127.0.0.1:6379> expire sk5 10
(integer) 1
127.0.0.1:6379> ttl sk5
(integer) 4
127.0.0.1:6379> ttl sk5
(integer) 0
127.0.0.1:6379> setnx sk7 20 777
(error) ERR wrong number of arguments for 'setnx' command
127.0.0.1:6379> setex sk7 20 777
OK
127.0.0.1:6379> ttl sk7
(integer) 14
127.0.0.1:6379> ttl sk7
(integer) 12
127.0.0.1:6379>
1.3 list类型
1.3.1 list的存储遍历
使用lpush命令进行存储,在队列存储的结构为:
lpush sklist1 12 23, 45 67 12 34
使用lpush 等命令
127.0.0.1:6379> lpush sklist1 12 23 45 67 12 34
(integer) 6
127.0.0.1:6379> lrange sklist1 0 -1
1) "34"
2) "12"
3) "67"
4) "45"
5) "23"
6) "12"
127.0.0.1:6379> rpush sklist2 5 6 8 91 3 2
(integer) 6
127.0.0.1:6379> lrange sklist2 0 2
1) "5"
2) "6"
3) "8"
1.3.2 pop操作
rpoplpush sklist1 sklist2 : 从右边将sklist1 的元素 弹出 放到 sklist2 集合中
127.0.0.1:6379> rpoplpush sklist1 sklist2
"12"
127.0.0.1:6379> lrange sklist1 0 -1
1) "34"
2) "12"
3) "67"
4) "45"
5) "23"
127.0.0.1:6379> lrange sklist2 0 -1
1) "12"
2) "5"
3) "6"
4) "8"
5) "91"
6) "3"
7) "2"
127.0.0.1:6379>
1.4 Hash类型
127.0.0.1:6379> hset hk1 id 11 name 23
(integer) 2
127.0.0.1:6379> hget hk1 id
"11"
127.0.0.1:6379> hget hk1 name
"23"
127.0.0.1:6379>
1.5 set类型
功能:具有去重,统计,交并查功能
1.5.1 基本操作
1.新增,查看,统计,删除
##新增
sadd sk1 111 222 333 5 6 8
##遍历
smembers sk1
###统计
scard sk1
##删除
srem sk1 5
127.0.0.1:6379> sadd sk1 111 222 333 5 6 8
(integer) 6
127.0.0.1:6379> keys *
1) "k1"
2) "sk1"
127.0.0.1:6379> smembers sk1
1) "5"
2) "6"
3) "8"
4) "111"
5) "222"
6) "333"
127.0.0.1:6379> scard sk1
(integer) 6
127.0.0.1:6379> srem sk1 5
(integer) 1
127.0.0.1:6379> smembers sk1
1) "6"
2) "8"
3) "111"
4) "222"
5) "333"
127.0.0.1:6379> scard sk1
(integer) 5
2.随机选取
srangdmember 随机选取,不删除; spop 随机选取,删除。
127.0.0.1:6379> srandmember sk1 2
1) "222"
2) "333"
127.0.0.1:6379> srandmember sk1 2
1) "8"
2) "6"
127.0.0.1:6379> spop sk1 1
1) "111"
127.0.0.1:6379> smembers sk1
1) "6"
2) "8"
3) "222"
4) "333"
3.交,并,差
###交,并,差
sadd sk2 3 4 5 7 8 9
#差
sdiff sk1 sk2
#并
sunion sk1 sk2
#交集
sinter sk1 sk2
#交集个数 ,2 指的是,后面的key的个数,后面n个key,这里就写n
sintercard 2 sk1 sk2
127.0.0.1:6379> sadd sk2 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> sdiff sk1 sk2
1) "222"
2) "333"
127.0.0.1:6379> sunion sk1 sk2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "222"
11) "333"
127.0.0.1:6379> sinter sk1 sk2
1) "6"
2) "8"
127.0.0.1:6379> sintercard 2 sk1 sk2
(integer) 2
1.5.2 应用案例-随机抽奖
1.5.3 应用案例-朋友圈点赞
1.5.3 应用案例-qq动态中可能认识的人
1.6 zset类型
1.6.1 zset的结构和功能
zset是有序集合;功能:在set的基础上,每个val值前面加一个socre分数。可以实现排序。
set k1 v1 v2 k2 现在为 set k1 score v1 score v2 score v3
1.6.2 操作案例
1.新增与查询
127.0.0.1:6379> zadd k1 20 v1 70 v2 45 v3 50 v4 90 v5
(integer) 5
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> zrange k1 0 -1
1) "v1"
2) "v3"
3) "v4"
4) "v2"
5) "v5"
127.0.0.1:6379> zrange k1 0 -1 withscores
1) "v1"
2) "20"
3) "v3"
4) "45"
5) "v4"
6) "50"
7) "v2"
8) "70"
9) "v5"
10) "90"
2.获取top的N的数据
127.0.0.1:6379> zrange k1 0 10 withscores
1) "v1"
2) "20"
3) "v3"
4) "45"
5) "v4"
6) "50"
7) "v2"
8) "70"
9) "v5"
10) "90"
127.0.0.1:6379> zrangebyscore k1 40 80 withscores
1) "v3"
2) "45"
3) "v4"
4) "50"
5) "v2"
6) "70"
127.0.0.1:6379>
3.案例
1.7 bitmap类型
由0和1组成的二进制数组。可以实现统计考勤天数
1.设置
127.0.0.1:6379> setbit bk1 0 1
(integer) 0
127.0.0.1:6379> setbit bk1 1 1
(integer) 0
127.0.0.1:6379> setbit bk1 2 1
(integer) 0
127.0.0.1:6379> setbit bk1 3 0
(integer) 0
127.0.0.1:6379> setbit bk1 4 0
(integer) 0
127.0.0.1:6379> setbit bk1 5 0
(integer) 0
127.0.0.1:6379> setbit bk1 6 1
(integer) 0
127.0.0.1:6379> setbit bk1 7 1
(integer) 0
127.0.0.1:6379> setbit bk1 8 1
(integer) 0
127.0.0.1:6379> setbit bk1 9 1
(integer) 0
127.0.0.1:6379> get bk1
"\xe3\xc0"
127.0.0.1:6379> setbit bk1 day10 1
(error) ERR bit offset is not an integer or out of range
2.获取
127.0.0.1:6379> strlen bk1
(integer) 2
3.获取个数
127.0.0.1:6379> bitcount bk1
(integer) 7
127.0.0.1:6379>
1.8 hyperloglog类型
1.8.1 作用介绍
要用来做基数统计,基数:去重复后的数据个数。去重脱水后的真实个数。只是实现统计数,不存储。
在 Redis 中,每个 HyperLogLog 键只需要耗费 12KB 的内存,就可以计算接近 2^64 个不同元素的基数。HyperLogLog 不会存储输入的元素,它仅仅根据输入的元素来计算去重复后的数据个数,因此它不会返回输入的元素。使用HyperLogLog可以统计网站每天的uv数据。
1.8.2 操作案例
127.0.0.1:6379> pfadd hllk01 23 44 23 99 434
(integer) 1
127.0.0.1:6379> pfadd hllk02 23 5 2 3 89 99
(integer) 1
127.0.0.1:6379> pfcount hllk01
(integer) 4
127.0.0.1:6379> pfmerge hllk01 hllk02
OK
127.0.0.1:6379> pfmerge hllk01
OK
127.0.0.1:6379> pfcount hllk01
(integer) 8
127.0.0.1:6379>
1.8.3 操作案例
1.9 GEO类型
地理位置坐标的操作
2.代码
127.0.0.1:6379> geoadd city 116.403963 39.915119 beijing 116.403414 39.924091 shanghai 116.024067 40.362639 shenzhen
(integer) 3
127.0.0.1:6379> geopos city beijing
1) 1) "116.40396326780319214"
2) "39.91511970338637383"
127.0.0.1:6379> geopos city shanghai
1) 1) "116.40341609716415405"
2) "39.92409008156928252"
127.0.0.1:6379>
1.10 stream类型
基于stream实现消息队列
127.0.0.1:6379> xadd smk1 * name liu age 30
"1682161514033-0"
127.0.0.1:6379> xrange smk1 - +
1) 1) "1682161514033-0"
2) 1) "name"
2) "liu"
3) "age"
4) "30"
127.0.0.1:6379> xgroup create smk1 groupA 0
OK
127.0.0.1:6379> xreadgroup group groupA consumer1 streams smk1 >
1) 1) "smk1"
2) 1) 1) "1682161514033-0"
2) 1) "name"
2) "liu"
3) "age"
4) "30"
127.0.0.1:6379>
1.11 bitfield类型
redis字符串看成一个二级制的数组,进行寻址
127.0.0.1:6379> set fk hello
OK
127.0.0.1:6379> get fk
"hello"
127.0.0.1:6379>