中间件系列1 Redis

2019-03-06  本文已影响0人  莫小归

参考《Java EE 互联网轻量级框架整合开发》相关章节

一.Redis概述

1.适用场景
2.Redis性能优势
3.NoSQL与传统数据库

二.Redis数据结构和常用命令

1.字符串
命令 说明 备注
set key value 设置键值对
get key 通过键获取值
del key 通过键删除键值对 返回删除的键值对个数
strlen key 求key指向字符串的长度 返回长度
getset key value 修改原key对应的值,并返回原值 若原值为空则返回空
getrange key start end 获取子串 返回(start,end)截取的字符串
append key value 将新value加入到key指向的value末尾 返回拼接后value的长度
命令 说明 备注
incr key 原字段加1 限整数
incrby key increment 原字段加整数(increment) 限整数
decr key 原字段减1 限整数
decrby key decrement 原字段减整数(decrement) 限整数
incrbyfloat key increment 原字段加浮点数(increment) 整数或浮点数
2.哈希
命令 说明 备注
hdel key field1 [field2...] 删除hash结构中的某字段 可同时删除多个字段
hexists key field 判断hash结构中是否存在field字段 存在返回1,否则返回0
hgetall key 获取hash结构中所有键值
hincrby key field increment hash结构的指定字段加上一个整数 要求该字段本身为整数字符串
hincrby float key field increment hash结构的指定字段加上一个浮点数 要求该字段本身为数字型字符串
hkeys key 返回hash中所有键
hvals key 返回hash中所有值
hlen key 返回hash中键值对的数量
hmget key field1 [field2 ...] 返回hash中指定键的值,可以是多个键 依次返回值
hmset key field1 value1 [field2 value2 ...] hash设置多个键值对
hset key field value hash设置单个键值对
hsetnx key field vaule 当hash结构中不存在对应的键,才设置值
3.链表(linked-list)
命令 说明 备注
lpush key node1 [node2...] 把node1加到链表最左边
rpush key node1 [node2...] 把node1加到链表最右边
lindex key index 读取下标为index的节点 返回节点字符串
llen key 求链表的长度 返回链表节点数
lpop key 删除左边第一个节点,并将其返回
rpop key 删除右边第一个节点,并将其返回
insert key before/after pivot node 在节点pivot的前/后插入node节点 如果list不存在,则报错;如果没有值为pivot的节点,将插入失败返回-1
lpushx list node 如果存在key为list的链表,则从左边插入节点node 如果list不存在,则失败
rpushx list node 如果存在key为list的链表,则从右边插入节点node 如果list不存在,则失败
Irange list start end 获取链表list从start下标到end下标的节点值 包含start和end下标
lrem list count value 如果count为0,则删除所有值等于value的节点;若count不为0,则从左到右删除不大于count绝对值数目值为value的节点
lset key index node 设置列表下标为index的节点的值为node
ltrim key start stop 修剪链表,只保留从start到stop区间的节点 包含start和end下标
命令 说明 备注
blpop key timeout 移出并获取链表的第一个元素,如果链表没有元素会阻塞链表直到等待超时或发现可弹出元素为止 相对于lpop命令线程安全
brpop key timeout 移出并获取链表的最后一个元素,如果链表没有元素会阻塞链表直到等待超时或发现可弹出元素为止 相对于rpop命令线程安全
rpoplpush key src dest 将原链表最右边一个元素移除,并插入目标链表最左边 不能设置超时时间
brpoplpush key src dest timeout 将原链表最右边一个元素移除,并插入目标链表最左边,可以设置超时时间
4.集合
命令 说明 备注
sadd key member1 [member2 member3 ...] 给集合key增加成员 可以同时增加多个
srem key member1 [member2 ...] 移除集合key的元素
scard key 统计集合key的成员数
sdiff key1 [key2] 找出两个集合的差集 参数如果只有一个集合,则返回这个集合的所有元素
sdiffstore des key1 [key2] 找出两个集合的差集,并保存在集合des中
sinter key1 [key2] 求集合key1和集合key2的交集 参数如果只有一个集合,则返回这个集合的所有元素
sinterstore des key1 key2 求集合key1和集合key2的交集并保存到des
sismember key member 判断member是否为集合key的成员 是返回1,否返回0
smembers key 返回集合key的所有成员 数据量大时需考虑迭代遍历
smove src des member 将成员member从集合src迁移到集合des
spop key 随机弹出集合key的一个元素
srandmember key[count] 随机返回集合key的一个或多个元素 count为整数,不填默认为1,负数取绝对值,count大于集合元素总数时返回整个集合
sunion key1 [key2] 求集合key1和集合key2的并集
sunionstore des key1 key2 求并集并将结果保存到键为des的集合
5.有序集合
命令 说明 备注
zadd key score1 value1 [score2 value2 ...] 给有序集合key增加成员 如果不存在有序集合key,则自动创建
zcard key 统计有序集合key的成员数
zcount key min max 根据分数返回对应的成员列表 分数在最小值min与最大值max间
zincrby key increment member 给有序集合成员值为member的分数增加increment
zinterstore desKey numkeys key1 [key2 key3 ...] 求多个有序集合的交集并存入desKey
zlexcount key min max 求有序集合key成员值在min和max的范围集合
zrange key start stop [withscores] 按照分值的大小从小到大返回成员,start和stop参数可截取某一段返回,若输入可选项withscores则连同分数一起返回
zrank key member 按从小到大求有序集合的排行
zrangebylex key min max [limit offset count] 根据值的大小,从小到大排序,min和max为最小/最大值,Redis求出范围集合后根据偏移量offset和限定返回数count返回对应的成员
zrangebyscore key min max [withscore] [limit offset count] 根据分数的大小,从小到大排序,min和max为最小/最大值,Redis求出范围集合后根据偏移量offset和限定返回数count返回对应的成员
zremrangebyscore key start stop 根据分数区间进行删除
zremrangebyrank key start stop 按照分数排行从小到大的顺序删除
zremrangebylex key min max 按照值得分布进行删除
zrevrange key start stop [withscores] 从大到小按分数排序,参数参照zrange
zrevrangebyscore key max min [withscores] 从大到小按分数排序,参数参见zrangebyscore
zrevrank key member 按从大到小顺序求元素的排行
zscore key member 返回成员的分数值
zunionstore desKey numKeys key1 [key2 key3 key4...] 求多个有序集合的并集 numKeys是有序集合的个数
6.基数(HyperLogLog)

