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
进行有序排列
小结
据说:Redis
的这几种数据结构挺重要的,如果在面试的时候说你会Redis
,那么这几种数据结构是必考的内容,所以在此当做笔记简单的记录总结一下(仅供参考)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。