Redis数据类型及基本操作
redis中有五种数据存储类型
- string
- hash
- list
- set
- sorted_set
string
- 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
- 存储数据的格式:一个存储空间保存一个数据
- 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
string 类型数据的基本操作
- 添加/修改数据
1 | set key value |
- 获取数据
1 | get key |
- 删除数据
1 | del key |
- 添加/修改多个数据
1 | mset key1 value1 key2 value2 … |
- 获取多个数据
1 | mget key1 key2 … |
- 获取数据字符个数(字符串长度)
1 | strlen key |
- 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
1 | append key value |
string 类型数据的扩展操作
- 设置数值数据增加指定范围的值
1 | incr key |
- 设置数值数据减少指定范围的值
1 | decr key |
string 类型数据操作的注意事项
① 表示运行结果是否成功
(integer) 0 → false 失败
(integer) 1 → true 成功
② 表示运行结果值
(integer) 3 → 3 3个
(integer) 1 → 1 1个
数据未获取到
(nil)等同于null
- 数据最大存储量
512MB
- 数值计算最大范围(java中的long的最大值)
9223372036854775807
hash
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
需要的存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储
hash 类型数据的基本操作
添加/修改数据
1 | hset key field value |
获取数据
1 | hget key field |
删除数据
1 | hdel key field1(field2) |
添加/修改多个数据
1 | hmset key field1 value1 field2 value2 … |
获取多个数据
1 | hmget key field1 field2 … |
获取哈希表中字段的数量
1 | hlen key |
获取哈希表中是否存在指定的字段
1 | hexists key field |
hash 类型数据扩展操作
获取哈希表中所有的字段名或字段值
1 | hkeys key |
设置指定字段的数值数据增加指定范围的值
1 | hincrby key field increment |
hash 类型数据操作的注意事项
- hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,
对应的值为(nil)
每个 hash 可以存储 2 32 - 1 个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存
储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
- hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问
瓶颈
list
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现
list 类型数据基本操作
添加/修改数据
1 | lpush key value1 [value2] …… |
获取数据
1 | lrange key start stop |
获取并移除数据
1 | lpop key |
list 类型数据扩展操作
规定时间内获取并移除数据
1 | blpop key1 [key2] timeout |
移除指定数据
1 | lrem key count value |
list 类型数据操作注意事项
list中保存的数据都是string类型的,数据总容量是有限的,最多2 32 - 1 个元素 (4294967295)。
list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
获取全部数据操作结束索引设置为-1
list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
set
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
set 类型数据的基本操作
- 添加数据
1 | sadd key member1 [member2] |
- 获取全部数据
1 | smembers key |
- 删除数据
1 | srem key member1 [member2] |
- 获取集合数据总量
1 | scard key |
- 判断集合中是否包含指定数据
1 | sismember key member |
set 类型数据的扩展操作
- 随机获取集合中指定数量的数据
1 | srandmember key [count] |
- 随机获取集合中的某个数据并将该数据移出集合
1 | spop key [count] |
- 求两个集合的交、并、差集
1 | sinter key1 [key2] |
- 求两个集合的交、并、差集并存储到指定集合中
1 | sinterstore destination key1 [key2] |
- 将指定数据从原始集合中移动到目标集合中
1 | smove source destination member |
set 类型数据操作的注意事项
set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
sorted_set
新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
需要的存储结构:新的存储模型,可以保存可排序的数据
sorted_set类型:在set的存储结构基础上添加可排序字段
sorted_set 类型数据的基本操作
添加数据
1 | zadd key score1 member1 [score2 member2] |
获取全部数据
1 | zrange key start stop [WITHSCORES] |
删除数据
1 | zrem key member [member ...] |
按条件获取数据
1 | zrangebyscore key min max [WITHSCORES] [LIMIT] |
条件删除数据
1 | zremrangebyrank key start stop |
获取集合数据总量
1 | zcard key |
集合交、并操作
1 | zinterstore destination numkeys key [key ...] |
sorted_set 类型数据的扩展操作
获取数据对应的索引(排名)
1 | zrank key member |
score值获取与修改
1 | zscore key member |
sorted_set 类型数据操作的注意事项
score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时
候要慎重
- sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反
复覆盖,保留最后一次修改的结果