redis支持的数据类型
Redis 支持的数据类型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。
Redis 有哪些功能
数据缓存功能
分布式锁的功能
支持数据持久化
支持事务
支持消息队列
redis 持久化有几种方式
Redis 提供两种持久化机制 RDB 和 AOF 机制:
1、RDBRedis DataBase)持久化方式:是指用数据集快照的方式半持久化模式) 记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件, 持久化结束后, 用这个临时文件替换上次持久化的文件, 达到数据恢复。
优点:
1、只有一个文件 dump.rdb, 方便持久化。
2、容灾性好, 一个文件可以保存到安全的磁盘。
3、性能最大化, fork 子进程来完成写操作, 让主进程继续处理命令, 所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能)
4.相对于数据集大时, 比 AOF 的启动效率更高。
缺点:
1、数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障, 会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)
2、AOFAppend-only file)持久化方式:是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。
优点:
1、数据安全, aof 持久化可以配置 appendfsync 属性, 有 always, 每进行一次命令操作就记录到 aof 文件中一次。
2、通过 append 模式写文件, 即使中途服务器宕机, 可以通过 redis-check-aof 工具解决数据一致性问题。
3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前( 文件过大时会对命令进行合并重写), 可以删除其中的某些命令( 比如误操作的 flushall))
缺点:
1、AOF 文件比 RDB 文件大, 且恢复速度慢。
2、数据集大着的时候, 比 rdb 启动效率低。
最大缓存配置
在redis中,允许用户设置的最大使用内存大小是 512G。
在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。
怎么保证缓存和数据库数据的一致性
合理设置缓存的过期时间。 redis> EXPIRE cache_page 30 # 设置过期时间为 30 秒
新增、更改、删除数据库操作时同步更新 Redis,可以使用事物机制来保证数据的一致性。
redis缓存穿透、击穿、雪崩
缓存穿透:去redis中没有命中数据,就会进入mysql数据库进行查询。
注:不怕低频的缓存穿透(因为数据库没有那么脆弱),就怕高频的缓存穿透。
使用布隆过滤器进行标识。(涉及布隆算法:通过一定的错误率来降低内存的占用)
出现了hash碰撞会出现错误率。
布隆算法错误率:1)它告诉你数据存在,那么实际情况可能不存在
2)它告诉你数据不存在,那么一定不存在
降低错误率:
1)加大数组(二进制码数组)的长度 (考虑内存问题 长度得有个度量)
2)增加hash函数的个数
布隆算法弊端:做删除的时候哈希值相同时会删除同一个数(解决方法:布谷鸟算法)
缓存击穿:redis只存储了一条数据,在某一刻数据失效。
(使用分布式锁解决(zookeeper分布式锁)(难点))
缓存雪崩:redis缓存的大量数据突然在某一时刻集中失效。
1)redis里面的数据缓存有效时间都是一样的。 解决办法:给每一条数据设置一个随机有效期。
(达到一个缓冲效果)
2)redis里面的数据挂掉了。 使用分布式存储(副本集群,切片集群)(同样是达到缓冲效果)
redis为什么是单线程的
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了
Redis 和 memcache 有什么区别
存储方式不同:memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;Redis 有部份存在硬盘上,这样能保证数据的持久性。
数据支持类型:memcache 对数据类型支持相对简单;Redis 有复杂的数据类型。
使用底层模型不同:它们之间底层实现方式,以及与客户端之间通信的应用协议不一样,Redis 自己构建了 vm 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
value 值大小不同:Redis 最大可以达到 1gb;memcache 只有 1mb。
Redis 淘汰策略有哪些
volatile-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 支持的 Java 客户端都有哪些
支持的 Java 客户端有 Redisson、jedis、lettuce 等。
jedis 和 Redisson 有哪些区别
jedis:提供了比较全面的 Redis 命令的支持。
o-enviction(驱逐):禁止驱逐数据。
Redis 支持的 Java 客户端都有哪些
支持的 Java 客户端有 Redisson、jedis、lettuce 等。
jedis 和 Redisson 有哪些区别
jedis:提供了比较全面的 Redis 命令的支持。
Redisson:实现了分布式和可扩展的 Java 数据结构,与 jedis 相比 Redisson 的功能相对简单,不支持排序、事务、管道、分区等 Redis 特性。