Redis五种数据类型和消息订阅

2020-04-17  本文已影响0人  JBryan
1、key/value数据类型

String是最常用的一种数据类型,普通的key/value存储都可以归为此类。
set/get:设置key对应的值为String类型的value,获取key对应的值

127.0.0.1:6379> set Jessie cuty
OK
127.0.0.1:6379> get Jessie
"cuty"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> 

mget:批量获取多个key的值,如果可以不存在则返回nil

127.0.0.1:6379> mget Jessie age
1) "cuty"
2) "20"
127.0.0.1:6379> 

incr && incrby:incr对key对应的值进行加加操作,并返回新的值;incrby加指定值

127.0.0.1:6379> incr age
(integer) 21
127.0.0.1:6379> incrby age 5
(integer) 26
127.0.0.1:6379> 

decr && decrby:decr对key对应的值进行减减操作,并返回新的值;decrby减指定值

127.0.0.1:6379> decr age
(integer) 25
127.0.0.1:6379> decrby age 5
(integer) 20
127.0.0.1:6379> 

setnx:设置key对应的值为String类型的value,如果key已经存在则返回0。
前面已经保存过key为Jessie的值了,所以setnx不成功,Jessie的值还是原来的"cuty";
如果setnx一个未保存过的值,则返回1,保存成功。

127.0.0.1:6379> setnx Jessie sweety
(integer) 0
127.0.0.1:6379> get Jessie
"cuty"
127.0.0.1:6379> setnx height 160
(integer) 1
127.0.0.1:6379> get height
"160"
127.0.0.1:6379>

setex:设置key对应的值为String类型的value,并设定有效期。
weight为key;20是过期时间,单位是秒;50是value。20s后再次访问weight,返回空。

127.0.0.1:6379> setex weight 20 50
OK
127.0.0.1:6379> get weight
"50"
127.0.0.1:6379> get weight
(nil)
127.0.0.1:6379>
2、Hash类型

Hash是一个String类型的field和value之间的映射表。redis的Hash数据类型的key(hash表名称),对应的value实际的内部存储结构为一个HashMap。Hash特别适合存储对象。
hset——设置key对应的HashMap中的field的value

127.0.0.1:6379> hset person1 name zhangsan
(integer) 1
127.0.0.1:6379> hset person1 age 22
(integer) 1
127.0.0.1:6379> hset person1 height 175cm
(integer) 1
127.0.0.1:6379>

hget——获取key对应的HashMap中的field的value

127.0.0.1:6379> hget person1 name
"zhangsan"
127.0.0.1:6379> hget person1 age
"22"
127.0.0.1:6379> hget person1 height
"175cm"
127.0.0.1:6379> 

hgetall——获取key对应的HashMap中的所有field的value

127.0.0.1:6379> hgetall person1
1) "name"
2) "zhangsan"
3) "age"
4) "22"
5) "height"
6) "175cm"
127.0.0.1:6379> 

hlen--返回key对应的HashMap中的field的数量

127.0.0.1:6379> hlen person1
(integer) 3
127.0.0.1:6379> 
3、List类型

List类型可类比Java中的List。常见命令如下:
lpush——在key对应的list的头部添加一个元素,一次可添加多个元素

127.0.0.1:6379> lpush person zhangsan zhangsi zhangwu zhangliu
(integer) 4
127.0.0.1:6379> 

lrange——获取key对应的list的指定下标范围的元素,-1表示获取到最后的元素

127.0.0.1:6379> lrange person 1 3
1) "zhangwu"
2) "zhangsi"
3) "zhangsan"
127.0.0.1:6379> lrange person 0 -1
1) "zhangliu"
2) "zhangwu"
3) "zhangsi"
4) "zhangsan"
127.0.0.1:6379> lrange person 1 -1
1) "zhangwu"
2) "zhangsi"
3) "zhangsan"
127.0.0.1:6379> 

lpop——从key对应的list的头部删除一个元素,并返回该元素

