2.Redis基础

1.Redis是什么

Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。

2.Redis的优点

(一)读写性能优异,每秒可达数十万次的读写
(二)支持持久化,支持AOF和RDB两种持久化策略
(三)支持事物,Redis的每一个操作都是原子性的,也可以将多个操作合并为一个操作,一起执行
(四)数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
(五)支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

3.Redis的缺点

(一)数据库容量受到物理内存的限制,不能用作海量数据的高性能读写。
(二)Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败。
(三)主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
(四)Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

4.为什么使用Redis

(一)高性能:可以将数据库的数据缓存在内存之中,在第二次查询时直接在缓存中进行查询,不必再读取数据库,加快程序的执行性能
(二)高并发,操作缓存的并发量远大于访问数据库的并发量

5.Redis与map,Guava缓存的差异

Redis可以保证多个实例共用一份缓存数据,保证每个实例中的缓存数据的一致性,且支持持久化
Map作为缓存,每个实例单独一份,不能保证每个实例中的缓存具有一致性,且不支持持久化

6.Redis为什么这么快

(一)基于纯内存
(二)基于单线程,避免上下文切换
(三)多路IO服用,避免IO阻塞

7.Redis的应用

(一)缓存
(二)消息队列
(三)计数器
(四)分布式锁

8.Redis的数据类型

(一)String——适合最简单的k-v存储,配置信息等,就用这种类型来存储。
(二)hash——存储结构化数据。如商品详情,个人信息详情,新闻详情等。
(三)list——因为list是有序的,存储列表信息。如省市区表、字典表等。因为list是有序的,适合根据写入的时间来排序,如:最新的***,消息队列等。
(四)set——可以对两个set提供交集、并集、差集操作。例如:查找两个人共同的好友等。
(五)Sorted Set——自动会根据score的值进行排序。存储商品的排序信息

9Redis持久化

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
(一)RDB
按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb
优点:
(1)性能高效,fork一个子进程进行数据的备份,不影响Redis主进程的处理效率
(2)恢复快速

(二)AOF
将每次的写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
优点:
(1)数据安全性更高,每一条修改语句都会被记录
(2)日志文件更小,有rewirte操作,合并修改语句

10.Redis缓存的过期策略

(一)定时过期策略,每个key维护一个定时器,定时时间到就清除key,可能会造成CPU负载过大,但过期的key能够及时清除
(二)懒惰清除策略,每次使用key时,才会检查是否过期,如果过期则清楚key,对CPU消耗少,但是可能对于一些不经常使用的key无法及时清除
(三)定期清除策略,隔一段时间就会检查expries字典中的key是否过期,过期就清除,对CPU利用率与内存利用率的则中选择

11.Redis的内存清除策略

  1. noeviction:当内存使用超过配置的时候会返回错误,不会驱逐任何键
  2. allkeys-lru:加入键的时候,如果过限,首先通过LRU算法驱逐最久没有使用的键
  3. volatile-lru:加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键
  4. allkeys-random:加入键的时候如果过限,从所有key随机删除
  5. volatile-random:加入键的时候如果过限,从过期键的集合中随机驱逐
  6. volatile-ttl:从配置了过期时间的键中驱逐马上就要过期的键
  7. volatile-lfu:从所有配置了过期时间的键中驱逐使用频率最少的键
  8. allkeys-lfu:从所有键中驱逐使用频率最少的键

12 Redis的事务

Redis的事物是有Multi,EXEC,Discard,watch,unwatch等命令组成的一组操作
(一)基本的命令
MULTI:开启事务,如果事务中 的命令在入队期间报错,则所有的命令都不会执行,如果在运行期间有命令报错,那么报错的命令不会被执行,其他命令会被执行
WATCH 命令是一个乐观锁,可以为 Redis 事务提供 check-and-set (CAS)行为。 可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到EXEC命令。
EXEC命令,用于命令的提交执行,在执行期间的其他命令会被加入到等待队列中
DISCARD,客户端可以清空事务队列,并放弃执行事务, 并且客户端会从事务状态中退出。
UNWATCH命令可以取消watch对所有key的监控。
(二)Redis事务的三个阶段
事务开始 MULTI
命令入队
事务执行 EXEC
(三)Redis事物的三大特点
事务被隔离的执行
事务没有隔离级别的概念
事务不支持原子性

13,缓存的失效

https://www.cnblogs.com/midoujava/p/11277096.html
(一)缓存雪崩:短时间内大量的缓存失效,造成大量的数据请求直接落到数据库中,导致数据库坏掉
解决方法:(1)缓存失效的时间随即设置,(2)请求量不大的情况通过给读取数据库的操作加锁来解决
(二)缓存击穿:数据在缓存中不存在,但是在数据库中存在,大量请求会落到数据库上。
解决办法:(1)可以设置热点数据永不过期,(2)当缓存数据失效,去读取数据库时,采用setnx互斥锁操作,避免请求直接落到数据库
(三)缓存穿透,缓存与数据库中的数据都不存在,会一直请求数据库
解决办法:(1)布隆过滤器,(2)当缓存不存在,设置为null

14.如何保证缓存与数据库的一致性

https://developer.aliyun.com/article/712285

15.Redis一次性插入1亿条数据

可以使用pipelining方式插入,将所有的插入一次性提交插入,消耗时间大量减少
基本命令

cat data.txt|redis-cli --pipe
1分30秒 32505440条数据

普通模式,30分钟

16.

你可能感兴趣的:(2.Redis基础)