文案分享:
“生活想要活埋了我,不料我是一粒种子”
Life wanted to bury me alive, but I was a seed
什么是redis?
redis是一个高性能的key-value的存储系统,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove等操作,而且这些操作都是原子性的。为了保证效率,数据都缓存在内存中,同时redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加到记录文件,并且在此基础上实现了主从同步
redis解决了什么问题?
首先,redis是对mysql的一种补充,redis解决了mysql存在的问题。
那么说一下mysql存在的问题:
1.MySQL支持并发访问的能力有限,当有大量并发请求的时候,MySQL会宕机。
2.MySQL是基于磁盘的IO,所以访问速度就很慢,当我们需要很快的响应速度的时候,MySQL不能满足。
而Redis就是解决了这两个问题
redis是如何解决的这两个问题(简单介绍)
实际上,在项目中使用redis,主要从两个角度去考虑:性能和并发
(一)性能方面:当我们在查询某条数据时,需要执行的时间特别久,且结果不频繁变化的sql,就特别适合将结果放入缓存中,这样后面的请求就直接去缓存读取,不需要再进行磁盘IO,提高响应速度。
(二)并发方面:在大并发的情况下,所有的请求直接访问数据库,数据库可能会宕机,这时候就需要redis做一个缓冲操作,在读取数据的时候先访问redis,读取到直接返回,读取不到再访问MySQL,并且把读取到的数据,存入到缓存,下次再需要读取这条数据的时候,直接从缓存读取即可。
公司常见的设计方案是:redis+mysql读写分离方案:
mysql+redis的读业务数据流程图展示:
mysql+redis的写业务数据流程图展示:
Redis的五种基本类型
String,list,set,zset,hash
String
String是Redis的最基本数据类型,其他的几种类型,多多少少都是在此基础上实现的
应用场景:
1.缓存功能,利用String存值,例如音频或者图像,数字的字符串
2.计数器
3.统计数量
4.共享session,访问页面cookie,cookie客户端,有安全隐患,
可以利用redis对session集中管理,保证redis的高可用。
list
list是用来存储多个有序字符串的,redis可以从列表的两端插入或者弹出数据,
支持读取指定范围的元素集,支持读取下标,基本和java差不多,元素有序,可重复。
应用场景:
1.消息队列:因为redis可以从列表的两端插入或者弹出数据,
我们就可以利用左进右出的命令来完成队列的设计
2.分页显示:利用list的元素有序以及可以支持指定范围查询获取元素,来实现分页
set
set类型和list相似,都可以用来存储多个字符串的集合,不同的是set是无序的,并且不可重复
应用场景:
1.兴趣爱好标签 因为set的特点是集合,无序
2.统计网站的ip 利用的是set的唯一性
Zset
相当于set的衍生,同样不可重复,但是可以排序,他把每个元素设置了一个分数
应用场景:
1.排行榜 有序集合 唯一性
hash
hash是一个键值对的集合,redis本身就是一个key-value的形式,
hash只不过是在此基础上又嵌套了一层key-value
应用场景:
1.用来存储关系型数据库中表记录,一条记录作为一个key-value,
把每列的属性值对应成field-value存储到hash表中,key值来区分表中的主键。
2.存储用户信息