全局命令
1、查看所有键 keys *
2、键总数 dbsize
3、检查键是否存在 exists key
4、删除键 del key del key1 key2 key3
5、键过期 expire key seconds 大于0的整数表示剩余过期时间;-1表示已过期;-2表示键不存在;ttl key返回键剩余时间
数据结构和内部编码
1、查询内部编码 object encoding key
字符串
命令
常用命令
1、设置值
set key value[ex seconds] [px milliseconds] [nx|xx]
setex key seconds value
setnx key value
2、获取值 get key
3、批量设置值 mset key value [key value]
4、批量获取值 mget key [key ...]
5、计数
incr key
decr key
incrby key increment
decrby key decrement
incrbyfloat key increment
不常用命令
1、追加值 append key value
2、字符串长度 strlen key 每个中文字占用3个字节
3、设置并返回原值 getset key value
4、设置指定位置的字符 setrange key offeset value
5、获取部分字符串 getrange key start end
字符串内部编码
1、int 8个字节的长整型
2、embstr 小于等于39个字节的字符串
3、raw 大于39个字节的字符串
应用场景
1、缓存功能
2、计数
3、共享session
4、限速
哈希
命令
1、设置值 hset key field value 例:hset user:1 name tom
2、获取值 hget key field 例:hget user:1 name
3、删除field hdel key field 例:hdel user:1 name
4、计算field个数 hlen key
5、批量设置或获取field-value hmget key field [field ...]
hmset key field value [field value ...]
6、判断field是否存在 hexists key field
7、获取所有field hkeys key
8、获取所有key hvals key
9、获取所有的field-value hgetall key
10、hincrby hincrbyfloat
11、计算value的字符串长度 hstrlen key field
内部编码
1、ziplist field个数比较少且没有大的value时
2、hashtable 当有value大于64字节/field个数超过512
使用场景
1、使用hash类型缓存用户信息
(1)原生字符串类型:每个属性一个键
(2)序列化字符串类型:将用户信息序列化后用一个键保存
Set user:1 serialize(userInfo)
(3)hash类型:每个用户属性使用一对field-value,但是只用一个键保存
列表
命令
添加操作
(1)从右边插入元素
rpush key value [value ...]
Lrange 0 -1从左到右获取列表所有元素
(2)从左边插入元素
lpush key value[value ...]
(3)向某个元素前或后插入元素
linsert key before|after pivot value
例:linsert listkey before b java
查找
(1)获取指定范围内的元素列表
lrange key start end
(2)获取列表指定索引下标的元素
lindex key index
(3)获取列表长度
Llen key
删除
(1)从列表左侧弹出元素
(2)从列表右侧弹出元素
(3)删除指定元素
(4)按照索引范围修剪列表
修改
修改指定索引下标的元素
lset key index newvalue
阻塞操作
blpop key [key ...] timeout
brpop key[key ...] timeout
timeout:阻塞时间(单位:秒)
(1)列表为空:如果timeout=3,那么客户端要等到3秒后返回,如果timeout=0,那么客户端一直阻塞等下去。
(2)列表不为空:客户端立即返回。
注意:在使用brpop时,有两点需要注意
1.如果是多个键,那么brpop会从左到右遍历键,一旦有一个键能弹出元素,客户端立即返回。
2.如果多个客户端对同一个键执行brpop,那么最先执行brpop命令的客户端可以获取到弹出的值。
内部编码:
(1)元素个数较少且没有大元素时,内部编码为ziplist
(2)元素个数超过512个,内部编码变为linkedlist
(3)某个元素超过64字节,内部编码也会变为linkedlist
使用场景
1、消息队列
2、文章列表
列表使用口诀:
lpush+lpop=Stack
Lpush+rpop=Queue
Lpush+ltrim=Capped Collection
Lpush+brpop=Message Queue
集合(无序,不重复)
命令
集合内操作
(1)添加元素
sadd key element [element...]
(2)删除元素
srem key element [element ...]
(3)计算元素个数
scard key
(4)判断元素是否在集合中
sismember key element
(5)随机从集合返回指定个数元素
srandmember key [count]
(6)从集合随机弹出元素
spop key
(7)获取所有元素
smember key
集合间操作
(1)求多个集合的交集
sinter key [key...]
(2)求多个集合的并集
sunion key [key...]
(3)求多个集合的差集
sdiff key [key...]
(4)将交集、并集、差集的结果保存
sinterstore destination key [key...]
sunionstore destination key[key...]
sdiffstore destination key[key...]
例:sinterstore user:1_2:inter user:1:follow user:2:follow
内部编码
(1)当元素个数较少且都为整数时,内部编码为intset
(2)当元素个数超过512个,内部编码变为hashtable
(3)当元素个数不为整数时,内部编码为hashtable
使用场景
1、给用户添加标签
2、给标签添加用户
3、删除用户下的标签
4、删除标签下的用户
5、计算用户共同感兴趣的标签