三. Redis事务

1.概述
2.事务过程
命令 说明 备注
multi 开启事务,之后的命令进入队列,但不会立刻执行
watch key1 [key2...] 监听某些键,当被监听的键在事务执行前被修改,则事务将被回滚 乐观锁机制
unwatch key1 [key2...] 取消监听的键
exec 执行事务,但如果被监听的键发生改变,则执行回滚 执行事务队列存储的命令前,Redis会检测被监听的键值对有没有发生变化
discard 回滚事务 回滚后的事务不能再提交
时刻 客户端1 客户端2 说明
T1 set key1 value1 客户端1:返回OK
T2 watch key1 客户端1:监控key1
T3 multi 客户端1:开启事务
T4 set key2 value2 客户端1:事务命令入列
T5 - set key1 value1 客户端2:修改key1的值
T6 exec - 客户端1:执行事务,执行前检测到key1的值被其他命令修改过,所以将进行回滚
3.流水线(pipelined)
4.发布订阅

四. 超时命令——Redis内存回收

1. Redis键值对的超时
命令 说明 备注
persist key 持久化key,取消超时时间
ttl key 查看key的超时时间 以秒计算,-1代表没有超时时间,-2代表不存在key或key已超时
expire key seconds 设置超时时间戳 以秒为单位
expireat key timestamp 设置超时时间点 用unix时间戳确定
pptl key milliseconds 查看key的超时时间戳 以毫秒为单位
pexpire key 设置键值超时的时间 以毫秒为单位
pexpireat key stamptimes 设置超时时间点 以毫秒为单位的unix时间戳
2. Redis回收机制
上一篇 下一篇

猜你喜欢

热点阅读