Redis数据类型

51次阅读

共计 1989 个字符,预计需要花费 5 分钟才能阅读完成。

一、字符串

  1. 字符串类型是 redis 最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的,
  2. 所以字符串类型能为其他四种数据结构的学习尊定基础。
  3. 字符串类型实际上可以是字符串
  4. (简单的字符串、复杂的字符串(xml、json)、数字(整数、浮点数)、二进制(图片、音频、视频)),
  5. 但最大不能超过 512M。

使用场景:

  1. 缓存功能:字符串最经典的使用场景,redis 最为缓存层,Mysql 作为储存层,绝大部分请求数据都是
  2. redis 中获取,由于 redis 具有支撑高并发特性,所以缓存通常能起到加速读写和降低 后端压力的作用。
  3. (redis 为何具备支撑高并发的特性,下次文章讲解)。
  4. 计数器:许多运用都会使用 redis 作为计数的基础工具,他可以实现快速计数、查询缓存的功能,
  5. 同时数据可以一步落地到其他的数据源。
  6. 如:视频播放数系统就是使用 redis 作为视频播放数计数的基础组件。
  7. 共享 session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,
  8. 用户刷新一次访问可能会需要重新登录,为避免这个问题可以用 redis 将用户 session 集中管理,
  9. 在这种模式下只要保证 redis 的高可用和扩展性的,每次获取用户更新或查询登录信息
  10. 都直接从 redis 中集中获取。
  11. 限速:处于安全考虑,每次进行登录时让用户输入手机验证码,为了短信接口不被频繁访问,
  12. 会限制用户每分钟获取验证码的频率。

__
二、哈希
在 redis 中哈希类型是指键本身又是一种键值对结构,如 value={{field1,value1},……{fieldN,valueN}}
• 1
• 2
使用场景:

  1. 哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。
  2. 所以常常用于 用户信息 等管理,但是哈希类型和关系型数据库有所不同,哈希类型是稀疏的,
  3. 而关系型数据库是完全结构化的,关系型数据库可以做复杂的关系查询,而 redis 去模拟关系型复杂查询
  4. 开发困难,维护成本高。

__
三、列表

  1. 列表类型是用来储存多个有序的字符串,列表中的每个字符串成为元素(element), 一个列表最多可以储存
  2. 2 的 32 次方 - 1 个元素,在 redis 中,可以队列表两端插入(pubsh)和弹出(pop),还可以获取指定范围的元素
  3. 列表、获取指定索引下表的元素等,列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,
  4. 在实际开发中有很多应用场景。
  5. 优点:
  6. 1. 列表的元素是有序的,这就意味着可以通过索引下标获取某个或某个范围内的元素列表。
  7. 2. 列表内的元素是可以重复的。

使用场景:

  1. 消息队列:redis 的 lpush+brpop 命令组合即可实现阻塞队列,生产者客户端是用 lupsh 从列表左侧插入元素,
  2. 多个消费者客户端使用 brpop 命令阻塞时的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡
  3. 和高可用性

消息队列模型↑

  1. 文章列表:每个用户都有属于自己的文章列表,现在需要分页展示文章列表,此时可以考虑使用列表,列表不但有序
  2. 同时支持按照索引范围获取元素。

使用列表技巧:
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)
__
四、集合

  1. 集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中不允许有重复的元素,并且集合中的元素是
  2. 无序的,不能通过索引下标获取元素,redis 除了支持集合内的增删改查,同时还支持多个集合取交集、并集、
  3. 差集,并合理的使用好集合类型,能在实际开发中解决很多实际问题。

使用场景:

  1. 标签(tag):集合类型比较典型的使用场景,如一个用户对娱乐、体育比较感兴趣,另一个可能对新闻感兴
  2. 趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,
  3. 这些数据对于用户体验以及曾强用户粘度比较重要。
  4. (用户和标签的关系维护应该放在一个事物内执行,防止部分命令失败造成数据不一致)
  5. sadd=tagging(标签)
  6. spop/srandmember=random item(生成随机数,比如抽奖)
  7. sadd+sinter=social Graph(社交需求)


__
五、有序集合

  1. 有序集合和集合有着必然的联系,他保留了集合不能有重复成员的特性,但不同得是,有序集合中的元素是可以
  2. 排序的,但是它和列表的使用索引下标作为排序依据不同的是,它给每个元素设置一个分数,作为排序的依据。
  3. (有序集合中的元素不可以重复,但是 csore 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相
  4. 同)。
  5. 列表、集合、有序集合三者的异同点

