Redis数据类型
简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
数据结构
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)和zset(有序集合)。
字符串(String)
string是redis最基本的类型,也是二进制安全的。string的一个键最大能存储512MB。
string的字符串对象的编码为int、raw或embstr:
- int:保存的是可以用long类型表示的整数值。
- raw:保存长度大于44字节的字符串(redis3.2之前是39字节,之后为44字节)
- embstr:保存长度小于44字节的字符串(redis3.2之前是39字节,之后为44字节)
注:embstr是针对短字符串的优化编码。embstr的好处在于创建时少分配一次空间,删除时少释放一次空间,对象的所有数据连接在一起,查询方便。而embstr的坏处也很明显,如果字符串的长度增加需要重新分配内存,所以embstr实现为只读。在int的保存的值超过了long的范围时,自动转化为raw。如果对embstr做修改时,先将embstr转换为raw,再做修改,修改后的对象也为raw(不关乎字符串的长度)
相关命令:
序号 | 命令及描述 | 例子 |
---|---|---|
1 | SET key value 设置指定key的值 |
|
2 | GET key 获取指定key的值 |
|
3 | GETRANGE key start end 返回key中字符串值的子字符串(start到end) |
|
4 | GETSET key value 修改key所对应的值,并返回key之前的值 |
|
5 | INCR key 对应的value自增1,如果没有key值,自动给你创建,并且复制为1。 自增的value是可以转成数字的 |
|
6 | DECR key 对应的value自减1 注:自减是可以转成数字的 |
哈希(hash)
hash是一个string类型的field和value的映射表,hash特别是和用于存储对象。每个hash可以存储 232 - 1 键值对(40多亿)。
相关命令:
序号 | 命令及描述 | 例子 |
---|---|---|
1 | HSET key field 将哈希表key中的字段field设置为value,如果key和field都已存在,则覆盖之前field的value。 |
|
2 | HMSET key field1 value1 [field2 value2] 同时将多个field-value对设置到哈希表key中,同样拥有覆盖功能。 |
|
3 | HSETNX key field value 只有在字段不存在时,设置哈希表字段的值,不能对已有值进行覆盖。 | |
4 | HGET key field 获取到存储在哈希表中指定字段(field)的值。 |
|
5 | HGETALL key 获取在哈希表中指定key的所有字段和值。 |
|
6 | HEXISTS key field 查看哈希表key中,指定的字段是否存在。 |
列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。可以在列表的头部和尾部进行添加数据。一个列表最多包含232 - 1个元素
相关命令:
序号 | 命令及描述 | 例子 |
---|---|---|
1 | LPUSH/RPUSH key value1[value2] 将一个或多个值从头部/尾部插入到队列中。 |
|
2 | LPOP/RPOP key 从列表头部/尾部移除一个元素,返回值为移除元素。 |
|
3 | LRANGE KEY_NAME START END 返回列表指定区间内的元素。0代表第一个元素,-1代表最后一个元素 |
|
4 | BLPOP/BRPOP LIST1 LIST2… LISTN TIMEOUT 移除并获取列表的第一个元素/最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出为止。 |
|
5 | LLEN KEY 获取列表长度 |
|
6 | LREM key count value 移除列表元素。count的值有以下几种: count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count。 count < 0:从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。 count = 0:移除表中所有与value相等的值。 |
集合(Set)
Set是String类型的无序集合,且集合成员是唯一的,无重复值。Set是通过哈希表来实现的,所以对set的操作复杂度都是O(1)。
集合中最大的成员数为232 - 1
相关命令:
序号 | 命令及描述 | 例子 |
---|---|---|
1 | SADD key member1 [member2] 向几何中添加一个或多个成员。无法添加相同元素。 |
|
2 | SMEMBERS key 返回集合中所有的成员。 |
|
3 | SCARD key 返回集合中元素的数量。 |
|
4 | SISMEMBER key value 判断key中是否存在value值。 |
|
5 | SREM key member1 …membern 移除集合key中一个或多个元素。当member没有时,不会保存,而是忽略掉。 |
|
6 | SRANDMEMBER key [count] 返回集合key中的一个随机元素,其中count参数可以规定返回数量: count为正数时,当count小于集合基数,返回一个count个数的数组;当count大于集合基数时,返回整个数组。 count为负数,返回一个长度为count绝对值的可能会出现重复值的数组。 |
|
7 | SMOVE source destination member 将指定member元素从source集合移动到destination集合中。 若destination集合中有member元素,则只将元素从source移除 |
有序集合(sorted set)
有序集合只是在集合上为每个元素关联了一个double类型的分数,集合通过分数来排序,分数的数值是可以重复。
有序集合中最大的成员数为为232 - 1。
相关命令:
序号 | 命令及描述 | 例子 |
---|---|---|
1 | ZADD key score1 value1…scoren valuen 可以将一个或多个成员元素及其分数数值加入到有序集合中。 如果成员已存在则更新该成员的数值。 |
|
2 | ZCARD key 返回指定key集合中的元素数量。 |
|
3 | ZINCRBY key increment member 对指定的成员分数加上增量,其中增量可以为负值,让分数减小。 ==注:==当指定的key不存在时,该命令和ZADD命令是一样的。 |
|
4 | ZRANGE key start stop [WITHSCORES] 返回有序集合key,其中start和stop的数值为0表示第一个成员,为-1表示最后一个成员以此类推即可。WIRHSCORES的选项是选择但会显示中是否显示成员对应的分数数值。 |
|
5 | ZRANK key member 返回集合中指定成员的排名。 |
|
6 | ZSCORE key member 返回有序集中指定成员的分数值。 |
|
7 | ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATESUM] 计算给定的一个或多个集合的并集,其中numkeys限定集合个数,并将结果存储到destination的集合中 。命令中的WIEIGHTS选项可以将每个集合中每个元素的分数做相应的乘法运算。 命令中的AGGREGATE选项,可以指定并集的聚合方式,默认值为sum,即相同元素的分值将会相加,存储在并集的结合中,而max或min,则是存储每个元素的最大或最小值。 |
|