分为六个部分
- 通用命令
- 字符串类型
- 哈希类型
- 列表类型
- 集合类型
- 有序集合类型
1、通用命令
a. 通用命令
-
keys:#遍历出所有的key(keys命令一般不在生产环境使用)
keys*怎么用?
1、热备从节点 。 2、scan。 -
dbsize:#计算key的总数
-
exists key:#检查key是否存在
-
del key [key …]:#删除指定key-value
-
expire key seconds:#key在seconds秒后过期
-
ttl key:#查看key剩余的过期时间
-
persist key:#去掉key的过期时间
-
type key:#返回key的类型
时间复杂度:
b. 数据结构和内部编码
c. 单线程架构
1.纯内存
2.非阻塞IO
3.避免线程切换和竞态消耗
单线程注意什么?
1.一次只运行一条命令
2.拒绝长(慢)命令:keys、flushall、flushdb、slow lua script、mutil/exec、operate big value(collection)
3.其实不是单线程
fysnc file descriptor
close file descriptor
2、字符串类型
- 结构和命令
- 快速实战
- 内部编码
- 查漏补缺
a.字符串键值结构
场景:
- 缓存
- 计数器
- 分布式锁
- 等等
b.快速实战
- incr:#key自增1,如果key不存在,自增后get(key) =1
- decr:#key自减1,如果key不存在,自减后get(key)=-1
- incrby:#key自增某数,如果key不存在,自增后get(key)=某数
- decrby:#key自减某数,如果key不存在,自减后get(key)=-某数
- set:#不管key是否存在,都设置
- setnx:#key不存在,才设置
- setxx:#key存在,才设置
- mget:#批量获取key,原子操作
- mset:#批量设置key-value
- getset:#set key newvalue并返回旧的value
- append:#将value追加到旧的value
- strlen:#返回字符串的长度(注意长度)
- incrbyfloat:#增加key对应的值3.5(计数器操作)
- getrange:#获取字符串指定下标所有的值(获取strring值操作)
- setrange:#设置指定下标所有对应的值(修改string值操作)
3、哈希类型
- 特点
- 重要API
- hash vs string
- 查漏补缺
a.哈希键值结构
b.重要API
- hget:#获取hash key对应的field的value
- hset:#获取hash key对应field的value
- hdel:删除hash key对应field的value
- hexists:#判断hash key是否有field
- hlen:#获取hash key field的数量
- hmget:#批量获取hash key的一批field对应的值
- hmset:#批量设置hash key的一批field value
- hgetall:#返回hash key对应所有的field和value
- hvals:#返回hash key对应所有field的value
- hkeys:#返回hash key对应所有field
- hsetnx:#设置hash key对应field的value(如field已经存在,则失败)
- hincrby:#hash key对应的field的value自增
- hincrbyfloat:#hincrby浮点数版
4、列表类型
- 特点
- 重要API
- 实战、
- 查漏补缺
a.列表结构
b.重要API
- rpush:#从列表右端插入值(1-N个)
- lpush:#从列表左端插入值(1-N个)
- linsert:#在list指定的值前|后插入newValue
- lpop:#从列表左侧弹出一个item
- rpop:从列表右侧弹出一个item
- lrem:#根据count值,从列表中删除所有value相等的项
(1)count>0,从左到右,删除最多count个value相等的项
(2)count<0,从右到左,删除最多Math.abs(count)个value相等的项
(3)count=0,删除所有value相当的项 - ltrim:#按照索引范围修建列表
- lrange:#获取列表指定索引范围所有item
- lindex:#获取列表指定索引的item
- llen:#获取列表长度
- lset:#设置列表指定索引值为newValue
- blpop:#lpop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞
- brpop:#rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞
c.TIPS
(1) LRUSH + LPOP = Stack
(2) LRUSH +RPOP = Queue
(3) LRUSH +LTRIM=Capped Collection
(4) LRUSH +BRPOP=Message Queue
4、集合类型
a.集合结构
b.重要API
- sadd:#向集合key添加element(如果element已经存在,添加失败)
- srem:#将集合key中的element移除掉
- scard:#计算集合大小
- sismenmber:#判断it是否在集合中
- srandmember:#从集合中随机挑count个元素
- spop:#从集合中随机弹出一个元素
- smembers:#获取集合所有元素
- sdiff:#差集
- sinter:#交集
- sunion:#并集
- sdiff|sinter|suion + store destkey:#将差集、交集、并集结果保存在destkey中
c.TIPS
SADD=Tagging
SPOP/SRANDMEMBER=Random item
SADD + SINTER=Social Graph
4、有序集合类型
- 特点
- 重要API
- 实战
- 查漏补缺
a.有序集合结构
b.重要API
- zadd:#添加score和element
- zrem:#删除元素
- zscore:#返回元素的分数
- zincrby:#增加或减少元素的分数
- zcard:#返回元素的个数
- zrange:#返回指定索引范围内的升序元素[分值]
- zrangebyscore:#返回指定分数范围内的升序元素[分值]
- zcount:#返回有序集合内在指定分数范围内的个数
- zremrangebyrank:#删除指定排名内的升序元素
- zremrangebyscore:#删除指定分数内的升序元素
- zrevrank:#从高到低排名
- zrevrange:#从高到低取一定的范围
- zrevrangebyscore:#返回指定分数范围内的降序元素[分值]
- zinterstore:#两个有序集合的交集
- zunionstore:#两个有序集合的并集