基本操作
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频道