Redis学习笔记

基本操作

set命令可以添加、覆盖一个字符串或者数字类型

get命令获取值

mget来获取多个key的值

Redis或者Spring Boot中的Key,通常都是包含逻辑上的命名空间,用符号“:”分开,比如Spring:session:xxxxx

 

对于数字类型的字符串,还有以下命令可以对其进行操作

DECR/INCR 数字类型数据自减和自增

DECRBY/INCRBY  数字类型数据减去某个指定的整数或者增加某个指定证书

INCRBYFLOAT  数字增加一个浮点数,负数表示减去

以上操作都是原子操作,不必担心多个客户端同时修改导致的并发问题

mset可以同时设置多个值,mget可以同时获取多个值,有助于减小网络操作延时

 

可以通过keys命令查询Redis中所有的Key

Key后面可以用"*"或者"?":

通过exists来判断Key是否存在

del命令删除 返回1表示删除成功,0表示失败

exists和del命令后面可以有多个key,用空格分开,操作结果是累计起来的结果

expire设定key的超时时间

ttl命令查看key的存活时间

List

Redis List类型类似Java的LinkedList,通过链表来完成,向其添加元素非常快,但按照索引方式获取元素比较慢,因此List结构适合那种大数据量,要求插入速度极快的场景

rpush可以将多个值放入list尾部,也可以理解为将值从List右边放入;lpush则可以将多个值放到list头部,也可以理解为从List左边放入,使用lrange能从左到右显示指定范围的列表

lrange的第一个参数是key,后面两个参数是列表的范围从列表末尾开始

rpop命令可以从列表尾部取出一个元素,lpop则会取出列表的头一个元素

llen用来返回List的长度

List结果可以用在多个场合,比如消息服务,通过rpush追加消息,其他客户端通过lpop或者rpop读取List的消息

对于消息服务需求,可以使用lpop或者rpop,如果列表为空,会返回一个nil,导致消息订阅者不断尝试调用pop命令。另一种方式是Redis提供了带阻塞的(Block)的pop命令,blpop或者brpop。这两个命令会在List为空的时候处于等待状态,直到列表有元素,或者指定的时间到期为止。

blpop参数可接受同时获取的多个列表,因为返回的是一个两元素列表,第一个元素是Key值,第二个是获取的元素值

blpop总是返回先有元素的列表,参数0表示永远等待。

 

 Hash

Redis Hash类似于Java的HashMap,允许存放多个Key-value。Spring Boot在Spring Session中即采用了Hash结构来存放用户的Session数据,以实现Web系统的水平扩展

Hash有以下指令

hset key field value,给指定的Key设置一个字段值,如果值已经存在,则覆盖。返回0表示失败,返回1表示成功。

hget key field ,获取指定Key的field字段值,如果不存在,则返回nil。

hexists key field,判断指定Key的field字段是否存在,返回1表示存在,0表示不存在。

hkeys key,返回Key所指定的hash所有的字段名。

hgetall key,发货所有的字段名和字段值。

hdel key field [field],删除多个字段。

 

Hash的字段支持递增计算,这跟原始类型操作一样,是原子操作。

hincby key field value,对key指定的Hash数据中的field的值进行计算,增加整形value

hincbyfloat key field value:对key指定的Hash数据中的field的值进行计算,增加浮点数value

 

Set

Set与Java中的Set类似,代表了元素不重复的集合,Redis的Set除了元素添加删除操作,还包含了集合的并集、交集等功能,可以用于统计访问网站所有的IP,或者统计网站作者共同的粉丝等,常用的命令有:

sadd key member [member..],添加元素
srem key member [member..],删除元素

smember key,返回一个集合中的所有元素

sinter key1 key2,返回两个集合共同的元素,key1和key2分别代表两个集合

sinterstore key1 key2 key3,取的key1和key2的交集,并存放到key3集合中

sunion key1 key2,返回一个合并后的集合

sunionstore key1 key2 key3,合并key1和key2集合,并存放到key3集合中

Redis还提供了对Sorted Set是排序的集合的各种操作命令。

 

Pub/Sub

Redis除了NoSQL特性,还提供了简单的消息服务,支持publish/subscribe。Redis客户端可以订阅一个或者多个频道(Channel),这种行为被称为subscribe。其他Redis客户端向这些Channel发送消息,称为为publish,订阅这些频道的客户端能接收到这些消息。

publish/subscribe消息模式很好地解耦了消息发送者和消息接收者。消息订阅者不需要知道发送者,发送者也不需要知道消息接收者。发送者发送的消息被所有的消息订阅者接收。

publish/subscribe模式在Spring Boot中可以应用于事件通知,如配置文件更新、缓存更新等

Redis的subscribe可以订阅一个到多个频道。subscribe命令会返回一个数组结构数据,第一行是固定的“subscribe”字符串,第二行是订阅的频道名字,第三行是数字,表示该频道总共有多少个订阅者。publish命令可以向终端发送一条消息,并返回一个整数,表示有多少订阅者收到此消息。

Redis还提供了订阅指定的模式(pattern),使用psubscribe命令:

psubscribe news.*

订阅所有以news开头的频道

支持的模式(patterns)有:

news.* 所有news.开头的频道

news-?,订阅news-1、news-2频道

news[123],订阅news-1、news-2、news-3频道

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