Redis常见数据结构

更新日期: 2019-07-14阅读: 2.5k标签: 结构

Redis的简介

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

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


Redis中的数据类型

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



数据类型之String(字符串)

Redis中的字符串被称为简单动态字符串「SDS」,这种结构很像Java中的ArrayList,其长度是动态可变的.

String是Redis中最基本的数据类型,一个key对应一个value

String类型的value是基于二进制存储的,所以完全可以存储图片和影音等二进制数据

key的大小最大512mb

struct SDS<T> {
  T capacity;       // 数组容量
  T len;            // 数组长度
  byte[] content;   // 数组内容
}

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



数据据类型之Hash(哈希)

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

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

例如:

它可以 已key: 1和 name 为key取value:张三。


数据类型之List(列表)

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



数据类型之Set(集合)

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


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

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


链接: https://fly63.com/article/detial/4679

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!