一、什么是redis
redis英文全称是Remote Dictionary Server(远程字典服务)是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库,提供了多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的,性能极高,它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis是有原子性的,支持事务、持久化、单线程、LRU 驱动事件、多种集群方案。
二、redis的五大数据类型
redis基本数据类型有:
1.string(字符串)
2.hash( 哈希)
3.list(列表)
4.set (集合)
5.zset (有序集合)
string
字符串是基本的key-value结构,key和value最大512m,key不建议超过1k,值可以是各种格式的字符、JSON、二进制、编码后的图片。
应用场景:
-
缓存
-
分布式ID
-
分布式锁
-
全局Session
-
全局计数器
底层数据结构:
string的底层实现可以是int、raw、embstr。
int 编码是用来保存整数值,raw编码是用来保存长字符串,而embstr是用来保存短字符串。
hash
Hash是一个键值(key-value)的集合。Redis 的 Hash 是一个 String 的 Key 和 Value 的映射表,Hash 特别适合存储对象。
应用场景:
保存对象的多个属性
和string的对比,优势是:可以灵活读写对象的部分属性
常用命令:hget,hset,hgetall 等。
底层数据结构:
hash的底层是 ziplist(压缩列表) 或者 hashtable(哈希表)
当同时满足下面两个条件时,使用ziplist(压缩列表):
- 哈希对象保存的所有键值对的键和值的字符串长度都小于64字节
- 哈希对象保存的键值对的数量小于512个
不能满足这两个条件的时候使用 hashtable 哈希表
list
list采用链表结构保存多个数据,是有序的、可重复的。
应用场景:
-
模拟数组、栈、队列等数据结构
-
线型结构,如:粉丝、点赞列表
-
消息队列
set
s