redis⼀般⽤来⼲嘛_Redis⾼频考点(记得收藏)
引⾔
Redis(REmote Dictionary Server 远程字典服务)是⼀个开源的使⽤ ANSI C 语⾔编写、遵守 BSD 协议、⽀持⽹络、可基于内存亦可持久化的⽇志型、Key-Value 数据库,并提供多种语⾔的 API的⾮关系型数据库。传统数据库遵循 ACID 规则。⽽ Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) ⼀般为分布式⽽分布式⼀般遵循 CAP 定理。
⽬录
Redis数据类型
Redis基本操作命令
Redis持久化
Redis事务
Redis架构模式
⼀致性哈希和哈希槽
Redis异步队列
缓存穿透和缓存雪崩
1.Redis⽀持的数据类型?
(1)string字符串
格式: set key value
string类型是⼆进制安全的。意思是redis的string可以包含任何数据。⽐如jpg图⽚或者序列化的对象 。string类型是Redis最基本的数据类型,⼀个键最⼤能存储512MB。
(2)hash(哈希)
格式: hmset name key1 value1 key2 value2
Redis hash 是⼀个键值(key=>value)对集合。
Redis hash是⼀个string类型的field和value的映射表,hash特别适合⽤于存储对象。
(3)list(列表)
Redis 列表是简单的字符串列表,按照插⼊顺序排序。你可以添加⼀个元素到列表的头部(左边)或者尾部(右边)
格式: lpush name value
在 key 对应 list 的头部添加字符串元素
格式: rpush name value
在 key 对应 list 的尾部添加字符串元素
格式: lrem name index
key 对应 list 中删除 count 个和 value 相同的元素
格式: llen name
返回 key 对应 list 的长度
(4)set(集合)
格式: sadd name value
Redis的Set是string类型的⽆序集合。
集合是通过哈希表实现的,所以添加,删除,查的复杂度都是O(1)。
(5)zset(sorted set:有序集合)
格式: zadd name score value
Redis zset 和 set ⼀样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联⼀个double类型的分数。redis正是通过分数来为集合中的成员进⾏从⼩到⼤的排序。redis支持的五种数据类型
zset的成员是唯⼀的,但分数(score)却可以重复。
2.Redis常⽤的操作命令
3.什么是Redis持久化?Redis有哪⼏种持久化⽅式?优缺点是什么?
持久化就是把内存的数据写到磁盘中去,防⽌服务宕机了内存数据丢失。Redis 提供了两种持久化⽅式:RDB(默认)和AOF。
RDB
RDB 是 Redis 默认的持久化⽅案。在指定的时间间隔内,执⾏指定次数的写操作,则会将内存中的数据写⼊到磁盘中。即在指定⽬录下⽣
成⼀个dump.rdb⽂件。Redis 重启会通过加载dump.rdb⽂件恢复数据。
相关配置
#指定本地数据库⽂件名,⼀般采⽤默认的 dump.rdbdbfilename dump.rdb#指定本地数据库存放⽬录,⼀般也⽤默认配置dir ./#默认开启数据压缩#配置存储⾄本地数据RDB快照触发机制
1 在指定的时间间隔内,执⾏指定次数的写操作
2 执⾏save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (异步)命令
3 执⾏flushall 命令,清空数据库所有数据,意义不⼤。
4 执⾏shutdown 命令,保证服务器正常关闭且不丢失任何数据,意义...也不⼤。
优点
1 适合⼤规模的数据恢复。
2 如果业务对数据完整性和⼀致性要求不⾼,RDB是很好的选择。
缺点
1 数据的完整性和⼀致性不⾼,因为RDB可能在最后⼀次备份时宕机了。
2 备份时占⽤内存,因为Redis 在备份时会独⽴创建⼀个⼦进程,将数据写⼊到⼀个临时⽂件(此时内存中的数据是原来的两倍哦),最后再
将临时⽂件替换之前的备份⽂件。所以Redis 的持久化和数据的恢复要选择在夜深⼈静的时候执⾏是⽐较合理的。
AOF
Redis 默认不开启。它的出现是为了弥补RDB的不⾜(数据的不⼀致性),所以它采⽤⽇志的形式来记录
每个写操作,并追加到⽂件中。
Redis 重启的会根据⽇志⽂件的内容将写指令从前到后执⾏⼀次以完成数据的恢复⼯作。
相关配置
#redis 默认关闭,开启需要⼿动把no改为yesappendonly yes#指定本地数据库⽂件名,默认值为 appendonly.aofappendfilename "appendonly.aof"#指定更新⽇志条AOF的保存策略
根据配置⽂件触发,可以是每次执⾏触发,可以是每秒触发,可以不同步。
根据AOF⽂件恢复数据
在实际开发中,可能因为某些原因导致appendonly.aof ⽂件格式异常,从⽽导致数据还原失败,可以通过命令进⾏修复 。
redis-check-aof --fix appendonly.aof
AOF的重写机制
随着命令不断从AOF缓存中写⼊到AOF⽂件中,AOF⽂件会越来越⼤,为了解决这个问题,Redis引
⼊了AOF重写机制来压缩AOF⽂件。
AOF⽂件的压缩和RDB⽂件的压缩原理不⼀样,RDB⽂件的压缩是使⽤压缩算法将⼆进制的RDB⽂件压缩,⽽AOF⽂件的压缩主要是去除
AOF⽂件中的⽆效命令,⽐如说:
同⼀个key的多次写⼊只保留最后⼀个命令
已删除、已过期的key的写命令不再保留
AOF重写的触发机制也分为⼿动触发和⾃动触发两种⽅式。⼿动触发,执⾏bgrewriteaof命令直接触发AOF重写
bgrewriteaof
另外,可以在f配置⽂件中配置以下参数来⾃动触发AOF重写,执⾏bgrewriteaof命令
auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb
AOF的存储结构(RESP格式):
内容是redis通讯协议(RESP )格式的命令⽂本存储。
RESP 是redis客户端和服务端之前使⽤的⼀种通讯协议;
RESP 的特点:实现简单、快速解析、可读性好
AOF 的优缺点
优点:数据的完整性和⼀致性更⾼
缺点:因为AOF记录的内容多,⽂件会越来越⼤,数据恢复也会越来越慢。
总结
1. Redis 默认开启RDB持久化⽅式,在指定的时间间隔内,执⾏指定次数的写操作,则将内存中的数据写⼊到磁盘中。
2. RDB 持久化适合⼤规模的数据恢复但它的数据⼀致性和完整性较差。
3. Redis 需要⼿动开启AOF持久化⽅式,默认是每秒将写操作⽇志追加到AOF⽂件中。
4. AOF 的数据完整性⽐RDB⾼,但记录内容多了,会影响数据恢复的效率。
5. Redis 针对 AOF⽂件⼤的问题,提供重写的瘦⾝机制。
6. 若只打算⽤Redis 做缓存,可以关闭持久化。
7. 若打算使⽤Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留⼀后⼿。AOF出问题了,还有RDB。
4.Redis 事务(部分⽀持事务)
是什么?
可以⼀次执⾏多个命令,本质是⼀组命令的集合,⼀个事务中的命令都会序列化,按顺序地串⾏化执⾏⽽不会被其它命令插⼊,不许加塞。
能⼲嘛?
⼀个队列中,⼀次性、顺序性、排他性地执⾏⼀系列命令
怎么玩?
#标记⼀个事务地开始MULTI#执⾏事务内所有的命令EXEC#取消事务,放弃⾏事务内所有的命令DIS
CARD#监视⼀个或多个key,如果在事务执⾏(EXEC)之前,这个或事务有五种执⾏情况:
Case1:正常执⾏
Case2:放弃事务(DISCARD)
Case3:全体连坐(在EXEC前就出现error时,⼀般是命令敲错了,可以理解为编译不通过)
Case4:冤头债主(在EXEC后才发现错误,可以理解为编译通过,但运⾏错误,例如对⼀个string类型的key执⾏INCR操作)
Case4:WATCH监控
5.Redis 有哪些架构模式?讲讲各⾃的特点?
单机版
单机版
特点:简单
问题:
1、内存容量有限
2、处理能⼒有限
3、⽆法⾼可⽤。
主从复制
主从复制读写分离
⽤法:
SLAVEOF 主节点IP 主节点端⼝#使当前数据库停⽌与其它数据库的同步,转为主数据库SLAVEOF on one#查看当前节点的主从情况info replication 特点:
1. 只有主能写⼊,从只能读
2. 主死,从默认待命,等主回来,从重新连接主
3. 从死,需要重新执⾏SLAVEOF命令才能成为从节点。
常⽤的三招:
⼀主⼆仆
薪⽕相传
反客为主
问题:
⽆法保证⾼可⽤
没有解决 master 写的压⼒
哨兵模式(⾃动版的反客为主)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论