redis 数据类型及操作命令
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- String(字符串)
String是最常用、最简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。SET key value
设置指定 key 的值GET key
获取指定 key 的值INCR key
将 key 中储存的数字值增一INCRBY key increment
将 key 所储存的值加上给定的增量值(increment)INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment)DECR key
将 key 中储存的数字值减一DECRBY key decrement
key 所储存的值减去给定的减量值(decrement)APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾DEL key [key ...]
删除keyEXISTS key [key ...]
key是否存在 - Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象
Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。HSET key field value
为指定的key设定field/valueHMSET key field value [field value ...]
设置key中的多个field/valueHDEL key field1 [field2]
删除一个或多个哈希表字段HEXISTS key field
查看哈希表 key 中,指定的字段是否存在HGET key field
获取存储在哈希表中指定字段的值HMGET key field [field ...]
获取key中的多个field的值HGETALL key
获取在哈希表中指定 key 的所有字段和值HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 incrementHDEL key field [field ...]
删除一个或多个字段del key
删除整个hash - List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构
应用场景:
Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpopLPUSH key value [value …]
将一个或多个值 value 插入到列表 key 的表头LPUSHX key value
将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表RPUSH key value [value …]
将一个或多个值 value 插入到列表 key 的表尾(最右边)RPUSHX key value
将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表LPOP key
移除并返回列表 key 的头元素RPOP key
移除并返回列表 key 的尾元素LINDEX key index
返回列表 key 中,下标为 index 的元素LINSERT key BEFORE|AFTER pivot value
将值 value 插入到列表 key 当中,位于值 pivot 之前或之后LSET key index value
将列表 key 下标为 index 的元素的值设置为 valueLRANGE key start stop
返回列表 key 中指定区间内的元素,可以为负数LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除BLPOP key [key …] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止LREM key count value
根据参数 count 的值,移除列表中与参数 value 相等的元素
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。 - 集合(Set)
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。SADD key member [member …]
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略SMEMBERS key
返回集合 key 中的所有成员SISMEMBER key member
判断 member 元素是否集合 key 的成员SPOP key
移除并返回集合中的一个随机元素SRANDMEMBER key [count]
如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值SREM key member [member …]
移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略SCARD key
返回集合 key 的基数(集合中元素的数量)SINTER key [key …]
交集成员的列表SINTERSTORE destination key [key …]
这个命令类似于 SINTER key [key …] 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集SUNION key [key …]
并集成员的列表SDIFF key [key …]
返回一个集合的全部成员,该集合是所有给定集合之间的差集 - 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。ZADD key score member [[score member] [score member] …]
将一个或多个 member 元素及其 score 值加入到有序集 key 当中ZRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定区间内的成员ZSCORE key member
返回有序集 key 中,成员 member 的 score 值ZINCRBY key increment member
为有序集 key 的成员 member 的 score 值加上增量 incrementZCARD key
返回有序集 key 的基数ZCOUNT key min max
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量ZREVRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定区间内的成员ZRANK key member
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列ZREM key member [member …]
移除有序集 key 中的一个或多个成员,不存在的成员将被忽略
参考: