Redis初识
Redis是什么?
- 开源
- 基于键值的存储服务系统
- 多种数据结构
- 高性能、功能丰富
Redis的特性
- 速度快
- 持久化
- 多种数据结构
- 支持多种编辑语言
- 功能丰富
- 简单
- 主从复制
- 高可用、分布式
Redis特性-速度快
10w ops (官方10w次读写)
数据存在哪? 内存
什么语言写? C语言(50000 line)
线程模型? 单线程
速度快-内存
image.png
Redis特性-持久化(断电不丢数据)
Redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上。
Redis特性-多种数据结构
String(字符串)
string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
哈希(Hash)类型:(map<string,string>)
我们可以将Redis中的Hash类型看成具有<key,<key1,value>>,其中同一个key可以有多个不同key值的<key1,value>,所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。
List类型
List类型是按照插入顺序排序的字符串链表(所以它这里的list指的相当于java中的linkesdlist)。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List类型:(链表:最后一个插入的元素,位置索引为o)
set类型
Set类型看作为没有排序的字符集合。如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。
Sorted-Sets类型
Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。成员是唯一的,但是分数(score)却是可以重复的。
分数:按分数高低排序。位置索引:分数最低的索引为0
Bitmaps
bitmaps不是一个真实的数据结构。而是String类型上的一组面向bit操作的集合。由于strings是二进制安全的blob,并且它们的最大长度是512m,所以bitmaps能最大设置2^32个不同的bit。
Bitmaps的最大优点就是存储信息时可以节省大量的空间。例如在一个系统中,不同的用户被一个增长的用户ID表示。40亿(2^32=410241024*1024≈40亿)用户只需要512M内存就能记住某种信息,例如用户是否登录过。
HyperLogLogs
HyperLogLog是用于计算唯一事物的概率数据结构(从技术上讲,这被称为估计集合的基数)。如果统计唯一项,项目越多,需要的内存就越多。因为需要记住过去已经看过的项,从而避免多次统计这些项。
GEO
Redis的GEO特性在 Redis3.2版本中推出,这个功能可以将用户给定的地理位置(经度和纬度)信息储存起来,并对这些信息进行操作
功能丰富
发布订阅
Lua脚本
事务
pipeline
简单
不依赖外部库(like libevent)
单线程模型
主从复制
高可用、分布式
高可用 : Redis-Sentinel(v2.8)支持高可用
分布式:Redis-Cluster(v3.0)支持分布式
Redis典型应用场景
-
缓存系统
-
计数器
微博点赞与评论技术
视频网站播放数量 -
消息队列系统
简单消息队列 -
排行榜
-
社交网络
粉丝数 -
实时系统
垃圾邮件过滤器