redis7 基础篇- redis各种数据类型的操作

一 各种数据类型介绍

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> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值