文章目录
redis是什么?
Redis 是一个基于内存的高性能key-value数据库。 数据存储在内存中,访问的速度较快
什么时候用到redis?
- 会话缓存
- 全页缓存
- 发布/订阅
- 队列
- 排行榜/计数器
redis的优点有哪些?
- redis的速度快,因为数据存储在内存上,相比于关系型的数据库来说,读写的速度更快。
- 支持丰富的数据类型,string、set、hash、list 、sort set
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 事务是一组操作的集合,事务不具有原子性
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis的缺点由哪些
- 缓存雪崩的问题
(缓存在同一时间内大量过期,随后大量的请求落在数据可上导致连接异常) - 缓存和数据库之间的数据一致性的问题
(缓存无法保证强缓存一致性,如果允许有一定的不一致性的出现,可以使用缓存) - 缓存击穿的问题
(恶意用户模拟请求很多缓存中不存在的数据,由于缓存中不存在这些数据,导致这些请求落在数据库上,数据库中也没有,返回为空,一直重复,导致数据库异常) - 缓存的并发竞争问题
(多个客户端同时发送请求,由于redis 是单线程,在同一时刻只能处理一个请求,其他的请求会阻塞等待)
redis 相比于memcached由哪些好处
- memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
- redis的速度比memcached快很多
- redis可以持久化其数据
- memcached采用的是多线程非阻塞IO复用,redis采用的是单线程的IO复用,单线程消除了并发控制的开销。
redis 采用单进程单线程的为什么这么快
消除了传统数据库并发控制产生的开销
单线程消除了线程/进程频繁的上下文切换的开销
纯内存操作
采用非阻塞IO复用的机制
redis 并发竞争问题如何解决
redis 采用了单进程单线程,采用队列模式将并发访问改为串行访问,对于多个客户端链接不存在竞争。但是如果多个客户端并发请求连接的过程,可能出现连接超时、阻塞、客户端连