乐趣区

Redis-常见数据结构

Redis 的简介

  • Redis 是一个开源(BSD 许可),内存存储的数据结构服务器, 可用作数据库,高速缓存和消息队列代理
  • 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs 等数据类型
  • 内置复制、Lua 脚本、LRU 收回、事务以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。

简言之,Redis 是一种面向“键 / 值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。

Redis 中的数据类型

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • ZSet(Sorted Set)有序的集合

数据类型之 String(字符串)

  • Redis中的字符串被称为 简单动态字符串「SDS」,这种结构很像 Java 中的 ArrayList,其长度是动态可变的.
  • StringRedis 中最基本的数据类型,一个 key 对应一个value
  • String类型的 value 是基于二进制存储的, 所以完全可以存储图片和影音等二进制数据
  • key的大小最大512mb
struct SDS<T> {
  T capacity;       // 数组容量
  T len;            // 数组长度
  byte[] content;   // 数组内容}

content[] 存储的是字符串的内容,capacity表示数组分配的长度,len表示字符串的实际长度。

数据据类型之 Hash(哈希)

  • Hash 是一个键值对集合。Hash是一个 string 类型的 fieldvalue的映射表,Hash特别适合用于存储对象object

RedisHash 与普通的有所不同,它可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。

例如:

它可以 已 key: 1namekeyvalue张三

数据类型之 List(列表)

  • List说白了就是链表(Redis使用双端链表实现的 List。使用List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine)。
  • List的另一个应用就是消息队列,可以利用 List*PUSH操作。将任务存在List,然后工作线程再用POP 操作将任务取出进行执行。
  • Redis还提供了操作 List 中某一段元素的 API,你可以直接查询,删除List 中某一段的元素
  • RedisList 中的元素是可以重复的,也就是说在 Redis 列表类型中,可以保存同名元素,如下图所示:

数据类型之 Set(集合)

  • Set 就是一个集合,集合的概念就是一堆不重复值的组合
  • Set数据类型的底层可以是 intset(整数集) 或者是hashtable(散列表也叫哈希表)。
  • 当数据都是整数并且数量不多时,使用 intset 作为底层数据结构;
  • 当有除整数以外的数据或者数据量增多时,使用 hashtable 作为底层数据结构。

数据类型之 ZSet(有序集合)

  • Redis中的 Zset,也叫做有序集合。它的底层是ziplist 压缩列表)或 skiplist跳跃表)。
  • Set 相比,ZSet(Sorted Set)是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按score 进行有序排列

小结

据说:Redis的这几种数据结构挺重要的,如果在面试的时候说你会Redis,那么这几种数据结构是必考的内容,所以在此当做笔记简单的记录总结一下(仅供参考)。

退出移动版