使用场景:

  1. 排行榜:有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:
  2. 按照时间、按照播放量、按照获得的赞数等。

更多技术资讯可关注:gzitcast

正文完
 0

Redis-数据类型

51次阅读

共计 1577 个字符,预计需要花费 4 分钟才能阅读完成。

Redis 简介

Redis 是一个速度非常快的非关系数据库, 它可以存储键与 5 种不同两类型的值之间的映射. 可以将存储在内存中的键值对持久到硬盘, 可以使用复制特性来扩展读性能, 还可以使用客户端分片来扩展写性能.

分片
分片是一种将数据划分为多个部分的方法, 对数据的划分可以基于键包含的 ID, 基于键的散列值, 或者基于以上两种的某种组合.

通过对数据进行分片, 用户可以将数据存储到多台机器里面, 也可以从多台机器里面获取数据, 这种方法在解决某些问题时可以获得线性级别的性能提升.

Redis 实现了主从复制特性: 执行复制的从服务器会连接上主服务器, 接收主服务器发送的整个数据库的初始副本; 之后主服务器执行的写命令, 都会被发送给所有连接着的从服务器去执行, 从而实时地更新从服务器的数据集.

数据类型

Redis 中的字符串

STRING 可以是字符串, 整数或者浮点数. 对整个字符串或者字符串的其中一部分执行操作; 对整个数和浮点数执行自增或者自减操作.

三个简单的例子:

set key value (如果存在就是修改, 不存在则是添加)
get key (通过键获取值)
del key (删除, 适用于所有类型)

Redis 中的列表

LIST 一个链表, 链表上的每个节点都包含了一个字符串. 从链表的两端推出或弹出元素; 根据偏移量对链表进行修剪; 读取单个或多个元素; 根据值查找或移除元素.

列表 (链表) 是有序的. 另外获取元素时, 元素下标是从 0(零) 开始

几个简单的例子:

LPUSH 从左端插入元素.
RPUSH 从右端插入元素.
LPOP 从列表的左端弹出一个值, 并返回弹出的值(会移除元素).
RLOP 从列表的右端弹出一个值, 并返回弹出的值(会移除元素).
LRANGE 获取列表在给定范围上的所有值. lrange key 0 -1 表示从零开始获取到最后.
LINDEX  获取列表在给定位置上的单个元素.

Redis 中的集合

SET 包含字符串的无序收集器, 并且被包含的每个字符串都是不可重复的. 添加, 获取, 移除单个儿元素; 检查一个元素是否存在集合中; 计算交集, 并集, 差集; 从集合里面随机获取元素.

集合中的所有元素都是无序不可重的.

几个简单的例子:

sadd 将元素添加到集合, 返回添加成功的元素个数.
smembers 返回集合包含的所有元素.
sismember 检查指定元素是否在集合中, 如果存在返回 1, 否则返回 0.
srem 如果给定的元素存在集合中, 就移除, 返回被移除元素的数量.

Redis 中的散列

HASH 包含键值对的无序散列表. 添加, 获取, 移除单个键值对或获取所有键值对.

我们可以把 Java 中的 map 集合看做是 redis 中的散列. 键为 String, 值为 Object, 也就是说散列适合存储对象.

散列中的键 (field) 都是唯一并且是无序排列的, 没一个键对应一个值.

几个简单的例子:

hset 如果给定的哈希表并不存在, 那么一个新的哈希表 (散列). 如果域 field (键) 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖.
hget 默认情况下返回给定域的值. 如果给定域不存在于哈希表中, 又或者给定的哈希表并不存在, 那么命令返回 ```nil```.
hgetall 返回散列中所有的域和值.
hdel 移除散列中的域.

Redis 中的有序集合

ZSET 字符串成员与浮点数分值之间的有序映射, 元素的排列顺序由分值的大小决定. 添加, 获取, 删除单个元素; 根据分值范围或者成员来获取元素.

有序集合和散列一样, 都是用于存储键值对: 有序集合的键被称为成员, 每个成员都是各不相同的; 而有序集合的值被称为分值, 分值必须为浮点数.

可以根据成员访问元素, 也可以根据分值以及分值的排列顺序来访问元素的结构.

几个简单的例子:

zadd 将一个带有给定分值的成员添加到有序集合里面.
zrange 根据元素在有序排列中所处的位置, 从有序集合里面获取多个元素.
zrangebyscore 获取所有元素.
zrem 移除元素

正文完
 0