Redis API的使用和理解
通用命令
-
keys 查看所有的key, 可以使用通配符 */[a-b], 一般不在生产环境中使用. 由于单线程特性, 该命令会造成阻塞 代替: 热备从节点(在备机上使用)/scan O(n)的时间复杂度
-
dbsize 统计键值对数量
-
exists key 判断是否存在, 返回1 存在, 返回0 不存在
-
del key 删除指定的key,可以同时删除多个key
-
expire key seconds 设置过期时间
-
ttl key 查看剩余过期时间
-
persist key 去掉过期时间
-
type key 返回key的数据类型 string, hash, list, set ,zset, none
数据结构和内部编码
单线程
所有操作都是顺序执行的
- 纯内存操作
- 非阻塞IO
- 避免线程切换和竞态条件
- 一次只运行一条命令
- 拒绝长(慢)命令 keys flushall, flushdb, slow lua script, mutil/exec ,operate big value (collection)
- 其实不是单线程 fysnc file description/close file description
字符串
- 结构和命令
场景: 缓存、计数器、分布式锁
get key
set key
del key
incr key 自增1
decr key 自减1
incrby key k 自增k
decrby key k 自减k
mget key1 key2 key3
mset key1 v1 k2 v2 k3 v3
哈希
key field value
fileld 不能相同
hget key field
hset key fileld value
hdel key field
hexists key field 判断是否存在
hlen key 属性个数
hmget key field1 field2 field3
hmset key f1 v1 f2 v2 f3 v3
列表
- 有序
- 可以重复
- 左右两边插入弹出
rpush key value1 value2 v3 右边添加
lpush key v1 v2 v3
linsert key before|after value newValue
lpop key 从左边弹出元素
rpop key 从右边弹出元素
lrem key count value
ltrim key start end
lrange key start end(包含)
lindex key index
llen key 获取列表长度
lset key index newValue
blpop key timeout 阻塞指定的时间
brpop key timeout
集合s
无序
不允许重复元素
sadd key element
srem key element
scard
sismember
srandmember 抽奖
spop
smembers 返回结果无序,返回所有元素,谨慎阻塞
sdiff 差集
sinter 交集
sunion 并集
有序集合z
有序,不重复
zadd key score element
zrem key element
zscore key element 返回元素的分数
zincrby key increscore element 分数自增
zcard key 返回个数
zrank key element 获取排名
zrange key start end [WITHSCORES]
zrangebyscore key minScore maxScore
zcount key minScore maxScore
zremrangebyrank key start end 删除指定排名内的元素
zremrangebyscore key minScore maxScore
zrevrank
zrevrange
zrevrangebyscore
zinterstore
zunionstore
用处: 排行榜