Redis的简介

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

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

Redis中的数据类型

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

clipboard.png

数据类型之String(字符串)

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

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

clipboard.png

数据据类型之Hash(哈希)

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

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

例如:
clipboard.png

它可以 已key: 1namekeyvalue张三

数据类型之List(列表)

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

clipboard.png

数据类型之Set(集合)

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

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

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

小结

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

潘佳琦
894 声望34 粉丝

为 API 生,为框架死,为 debug 奋斗一辈子;