一:字符串类型
1 添加元素
单个元素添加:set key value
例如: set bar hello
多个元素添加: mset key1 value1 key2 value2 .......
例如:mset bar1 hello bar2 world
2 取出元素
单个元素取出:get key
例如:get bar ==> "hello"
多个元素取出:mget key1 keys2......
例如:mget bar1 bar2
3 删除元素del key
例如:del bar
返回删除的个数1,如果key不存在,删除失败,则返回0。del 命令不支持通配符。
4 获得元素的长度strlen key
例如:strlen bar
5 递增递减数字incr(decr) key
例如:incr num
,如果num不存在,则自动创建num并赋值为0,并自增1,如果num已经存在,则在原本的基础之上增加1。
如果要指定增加的数组,则使用incrby(decrby) key value
。例如:incrby num 5
6 判断key是否存在
exists key 存在返回1,不存在返回0。
上述命令都会返回增、减之后的结果值。
二:散列类型
散列类型类似于字典结构以键值对的形式存储数据。映射字段只能是字符串类型,一个散列类型键最多可以包含2^31 - 1 个字段。
1 赋值
单个值:hset key field value
例如:hset car color blue
多个值:hmset key field1 value1 field2 value2 ......
例如:hmset car color blue price 10000000 type baoma
2 取值
单个取值:hget key field
取多个值:hmget key filed1 field2......
例如:hmget car color price type
如果想获取键中所有的字段值却不知道键中有哪些字段,可以使用hgetall key
来取得。
3 删除元素hdel key field [field1 field2 .......]
可以删除一个字段或者字段
4 获得字段数量
hlen key
5 只获得字段名或者字段值hkeys key
hvals key
6 判断字段是否存在
hexists key field
三:列表类型
列表内部是使用双向链表实现的,所以像列表两端添加元素的时间复杂度是O(1),越接近列表两端速度就越快。获取头部或者尾部的10条记录也是极快的。
1 向列表两端增加元素lpush key value [value ......]
例如:lpush numbers1 1 2 3
结果是: 3 2 1rpush key value [value .......]
例如: rpush numbers2 1 2 3
结果是:1 2 3
2 从列表两端弹出元素lpop
rpop
3 获取元素的个数
llen key
4 获得列表片段
lrange key start stop
列表的索引从0开始,截取的片段包含两端的值。最右端的值为-1。lrange num 0 -1
可以获得整个列表的全部值。
5 向列表中插入元素linsert key before | after pivot value
该命令首先会在列表中从左到右查找值为pivot的元素。然后根据第二个参数before或者after来决定将value插入到该元素的前面还是后面,返回插入后列表的元素个数。
6 获得/设定指定索引的元素值lindex key index
获取指定index的元素值lset key index value
将指定index 设置为新的value值。
7 只保留列表指定片段ltrim key start end
该命令可以删除指定索引范围之外的所有元素。
8 将列表从一个列表转入另外一个列表rpoplpush source destination
将列表source中的元素转入到destination列表中。
四:集合类型
在集合中每个元素都是不同的,没有顺序。一个集合类型键可以存储2^32 - 1个。
1 增加/删除元素
sadd key member [member ...]
srem key member [membber ...]
2 获得集合中所有的元素
smembers key
3 判断元素是否在集合中sismember key member
存在返回1,不存在返回0
4 获得集合的长度
scard key
5 集合之间的运算sdiff key [key ....]
执行集合之间的差集运算sinter key [key ...]
执行集合之间的交集运算sunion key [key ...]
执行集合之间的并集运算
集合运算并将结果存储分别使用sdiffstore
、sinterstore
、sunionstore
6 随机获得集合中的元素srandmember key
从集合中获取一个元素。srandmember key count
获得count个随机元素
当count > 0,会随机从集合里获得count个不重复的元素;当count < 0,会随机从集合里面获取count个元素,这些元素可能相同。
7 从集合中弹出一个元素spop key
弹出的同时会删除元素
五:有序集合类型
有序集合是使用散列表和跳跃表来实现的,所以即使读取位于中间部分的数据
速度也很快。+inf
表示正无穷大,-inf
表示负无穷大。
1 增加元素
zadd key score member [score member]
2 获得元素的分数
zscore key member
3 获得排名在某个范围的元素列表zrange key start stop [withscores]
元素从小到大排列zrevrange key start stop [withscores]
元素从大到小排列
4 获得分数在某一范围内的列表
zrangebyscore key min max [withscores] [limit offset count]
例如:zrangebyscore scoreboard 80 100
,如果希望包含80但不包含100,只需要在100前加(号,即zrangebyscore key scoreboard 80 (100
。
5 增加某个元素的分数
zincrby key increment member
6 获得集合中元素的数量
zcard key
7 获得指定分数范围内的元素个数
zcount key min max
8 s删除一个或者多个元素
zrem key member [member ...]
9 按照排名范围删除zremrangebyrank key start stop
删除在指定范围内的所有元素,并返回删除元素的数量。
10 按照分数范围删除元素
zremrangebyscore key min max
11 获得元素的排名zrank key member
(最小的排名为0)zrevrank key member
(最大的排名为0)
12 计算有序集合的交集
zinterstore destination numkeys key [key ....] [weights weight [weight ....]] [aggregate sum | min | max]
例如:
zadd sortedsets1 1 a 2 b
zadd sortedsets2 10 a 20 b
zinterstore result 2 sortedsets1 sortedsets2 ==> a 11 b 22
默认相同key的值score相加zinterstore result 2 sortedsets1 sortedsets2 aggregate min
则是按照每个参与计算的集合中该元素分数最小值。得到的结果是a 1 b 2
zinterstore result 2 sortedsets1 sortedsets2 weights 1 0.1
得到的结果是a 2 b 4
。