-
什么是Redis?
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库
-
Redis性能为何那么快
- 纯内存操作
- 单线程操作,避免了频繁的上下文切换
- 采用了非阻塞 I/O 多路复用机制
-
Redis的使用场景
- 计数器
- 分布式锁
- 字典表
- session共享
- 缓存数据库数据
- 显示最新的项目列表
- 排行榜应用,取TOP N操作
- 删除与过滤
- 按照用户投票和时间排序
- 处理过期项目
- 特定时间内的特定项目
- 查找某个值所在的区间(区间无重合) :(Sorted Set)
- 交集,并集,差集:(Set)
- 队列
- 注册中心(发布/订阅)
-
Redis的数据类型
- String:数据结构是简单的key-value类型,value其实不仅是String,也可以是数字
- Hash:
- List
- Set
- Sorted set
- Pub/Sub 订阅模型
-
- RDB快照,将REDIS内存中的数据以二进制的形式备份到磁盘中
- AOF只追加文件,在执行写命令的时候,将执行的写命令复制到硬盘里面,后期恢复的时候,只需要1. 重新执行一下这个写命令就可以了。类似于我们的MySQL数据库在进行主从复制的时候,使用的是bi1. nlog二进制文件,同样的是执行一遍写命令;
-
- 存储方式:
- memecache 无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。数据不能超过内存大小。
- redis支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
- 数据支持类型
- redis在数据支持上要比memecache多的多。提供string,list,dict,set,zset,hyperloglog
- value大小:redis最大可以达到1GB,而memcache只有1MB
- 多线程支持:
- Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS,适用于最大程度扛量
- Redis单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
- 存储方式:
-
Redis的部署方式有几种,高可用的部署方式,各有什么区别
- Redis Standalone:单节点模式
- Redis master-slave:主从模式
- Redis Sentinel(哨兵模式):高可用性(HA)解决方案
- Redis cluster:Redis的分布式解决方案
-
Redis缓存穿透的问题,如何解决?
- 缓存空数据 当第一次查询数据库时,若数据不存在,返回空数据时将其写入缓存,后续查询就不必再去查询数据库了。存在问题:如果key过期时间较长,出现恶意攻击时,容易出现内存不够的情况。另外,需要额外的业务逻辑处理数据库与缓存中数据一致性的问题。
- 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存,对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。
-
redis的缓存碎片怎么处理?
- 目前没有什么实际方案好于重启。
- 有条件扩大内存大小。
- 添加内存监控,当内存使用率到阈值之后重启redis,回收内存
-
MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
- redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
-
Redis的过期策略
- 过期策略通常有三种,定时过期,惰性过期,定期过期。Redis采用的是定期删除+惰性删除策略。
- 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
- 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
- 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
-
redis 数据淘汰策略:
- maxmemory Redis能使用的最大内存,可以在redis.conf中配置。如果内存空间用满,就会自动驱逐老的数据
- voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据
-
redis的缓存雪崩?
- 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比1. 如DB)带来很大压力。
- 如何避免?
- 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线1. 程查询数据和写缓存,其他线程等待。
- 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
- 做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期1. ,A2设置为长期(此点为补充)
-
Redis如何保证数据库数据和Redis缓存数据的一致性的问题
- 缓存系统与底层数据的一致性。这点在底层系统是“可读可写”时,写得尤为重要
- 有继承关系的缓存之间的一致性。为了尽量提高缓存命中率,缓存也是分层:全局缓存,二级缓存。他们是存在继承关系的。全局缓存可以有二级缓存来组成。
- 多个缓存副本之间的一致性。为了保证系统的高可用性,缓存系统背后往往会接两套存储系统(如memcache,redis等)。
-
命令 操作 说明 启动Redis > redis-server [–port 6379] 通过配置文件来启动Redis。 > redis-server [xx/xx/redis.conf] 连接Redis > ./redis-cli [-h 127.0.0.1 -p 6379] 停止Redis > redis-cli shutdown 或者 > kill redis-pid 发送命令 > redis-cli shutdown 结果not connected> 测试连通性 127.0.0.1:6379> ping结果PONG 可以删除一个或多个键,返回值是删除的键的个数 del key [key…] 注意:不支持通配符删除 判断一个键值是否存在 exists key 如果存在,返回整数类型 1 ,否则返回 0 获得键值的数据类型 type key 返回值可能是 string(字符串类型) hash(散列类型) list(列表类型) set(集合类型) zset(有序集合类型) 赋值 set key value 赋值 取值 get key 取值 -
Redis集群部署实现数据共享
- 主从复制:
- 哨兵模式:
-
Redis的事务
- MULTI, EXEC, DISCARD 和WATCH命令是Redis事务操作的基础
- 他们可以让Redis在一个步骤里执行一组命令,且能做到如下2个重要保证:
- 事务中的所有命令都是序列化且都是按顺序执行的。在一个客户端执行Redis事务的过程中,不会接收其他任何客户端对它发出的请求。这保证了这些命令是作为一个单独的独立操作执行的。
- 所有的命令要么都被一起处理,要么全都没有被处理,所以Redis事务是原子的。EXEC会命令触发事务中所有命令的执行。当正在使用AOF时,Redis会使用一个简单的write(2)系统级调用来确保把事务写入到磁盘。但是,如果Redis服务崩溃,或者被系统管理员以某种强制的方式杀死,那么可能只有部分命令被写入到磁盘。Redis在重新启动时会检测这种情况,并报错,然后退出。使用redis-check-aof工具可以检查AOF,并移除那不完整的事务,使服务可以再次启动
- Redis命令在事务中可能会执行失败,但是Redis事务不会回滚,而是继续会执行余下的命令。
-
单机部署和集群部署配置有什么区别吗?
-
Redis CacheCloud(Redis云管理平台)
- 实现多种类型(Redis Standalone、Redis 1. Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能减少运维成本和误操作,提高机器的利用率,提供灵活的伸缩性,提供方便的接入客户端。
-
Redis数据一致性的问题,操作数据库之后,清空缓存报错,如何解决?
- 先删除缓存在清空数据库
Redis(Remote Dictionary Server)
最新推荐文章于 2022-09-22 11:31:31 发布