127.0.0.1:6379> lpop person
"zhangliu"
127.0.0.1:6379> lrange person 0 -1
1) "zhangwu"
2) "zhangsi"
3) "zhangsan"
127.0.0.1:6379> 

rpush——在key对应的list的尾部添加一个元素

127.0.0.1:6379> rpush person zhanger
(integer) 4
127.0.0.1:6379> lrange person 0 -1
1) "zhangwu"
2) "zhangsi"
3) "zhangsan"
4) "zhanger"
127.0.0.1:6379> 

rpop——从key对应的list的尾部删除一个元素,并返回该元素

127.0.0.1:6379> rpop person
"zhanger"
127.0.0.1:6379> lrange person 0 -1
1) "zhangwu"
2) "zhangsi"
3) "zhangsan"
127.0.0.1:6379> 
4、Set类型

Set类型可类比Java的Set,特点是不允许存放重复元素,常用命令如下:
sadd——在key对应的set中添加一个元素

127.0.0.1:6379> sadd scores 80 90 90 70 60
(integer) 4
127.0.0.1:6379>

smembers——获取key对应的set的所有元素

127.0.0.1:6379> smembers scores
1) "60"
2) "70"
3) "80"
4) "90"
127.0.0.1:6379>

spop——随机返回并删除key对应的set中的一个元素

127.0.0.1:6379> spop scores 
"60"
127.0.0.1:6379> smembers scores
1) "70"
2) "80"
3) "90"

5、SortSet类型

set的基础增加顺序score,再根据score进行排序,常用命令如下:
zadd ——在key对应的zset中添加一个元素

127.0.0.1:6379> zadd exam 100 zhangsan 90 zhangsi 60 zhangwu 80 zhangliu 95 zhangqi
(integer) 5
127.0.0.1:6379>

其中,数字100、90是元素zhangsan、zhangsi对应的score,SortSet也是根据这个score进行排序的。
zrange——获取key对应的zset中指定范围的元素,-1表示获取所有元素。

127.0.0.1:6379> zrange exam 0 -1
1) "zhangwu"
2) "zhangliu"
3) "zhangsi"
4) "zhangqi"
5) "zhangsan"
127.0.0.1:6379> 

zrem——删除key对应的zset中的一个元素。

127.0.0.1:6379> zrem exam zhangsan
(integer) 1
127.0.0.1:6379> 

zrangebyscore——返回有序集key中,指定分数范围的元素列表。

127.0.0.1:6379> zrangebyscore exam 90 100
1) "zhangsi"
2) "zhangqi"
127.0.0.1:6379> 

zrank——返回key对应的zset中指定元素的排名。其中元素按score值递增(从小到大); 排名从0开始,也就是说,score值最小的成员排名为0。

127.0.0.1:6379> zrank exam zhangqi
(integer) 3
127.0.0.1:6379> 

set是通过hashmap存储,key对应set的元素,value是空对象 。
sortset使用hashmap存储,还加了一层跳跃表。

6、Redis消息订阅发布

发布订阅类似于信息管道,用来进行系统之间消息解耦,类似于mq,rabbitmq、rocketmq、kafka、activemq主要有消息发布者和消息订阅者。比如运用于:订单支付成功,会员系统加积分、钱包进行扣钱操作、发货系统(下发商品)。

PUBLISH:将信息message发送到指定的频道channel。返回收到消息的客户端数量

127.0.0.1:6379> PUBLISH chanel1 msg1
(integer) 0
127.0.0.1:6379>

SUBSCRIBE:订阅给指定频道的信息

127.0.0.1:6379> SUBSCRIBE chanel1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chanel1"
3) (integer) 1

UNSUBSCRIBE: 取消订阅指定的频道,如果不指定,则取消订阅所有的频道。

127.0.0.1:6379> UNSUBSCRIBE chanel1
1) "unsubscribe"
2) "chanel1"
3) (integer) 0
127.0.0.1:6379> 

redis发布订阅功能比较薄弱但比较轻量级,mq消息持久化,数据可靠性比较差,无后台功能可msgId、msgKey进行查询消息

上一篇 下一篇

猜你喜欢

热点阅读