三、常用命令
3.1 字符串类型(string)
字符串类型是Redis中最基本的数据类型,一个字符串类型的键允许存储的数据的最大容量为512MB。
3.1.1 赋值与取值:
SET key value
GET key
3.1.2 递增数字:
INCR key //每执行一次递增1
INCRBY key num //每执行一次递增num
需注意的是如果多个客户端同时连接一个Redis时存在同时操作同一个key的隐患,将在事务讲解原子性。
适用事例:文章统计量访问;生成自增ID;存储文章数据。
3.1.3 递减数字
DECR key //每执行一次递减1
DECRBY key num //每执行一次递减num
3.1.4 增加指定浮点数
INCRBYFLOAT key num
3.1.5 向尾部增加值
APPEND key value
3.1.6 获取字符串长度
STRLEN key //每个汉字占用3个长度
3.1.7 同时设置/获取多个键值
MSET key1 value1 key2 value2 ...
MGET key1 key2 ....
3.2 散列类型(hash)
散列类型的字段值只能是字符串,包括不能嵌套其他的数据类型,其他的Redis数据类型也是不能嵌套
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,字段值存储属性值,如图所示:
3.2.1 赋值与取值
HSET key field value //设置对象单一属性值
HGET key field //获取对象单一属性值
HMSET key field1 value1 field2 value2 ... //设置对象多个属性值
HMGET key field1 field2 ... //获取对象多个属性值
HGETALL key //获取对象所有的键值
说明:HSET不区分是更新操作还是插入操作,当键不存在时,执行的是插入操作,返回的是1;当键存在时,执行更新操作,返回0。
3.2.2 判断字段是否存在
HEXISTS key field
3.2.3 当字段不存在时赋值
HSETNX key field value
说明:HSETNX和SET类似,只不过HSETNX是当字段存在时不进行任何的操作。
3.2.4 增加数字
HINCRBY key field num
说明:字符串类型有INCR和INCRBY,散列类型没有HINCR命令,可以使用HINCRBY key field 1来实现
3.2.5 删除字段
HDEL key field //返回被删除字段个数
HDEL key field1 field2 ...
3.2.6 只获取字段名或字段值
HKEYS key
HVALS key
3.2.7 获取字段数量
HLEN key
3.3 列表类型(list)
优点:列表数据类型的内部是使用双向列表实现的,获取接近链表两端的数据速度非常快。
缺点:通过索引访问元素非常慢。
3.3.1 向列表两端添加元素
LPUSH key value //向左边添加元素,指下一个元素添加在上一个元素的左边,依次往左
RPUSH key value //向右边添加元素
3.3.2 从列表两端弹出元素
LPOP key //在列表左边一次弹出一个,相当于在原列表中删除一个元素,返回弹出的元素
RPOP key
说明:若想要列表当做栈,使用LPUSH和LPOP或者RPUSH和RPOP;若想要列表当队列,使用LPUSH和RPOP或RPUSH和LPOP
3.3.3 获取列表中元素的个数
LLEN key
3.3.4 获取列表片段
LRANGE start stop //获取从start到stop之间的元素,索引从0开始
3.3.5 删除列表中指点的值
LREM key count value
当count>0时,LREM从列表左边删除count个值为value的元素;
当count<0时,LREM从列表右边删除count个值为value的元素;
当count=0时,LREM会删除列表中所有值为value的元素。
3.3.6 获取/设置指定索引的元素值
LINDEX key index
LSET key index value
3.3.7 只保留列表指定片段
LTRIM key start end
说明:LTRIM只保留从start到end的元素,列表其他元素都会被删除,这不同于LRANG的使用
3.3.8 向列表中插入元素
LINSERT key BEFORE/AFTER pivot value
说明:在列表中查找值为pivot的元素,根据after还是before来插入元素,返回的是插入元素后的个数。
3.4 集合类型(set)
集合里存储的数据是无序的、唯一的。
3.4.1 增加/删除元素
SADD key num ...
SREM key num ...
说明:既然集合是无序且唯一的,如果添加元素时集合中已经存在,则忽略次元素;若不存在则自动创建。
3.4.2 获取集合中的所有元素
SMEMBERS key
3.4.3 判断元素是否在集合中
SISMEMBER key num //当值存在返回1,当值或键不存在时返回0
3.4.4 集合间运算
SDIFF key num ... //差集,属于A集合但不属于B集合
SINTER key num ... //交集,属于A集合同时也属于B集合
SUNION key num ... //并集,所有属于A或属于B构成的集合(A集合和B集合相加后去重)
3.4.5 获得集合中元素的个数
SCARD key
3.4.6 进行集合运算并将结果存储
SDIFFSTORE destination key
SINTERSTORE destination key
SUNIONSTORE destination key
说明:SDIFFSTORE和SDIFF类似,只不过前者是将运算的结果存储到destination中,适用于将集合计算后的结果再与其他的集合运算。
3.4.7 随机获得集合中的元素
SRANDMEMBER key [count] //还可以传递count值来一次获取多个元素
说明:当count为正数时,会随机在集合中获取count个不重复的元素,当count大于集合长度时,则会返回集合的全部元素;
当count为负数时,会随机从集合中获取|count|个有可能重复的元素。
3.4.8 从集合中弹出一个元素
SPOP key
说明:之前列表类型的LPOP是每次从列表左边弹出元素,由于集合元素是无序的,SPOP会从集合中随机弹出一个元素。
3.5 有序集合类型(zset)
有序集合类型和列表类型相似之处:
(1)二者都是有序的;
(2)二者都可以获取某一范围内的元素;
有序集合类型和列表类型区别之处:
(1)列表类型内部是链表结构,对两端的元素操作速度快,对中间的操作速度慢;
(2)有序列表类型是使用散列表和跳跃表实现的,所以阅读中间部分的数据也很快;
(3)列表中不能简单的调整某个元素的位置,有序可以使用分数来实现;
(4)有序列表类型要比列表类型更耗费内存。
3.5.1 添加元素
ZADD key score num ... //如果添加的元素存在,则会用新的分数来替换掉旧的分数
3.5.2 获取元素的分数
ZSCORE key num
3.5.3 获取某个范围内的元素
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
说明:ZRANGE的顺序是从小到大,索引从0开始,ZREVRANGE是从大到小排列。WITHSCORES是排序的时候带着分数。
若两个元素的分数相同,则会按照字典顺序排列("0"<"9<"A"<"Z"<"a"<"z")
3.5.4 获取指定分数范围内的元素
ZRANGBYSCORE key min max [WITHSCORES] [LIMIT offset count]
说明:ZRANGEBYSCORE也是从小到大排序,若不希望包含端点值,则可以在score前加上"("符号。此外,-inf和+inf代表负无穷和正无穷。
LIMIT offset count 在获得的元素列表的基础上向后偏移offset个元素,获取前count个元素。
3.5.5 增加某个元素的分数
ZINCRBY key increment num
说明:若increment为负数,则代表减分。若指定的元素不存在,Redis会先创建并赋值为0后再进行操作。
3.5.6 获取集合中元素的数量
ZCARD key
3.5.7 获取指定分数范围内元素的个数
ZCOUNT key min max
3.5.8 删除一个或多个元素
ZREM key num ...
3.5.9 按照排名范围删除元素
ZREMRANGEBYRANK key start stop ...
3.5.9.1 按照分数范围删除元素
ZREMRANGEBYSCORE key start stop ...
3.5.9.2 获得元素的排名
ZRANK key num ...
ZREVRANK key num ..
说明:获取的排名是从0开始的,ZRANK为分数最小的排名为0;ZREVRANK为分数最大的排名为0。