redis 数据类型

一、String

场景

session共享、kv缓存、数值计算计数器、fs文件系统(小文件 磁盘IO)、内存

案例
1、字符串
127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> get k1
"aaa"
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> exit
[root@localhost src]# nc localhost 6379
keys *
*1
$2
k1
^C
[root@localhost src]# exec 9<> /dev/tcp/localhost/6379
[root@localhost src]# echo "keys * " >& 9
[root@localhost src]# cat <& 9
*1
$2
k1
^C
[root@localhost src]# 
追加字符串
127.0.0.1:6379> set k1 abc
OK
127.0.0.1:6379> get k1
"abc"
127.0.0.1:6379> append k1 ef
(integer) 5
127.0.0.1:6379> get k1
"abcef"
127.0.0.1:6379> 
2、数值
自增自减
127.0.0.1:6379> set k1 10
OK
127.0.0.1:6379> get k1
"10"
127.0.0.1:6379> incr k1
(integer) 11
127.0.0.1:6379> get k1
"11"
127.0.0.1:6379> decr k1
(integer) 10
127.0.0.1:6379> get k1
"10"
127.0.0.1:6379> 
3、setbit
场景一

统计用户每天是否登陆。

案例一

用户tom 第4、7、365天登陆了用户,分别在对应位置存1。统计一年总共登陆几天。每个用户仅占用46个字节。

127.0.0.1:6379> setbit tom 3 1
(integer) 0
127.0.0.1:6379> setbit tom 6 1
(integer) 0
127.0.0.1:6379> setbit tom 364 1
(integer) 0
127.0.0.1:6379> bitcount tom
(integer) 3
127.0.0.1:6379> strlen tom
(integer) 46
127.0.0.1:6379> 
场景二

存放二值化的图片信息。

setbit k1 1 1 表示保存一个k1,第1个位置上为1。
0000 0000 > 0100 0000

setbit k1 7 1 表示保存一个k1,第7个位置上为1。
0100 0000 > 0100 0001

127.0.0.1:6379> setbit k1 1 1
(integer) 0
127.0.0.1:6379> get k1
"@"
127.0.0.1:6379> setbit k1 7 1
(integer) 0
127.0.0.1:6379> get k1
"A"
按位与、按位或
127.0.0.1:6379> setbit k1 1 1
(integer) 0
127.0.0.1:6379> setbit k1 7 1
(integer) 0
127.0.0.1:6379> get k1
"A"
127.0.0.1:6379> setbit k2 1 1
(integer) 0
127.0.0.1:6379> setbit k2 6 1
(integer) 0
127.0.0.1:6379> get k2
"B"
127.0.0.1:6379> bitop and andkey k1 k2
(integer) 1
127.0.0.1:6379> get andkey
"@"
127.0.0.1:6379> bitop or orkey k1 k2
(integer) 1
127.0.0.1:6379> get orkey
"C"
127.0.0.1:6379> 

二、List

场景

评论列表、消息队列、替代 java 容器
让jvm无状态(jvm挂掉后,数据不会丢失。两台服务器可以进行数据共享。)

案例

同向 lpush lpop 栈
异向 lpush rpop 队列
index() 数组

127.0.0.1:6379> lpush k1  a b c d e
(integer) 5
127.0.0.1:6379> LRANGE k1  0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> rpush k1 x y z
(integer) 8
127.0.0.1:6379> LRANGE k1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
6) "x"
7) "y"
8) "z"
127.0.0.1:6379> lpop k1
"e"
127.0.0.1:6379> rpop k1
"z"
127.0.0.1:6379> LRANGE k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "x"
6) "y"
127.0.0.1:6379> LINDEX k1 2
"b"
127.0.0.1:6379> 

清除
LTRIM 清除两端的数据(优化redis内存量)

127.0.0.1:6379> LRANGE k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "x"
6) "y"
127.0.0.1:6379> LTRIM k1 0 -1
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "x"
6) "y"
127.0.0.1:6379> LTRIM k1 0 -2
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "x"
127.0.0.1:6379> 

三、hash

聚集数据
详情页

