redis-1-API使用和理解
2018-07-30 17:31:27 72 举报
AI智能生成
根据redis开发与运维一书,整理的知识点,分章节总结,有兴趣的可以查看下,这是第一章节
作者其他创作
大纲/内容
预备知识
全局命令
keys * / dbsize / exists key / expire key seconds / ttl / type key
数据结构和内部编码
object encoding key 查看内部编码
单线程架构
单线程执行,不会并发
快
纯内存访问
非阻塞IO
单线程避免线程切换和竞争
字符串
字符串/数字/二进制 <512M
常见命令
set key value / exists / set/setnx/setex / get
mset k1 v1 k2 v2 ... / mget k1 k2 ...
incr/incrby/decr decrby
append/strlen/getset/getrange key start end
内部编码
常见场景
缓存功能
计数
共享session
限速
列表
有序可重复
常见命令
rpush/lpush key value ...
lrange key start end / lindex key index
lpop/rpop key / blpop / brpop
lset key index value
内部编码
ziplist
列表元素小于512个(512是list-max-ziplist-entries的默认值)
且每个元素的值都小于64字节(64是list-max-ziplist-value的默认值)
linkedlist
不满足ziplist时使用
使用场景
消息队列
时间轴
文章列表
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=CappedCollection(有限集合)
lpush+brpop=MessageQueue(消息队列)
哈希
key : {filed : value}
常见命令
hset key field value / hget key field / hdel key field / hlen key
hmset key field value [field value...] / hmget key field ...
hexists key field / hkeys key / hvals key
内部编码
ziplist(field较少且没有大value)
hashtable(有value大于64字节 || field超过512个)
常见场景
缓存
集合
无序且不重复
命令
sadd / screm / scard / sismember / srandmember / spop / smembers
sinter / sunion / sdiff
内部编码
intset
hashtable
不满足条件时
intset
元素都是整数且元素个数小于set-max-intset-entries配置(默认512)
使用场景
标签
喜欢同一标签,共同喜好
社交
有序集合
不能重复但可以排序
命令
zadd / zcard / zscore / zrank / zrem / zrange / zrangebyscore /zcount
zremrangebyrank / zremrangebyscore
内部编码
ziplist
有序集合的元素小于zset-max-ziplist-entries的配置(默认128)
且每个元素的值都小于zset-max-ziplist-value的配置(默认64字节)
skip(跳跃表)
使用场景
排行榜系统
键管理
子主题
rename key newkey
randomkey
persist key
expire key seconds
expire key timestamp
pexpire key milliseconds
expire key timestamp
pexpire key milliseconds
注:set命令会去掉key的过期时间;若set过期时间为负值。则key会被立刻删除
迁移键
1:move
2:dump+restore
3:migrate
遍历键
全局遍历键
keys pattern --> 举例:keys *; keys h?ill*
注:执行keys可能会造成redis阻塞,除非key总数比较少,建议使用渐进式遍历
渐进式遍历
scan / hscan / sscan / zscan
scan cursor [match pattern] [count number]
注:在scan过程中,遇到CUD时,可能会出现重复遍历/遍历缺失等
数据库管理
切换数据库
select dbIndex
flushdb/flushall
前者清除当前库后者清除所有
清除所有数据,误操作影响大(rename-command规避/误操作后恢复数据)
若redis中数据较多,容易阻塞redis
0 条评论
下一页