redis初识
天天听着后端同事们redis啊、mq啊、spring系列啊、DDD啊、怎么怎么建表、怎么怎么设计,听个皮毛。最近有幸听redis的技术分享,记下来,初次认识。
什么是redis
1、redis是一种非关系型数据库(nospl),
- 扩展(三大常见nospl-个人片面认识-以后多补充理解)
Redis
优点:
- 支持多种数据结构,啥字符串啊,双向链表啊,哈希表啊,集合与有序集合啊等等,其他我也不认、、、
- 持久化(RDB、AOF),数据表与(指令信息同步)日志的倒回。双写一致(redis和mysql中数据的一致性) 缺点:
- Redis使用单线程,性能看cpu
Memcache
优点:
- Memcached可以利用多核优势,吞吐量高 缺点:
- 只有键值对key、value的数据结构,缺少其他数据类型
- 数据无法很好的持久保存
MongoDB
优点:
- 插入快,查询丰富,负载高,适合大数据量存储和高访问 缺点:
- 不支持事务
为什么使用redis、应用场景
1、性能与并发(+分布式体系)
性能
内存和磁盘(你是打开一个内存中的应用快呢,还是打开一个磁盘中的应用快呢。人家内存子弹都上好了,你磁盘枪还没找到,我(内存)承认你(磁盘)比我大,但你没我快@_@)
并发
高并发的情况下,所有的请求直接访问数据库,DB顶不住。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,如果没有数据,在查询DB,并将DB查询出来的结果存储一份在redis中。
redis单线程为什么快
回想js,它也是单线程,它也挺快的,他们多多少少一个味道
1、内存中执行 2、单线程:上下文切换减少 3、非阻塞性IO流:多路复用与事件循环
常见问题
缓存雪崩、缓存击穿、缓存穿透
这三个问题结果都是一样:说白了就是大量请求,直接请求DB查询,DB它它它又顶不住了
雪崩
现象: 同一时间缓存大量失效,结果同上 解决:1、过期时间+随机数 2、双重存储更安全
击穿
现象: 一个高并发访问的缓存失效,结果同上 解决:1、永不过期 2、互斥锁(过会儿再来客官)
穿透
现象: 一直查询一个缓存中没有,数据库也没有的数据,结果同上 解决:1、拦截验参 2、定时失效 3、互斥锁(过会儿再来客官)
统一解决方案------加钱
双写一致
避免DB和缓存中数据不一致 解决方案:消息队列(失败了再来好吧)
数据库数据更新后,删除、更新对应缓存
还是有很多看不太懂的东西,以后多多理解-只会笑的提莫