Redis支持五种数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(sorted set)。
每一种数据类型所对应的操作命令不同,当然也存在一些通用的,而且Redis的所有命令有很多,本文中记录的都是日常使用频率相对多一些的。
通用命令:
1 | keys:遍历所有key【O(n)】 |
O(n)代表时间复杂度比较高,不建议在线上使用,O(1)代表时间复杂度较低,可以任意使用
字符串(String)
- 最常见的数据类型
- 可以为任何类型的字符串,比如二进制,json对象
- 最大容量512M
【增】
1 | setnx key value:key不存在时,才设置【O(1)】 |
【删】
1 | del key【0(N)】 |
【改】
1 | set key value xx:key存在,才设置【O(1)】 |
【查】
1 | mget key1 key2 key3…:批量获取key,原子操作【O(n)】 |
【知识扩展】
1 | getset key newvalue:set key newvalue并返回旧的value【O(1)】 |
哈希(Hash)
- 与php Array相似
- 可以保存多个key-value,每个k-v都是字符串类型
- 最多2^32-1个字段
所有hash的命令,都是以“h”开头
【增】
1 | hsetnx key field value:设置hash key对应field的value,key不存在时才设置【O(1)】 |
【删】
1 | hdel key field:删除hash key对应field的value【O(1)】 |
【改】
1 | hset key field value:设置hash key对应field的value【O(1)】 |
【查】
1 | hget key field:获取hash key对应的field的value【O(1)】 |
列表(List)
【增】
1 | rpush key value1 value2 value3…valueN:从列表右端插入值(1-N个)【O(1~N)】 |
【删】
1 | lpop key:从列表左侧弹出一个item【O(1)】 |
【改】
1 | lset key index newValue:设置列表指定索引为newValue【O(n)】 |
【查】
1 | lrange key start end(包含end):获取列表指定索引范围所有item【O(N)】(start:0、end:-1 等于取所有的) |
【知识扩展】
1 | blpop key timeout:lpop阻塞版本,timeout是阻塞超时时间,timeout=0时为永不阻塞【O(1)】 |
【应用场景】
1 | lpush + lpop = stack 实现栈的功能 |
集合(Set)
- 集合中每个元素都是不同的
- 元素最多为2^32 - 1
- 元素没有顺序
特点:无序、无重复、支持集合间操作(交集、并集、差集)
所有集合的命令,都是以“s”开头
【增】
1 | sadd key element:向集合key添加element(如果element已经存在,添加失败)【O(1)】 |
【删】
1 | srem key element:将集合key中的element移除掉【O(1)】 |
【查】
1 | scard key:计算集合大小 |
【应用场景】
1 | sadd = tagging 实现标签的功能 |
有序集合(sorted set)
集合 VS 有序集合 VS 列表
集合:
无重复元素
无序
element
有序集合:
无重复元素
有序
element + score
列表:
可以有重复元素
有序
element
所有有序集合的命令,都是以“z”开头
【增】
1 | zadd key score element(可以是多对):添加score和element,score可以重复,element不可以重复【O(logN)】 |
【删】
1 | zrem key element(可以是多个):删除元素【O(1)】 |
【查】
1 | zscore key element:返回元素的分数【O(1)】 |
注:Redis的命令有很多,本文中记录的只是平时常用的一些命令。