127.0.0.1:6379> set tom::name tom
OK
127.0.0.1:6379> set tom::age 18
OK
127.0.0.1:6379> keys *
1) "tom::age"
2) "tom::name"
127.0.0.1:6379> get tom::age
"18"
127.0.0.1:6379> hset tom name tom
(integer) 1
127.0.0.1:6379> hset tom age 18
(integer) 1
127.0.0.1:6379> keys *
1) "tom::age"
2) "tom::name"
3) "tom"
127.0.0.1:6379> hgetall tom 
1) "name"
2) "tom"
3) "age"
4) "18"
127.0.0.1:6379> hkeys tom
1) "name"
2) "age"
127.0.0.1:6379> hvals tom
1) "tom"
2) "18"
127.0.0.1:6379> HINCRBY tom age -1
(integer) 17
127.0.0.1:6379> hget tom age
"17"
127.0.0.1:6379> 

三、set

集合、去重、无序

场景

抽奖

127.0.0.1:6379> sadd k1 ooxx xxoo oxox xoxo xoox oxxo ooxx
(integer) 6
127.0.0.1:6379> SMEMBERS k1
1) "xxoo"
2) "oxox"
3) "xoox"
4) "ooxx"
5) "xoxo"
6) "oxxo"
127.0.0.1:6379> OBJECT encoding k1
"hashtable"
127.0.0.1:6379> type k1
set
127.0.0.1:6379> SRANDMEMBER k1 3	#取值无重复
1) "xxoo"
2) "xoox"
3) "ooxx"
127.0.0.1:6379> SRANDMEMBER k1 -3	#取值有重复
1) "ooxx"
2) "xoox"
3) "ooxx"
127.0.0.1:6379> SRANDMEMBER k1 8	#无重复,只能取出6个
1) "oxox"
2) "xoox"
3) "xxoo"
4) "ooxx"
5) "oxxo"
6) "xoxo"
127.0.0.1:6379> SRANDMEMBER k1 -8	#可以重复,可以取出8个
1) "xoox"
2) "ooxx"
3) "ooxx"
4) "xoox"
5) "ooxx"
6) "xoxo"
7) "ooxx"
8) "oxox"
127.0.0.1:6379> 

并集、交集、差集
可以做好友推荐

127.0.0.1:6379> sadd k1 a b c d
(integer) 4
127.0.0.1:6379> sadd k2 c d e f
(integer) 4
127.0.0.1:6379> SUNION k1 k2	#并集
1) "c"
2) "b"
3) "f"
4) "a"
5) "d"
6) "e"
127.0.0.1:6379> SINTER k1 k2	#交集
1) "d"
2) "c"
127.0.0.1:6379> SDIFF k1 k2		#差集
1) "b"
2) "a"
127.0.0.1:6379> SDIFF k2 k1		#差集
1) "e"
2) "f"
127.0.0.1:6379> 

sorted_set

场景

分页、排行榜

127.0.0.1:6379> zadd k1 3.2 apple 1.2 banana 4.3 oracle
(integer) 3
127.0.0.1:6379> ZRANGE k1 0 -1
1) "banana"
2) "apple"
3) "oracle"
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "banana"
2) "1.2"
3) "apple"
4) "3.2000000000000002"
5) "oracle"
6) "4.2999999999999998"
127.0.0.1:6379> ZRANGE k1 0 1		#从小到大,取前两名
1) "banana"
2) "apple"
127.0.0.1:6379> ZREVRANGE k1 0 1	#从大到小,取前两名
1) "oracle"
2) "apple"
127.0.0.1:6379> ZRANGEBYSCORE k1 1 4	#根据分值取1-4之前的元素
1) "banana"
2) "apple"

如何实现排序的?
ziplist

元素个数小于 128个
元素小于 64byte

skiplist (跳跃表)

参考:https://blog.csdn.net/qq_25775675/article/details/106034487

127.0.0.1:6379> OBJECT encoding k1
"ziplist"
127.0.0.1:6379> zadd k1 8.8 abcdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeee
(integer) 1
127.0.0.1:6379> OBJECT encoding k1
"skiplist"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值