redis学习资料(redis学习路上的各种总结)
Redis⽀持的数据类型?
redis ⼀个字符串类型的值能存储最⼤容量 512M
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正是通过分数来为集合中的成员进⾏从⼩到⼤的排序。
zset的成员是唯⼀的,但分数(score)却可以重复。
Redis有哪⼏种数据淘汰策略?
redis支持的五种数据类型noeviction:返回错误当内存限制达到并且客户端尝试执⾏会让更多内存被使⽤的命令(⼤部分的写⼊指令,但DEL和⼏个例外)allkeys-lru: 尝试回收最少使⽤的键(LRU),使得新添加的数据有空间存
放。
volatile-lru: 尝试回收最少使⽤的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
allkeys-random: 回收随机的键使得新添加的数据有空间存放。
volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
什么是Redis持久化?Redis有哪⼏种持久化⽅式?优缺点是什么?
持久化就是把内存的数据写到磁盘中去,防⽌服务宕机了内存数据丢失。
Redis 提供了两种持久化⽅式:RDB(默认) 和AOF
RDB:
rdb是Redis DataBase缩写
功能核⼼函数rdbSave(⽣成RDB⽂件)和rdbLoad(从⽂件加载内存)两个函数
AOF:
Aof是Append-only file缩写
每当执⾏服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调⽤, 这个函数执⾏以下两个⼯作
aof写⼊保存:
WRITE:根据条件,将 aof_buf 中的缓存写⼊到 AOF ⽂件
SAVE:根据条件,调⽤ fsync 或 fdatasync 函数,将 AOF ⽂件保存到磁盘中。
存储结构:
内容是redis通讯协议(RESP )格式的命令⽂本存储。
⽐较:
1、aof⽂件⽐rdb更新频率⾼,优先使⽤aof还原数据。
2、aof⽐rdb更安全也更⼤
3、rdb性能⽐aof好
4、如果两个都配了优先加载AOF
刚刚上⾯你有提到redis通讯协议(RESP ),能解释下什么是RESP?有什么特点?(可以看到很多⾯试其实都是连环炮,⾯试官其实在等着你回答到这个点,如果你答上了对你的评价就⼜加了⼀分)
RESP 是redis客户端和服务端之前使⽤的⼀种通讯协议;
RESP 的特点:实现简单、快速解析、可读性好
Redis 有哪些架构模式?讲讲各⾃的特点
单机版
特点:简单,个⼈学习使⽤,不推荐正式环境使⽤
问题:
1、内存容量有限
2、处理能⼒有限
3、⽆法⾼可⽤。
主从复制
Redis 的复制(replication)功能允许⽤户根据⼀个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),⽽通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的⽹络连接正常,主从服务器两者会具有相同的数据,主服务器就会⼀直将发⽣在⾃⼰⾝上的数据更新同步 给从服务器,从⽽⼀直保证主从服务器的数据相同。
特点:
1、master/slave ⾓⾊
2、master/slave 数据相同
3、降低 master 读压⼒在转交从库
问题:
⽆法保证⾼可⽤
没有解决 master 写的压⼒
哨兵
Redis sentinel 是⼀个分布式系统中监控 redis 主从服务器,并在主服务器下线时⾃动进⾏故障转移。其中三个特性:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应⽤程序发送通知。
⾃动故障迁移(Automatic failover): 当⼀个主服务器不能正常⼯作时, Sentinel 会开始⼀次⾃动故障迁移操作。
特点:
1、保证⾼可⽤
2、监控各个节点
3、⾃动故障迁移
缺点:主从模式,切换需要时间丢数据
没有解决 master 写的压⼒
集(proxy 型):
Twemproxy 是⼀个 Twitter 开源的⼀个 redis 和 memcache 快速/轻量级代理服务器; Twemproxy 是⼀个快速的单线程代理程序,⽀持 Memcached ASCII 协议和 redis 协议。
特点:1、多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
2、⽀持失败节点⾃动删除
3、后端 Sharding 分⽚逻辑对业务透明,业务⽅的读写⽅式和操作单个 Redis ⼀致
缺点:增加了新的 proxy,需要维护其⾼可⽤。
failover 逻辑需要⾃⼰实现,其本⾝不能⽀持故障的⾃动转移可扩展性差,进⾏扩缩容都需要⼿动⼲预
集(直连型):
从redis 3.0之后版本⽀持redis-cluster集,Redis-Cluster采⽤⽆中⼼结构,每个节点保存数据和整个集状态,每个节点都和其他所有节点连接。
特点:
1、⽆中⼼架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。
2、数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
3、可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。
4、⾼可⽤性,部分节点不可⽤时,集仍可⽤。通过增加 Slave 做备份数据副本
5、实现故障⾃动 failover,节点之间通过 gossip 协议交换状态信息,⽤投票机制完成 Slave到 Master 的⾓⾊提升。
缺点:
1、资源隔离性较差,容易出现相互影响的情况。
2、数据通过异步复制,不保证数据的强⼀致性
什么是⼀致性哈希算法?什么是哈希槽?
这两个问题篇幅过长 ⽹上了两个解锁的不错的⽂章
Redis常⽤命令?
Keys pattern
*表⽰区配所有
以bit开头的
查看Exists key是否存在
Set
设置 key 对应的值为 string 类型的 value。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。