1、Redis是什么:
- 1.Redis
(REmote DIctionary Server)
:C语言开发的,是一个开源的、基于内存的key-value
型NoSQL数据库
- 2.Redis默认端口:6379
- 3.默认16个数据库,类似数组下标从0开始,初始默认使用0号库
- 4.使用命令
select <dbid>
来切换数据库,如:select 8
:就是使用8号库的意思,所有库统一密码管理,所有库同样的密码 - 5.
dbsize
查看当前数据库的key的数量;flushdb
清空当前库;flushall
通杀全部库
2、redis功能与应用:
- 1.
Redis可以做分布式缓存
,挡在mysql数据库之前的带刀护卫,来分担MySQL数据查询的压力 - 2.内存存储和持久化(RDB + AOF),Redis
支持异步方式将内存中的数据写到硬盘上
,同时不影响服务 - 3.可搭建高可用架构:
- 单机架构
- 主从架构
- 哨兵架构
- 集群架构
- 4.为
热点数据加速查询速
度(主要场景),如热点商品,热店新闻,推广类高频信息。可以是降低数据库的IO; - 5.丰富的数据类型应用:
- 任务
队列
:如秒杀,排队购票 - 计数器:像
即时信息查询
,如各种网站访问量的统计,在线人数信息等,使用的数据类型是HyperLogLog
; - 排名+点赞:各样的排行榜场景,如电商于都销量排行榜、社交APP打赏礼物排行榜、小程序投票排行榜、小说网站对小说进行排名,根据排名,将排名靠前的小说推荐给用户等,可以使用zset来实现;
- 任务
- 6.
时效性信息控制
:如验证码控制,控票防止超卖问题等 - 7.
分布式锁
的应用 - 8.
分布式数据共享
,如分布式集群架构中的session分离
3、Redis优势:
- 1.Redis的读写性能很高,redis能读的速度是110000次/秒,写的速度是81000次/秒;
面试:Redis为什么这么快
: 我们可以从4个方面来回答这个问题:分别是Redis的存储方式、线程模型、IO模型、数据结构
4个方面:- 首先其存储方式是基于内存的,直接访问内存要比访问磁盘的速度快的多,除了redis的持久化操作外,Redis很少与磁盘进行交互,大多数Redis的读写都是基于内存的,所以说其效率比较高;
- Redis具有优秀的线程模型及IO模型:Redis使用单个主线程来执行命令,不需要进行线程的切换,避免了上下文切换带来的性能开销,大大提高了Redis的运行效率和响应速度。Redis采用I/O多路复用技术,实现了单个线程同时处理多个客户端连接的能力,从而提高了Redis的并发能力。在
- Redis6.0之后,为了提高I/O的性能,引入了多线程机制机制,利用多线程的机制并发处理网络请求,从而减少了Redis由于网络I/O等待造成的影响;
- Reids具有丰富高效的数据结构,如字符串、哈希、Zset等,这些数据结构大多操作的时间复杂度都是O(1)。
- 2.Redis
支持存储的value类型很多
,包括string(字符串)
、list(链表)
、set(集合)
、zset(sorted set --有序集合)
和hash(哈希类型)等
- 3.Redis的这些数据类型都支持
push/pop、add/remove
及取交集并集和差集
及更丰富的操作,而且这些操作都是原子性
的。 - 4.在此基础上,Redis
支持各种不同方式的排序
,数据都是缓存在内存中
。但是Redis也是支持持久化。可以进行数据灾难恢复
- 5.
Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件
。并且在此基础上实现了master-slave(主从)同步
- 6.Redis内部采用
单线程机制
进行工作,每个命令具备原子性 - 7.Redis是单线程+多路IO复用技术:
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)
;如下图:多线程是用户线程,单线程是黄牛,即多个客户端连接(socket)复用一个服务器线程。
4、Redis7中添加的新特性:
- 1.体和之前的redis版本保持一致和稳定,主要是自身底层性能和资源利用率上的优化和提高,如果你生产上系统稳定,不用着急升级到最新的redis7版本