第二章 Redis API的使用和理解
2.1 Redis API的使用和理解
2.1.1 通用命令
mset /mget 批量设置 减少了网络时间 一般而言=网络时间+命令时间
sadd myset a b c d e 将一个或多个成员元素加入到集合中
keys * 生产不适用,适用于热备从节点、scan
dbsize 计算key的总数
exists key 检查key是否存在
expire key seconds 在seconds秒后key过期
ttl key 查看key剩余的过期时间
persist key 去掉key的过期时间
type key 返回key的类型
2.1.2 数据结构和内部编码
时间 <=> 空间
2.1.3 单线程架构
单线程为什么这么块?
1.纯内存,响应速度快
2.非阻塞IO
3.避免现场切换和竟态消耗
注意事项:
1.一次只执行一条命令
2.拒绝长/慢命令
3.其实不是单线程
2.2 字符串类型
使用场景:缓存、计数器、分布式锁...
命令:
incr key #自增1
decr key #自减1
incrby key k #自增k
decrby key k #自减k
set key value #不管key是否存在,都设置
setnx key value #key不存在,才设置
set key value xx #key存在,才设置
getset key newvalue #set key newvalue并返回旧的value
append key value #将value追加到旧的value
strlen key #返回字符串的长度
incrbyfloat key 3.5 #增加key对应的值3.5
getrange key start end #获取字符串指定下标的所有值
setrange key index value #设置指定下标所对应的值
实战:缓存视频
2.3 哈希类型
哈希键值结构
命令:
hdel key field1 [field2] :删除一个或多个字段
hexists key field :查看字段是否存在
hget key field :获取指定字段的值
hgetall key :获取所有字段和值
hincrby key field increment :字段的整数值加上增量 increment 。
hkeys key 获取所有哈希表中的字段
hlen key 获取哈希表中字段的数量
hmget key field1 [field2] 获取所有给定字段的值
hmset key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
hset key field value 将哈希表 key 中的字段 field 的值设为 value 。
hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值。
hvals key 获取哈希表中所有值
hscan key cursor [MATCH pattern] [COUNT count] :迭代哈希表中的键值对。
string VS hash:
2.4 列表类型
有序 可以重复
lpush和rpush 从左边/右边插入
lpop和rpop 从左边/右边弹出
lrem key count value 移除多少个value相等元素,count>0从左,count<0从右,count=0删除所有
ltrim key start end 按照索引范围进行修减列表,只保留下标索引从start到end元素
linsert listkey before|after pivot value 在元素pivot之前/之后插入value
lrange key start end 获取指定范围内的元素
lindex key index 获取下标索引的元素
blpop key1 [key2 ] timeout 移出并获取列表首元素, 没有元素会阻塞列表直到超时或发现元素。
brpop key1 [key2 ] timeout 移出并获取列表尾元素, 没有元素会阻塞列表直到超时或发现元素。
lpush + lpop = Stack(栈)
lpush + rpop = Queue(队列)
lpush + ltrim = Capped Collection(有限制的列表)
lpush + brpop = Message Queue(消息队列)
实战:微博新消息-lpush
2.5 集合类型
无序 无重复 支持集合间操作
sadd 添加 srem 删除
scard key 获取集合的成员数
spop 移除并返回随机一个元素
srandmember 返回集合中一个或多个随机数
sismember key member 判断元素是否是集合 key 的成员
smembers 返回集合中的所有成员
sinter 取出两个集合相同的元素
sdiff 取出两个集合的差集
sunion 取出两个集合的并集
实战:随机抽奖-spop/srandmember ,添加标签-sadd,共同关注-sinter
2.6 有序集合类型
有序集合结构
命令:
zadd key score1 member1 添加/更新 一/多个成员
zcard key 获取成员数
zcount key min max 计算区间内成员数
zincrby key increment member 对指定成员的分数加上增量 increment
zincrby destination numkeys key [key ...] 计算一/多个有序集的交集并存储在新的有序集合 key 中
zrem key member [member ...] 移除有序集合中的一个或多个成员
zremrangebyrank key start end 删除指定排名内的升序元素
zremrangebyscore key minScore maxScore 删除指定分数内的升序元素
zrange key start stop 返回索引区间内的成员
zrank key member 返回有序集合中指定成员的索引
zrevrange key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到底
zscore key member 返回有序集中,成员的分数值
zunionstoredestination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
zscan key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)
zrangebylex key min max [LIMIT offset count] 返回value在区间内的成员,(为不包括,[为包括,-为小于
zrangebyscore key min max [WITHSCORES] [LIMIT] 返回score在区间内的成员,(1 5 表示1 < score <= 5
实战:排行榜
总结