【redis学习以及常见问题】

redis

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持久化

redis 是存储在内存的-是内存型数据库

优点:内存存储快

缺点:断电易消失

解决办法:

  • RDB

    生成一个.rdb快照文件存储在磁盘上,是存储全部内容的。

    触发条件:save(此时线程阻塞处理不了任何请求)bgsave(生成子程序完成请求,可以处理其他情况)或者自动触发,比如:m秒内n次变化进行触发

  • AOF

    记录对redis数据所有的修改操作,发生事故的时候可以吧AOF文件全部执行一遍,来恢复数据。AOF进行重写和更新,好几条设置一个数的操作,最后可能只保存最后一条,因此AOF是只看最新文件。

    写入策略Always:同步写回只要更改就写回,写到硬盘文件中,性能太慢,数据可靠

    Everysec:每秒写回,每一秒内写入内存的缓存区,一秒后再写入磁盘(默认)

    NO:自己操作,十分不可靠

redis缓存内容相关

缓存淘汰机制

  • 先进先出FIFO
  • 最近最少使用LRU
  • 最近最不经常使用LFU

过期删除

  • 主动删除

    设置一个时间,一段时间定时删除,缺点就是当很忙的时候,redis负载比较大

  • 惰性删除

    当访问到某个数据的时候,看看它是否过期,如果过期删除,缺点就是可能有数据很长时间不更新

  • 定期删除

    上述两种结合,平时采用惰性删除,隔一段时间用主动删除

缓存一致

我们的数据比如在mysql中,redis缓存中也存在,当修改和查询同时发生后,我们希望在一段时间后能够返回缓存一致的数据

  • model1-先

缓存击穿

查询一个值,缓存中没有这个值,去数据库要数据

问题:如果对某个值的请求突然加大,redis设置了清理缓存的时间,就只能去数据库找数据

解决:

  • mysql,减少击穿后的直接流量,给它加一个锁
  • redis,首先设置热点数据永不过期,其次可以后台启动异步线程吧数据回填缓存中

缓存穿透

请求一个值,缓存中没有数据库也没有

  • 返回错误,比如查询了为负的id

  • 热点值返回空,为了减少数据库的压力给缓存设置空值

  • 布隆过滤器

    为了减少无效请求,设置个哈希表,用k个哈希函数来计算值,结果只能为0/1存储在哈希表中,当请求过来后再次用哈希函数计算。比较两次计算结果,有所不同则为无效请求。

缓存雪崩

一大批缓存过期了,缓存击穿是一个点,雪崩是多个点

  • mysql,减少击穿后的直接流量,给它加一个锁

  • redis,首先设置热点数据永不过期,其次可以后台启动异步线程吧数据回填缓存中

    分析失效时间,将其分散

    缓存预热,当刚开机的时候可能一大批数据都产生缓存雪崩,因此可以提前加到缓存中。

集群

主从复制

主库-写命令

丛库-读命令

首先我们为主库和丛库设置id和端口号,然后进行握手命令,丛库发送PSYN命令开启数据同步的过程,如果此刻断网,从库再发要发送主库id和偏移量offset(防止主库换人)。主库收到从库信息后判断是全量复制还是断网后复制

全量复制:刚开始的初次复制。过程:主库实行GBSAVE(此刻能够访问的操作),生成RDB文件,从库根据RDB恢复。

主从复制:断网后的恢复。过程:发送主库id和偏移量offset,查看消息队列缓冲区。否则进行全量复制。

哨兵机制

处理主库掉线情况,哨兵监控主从情况,每10秒钟向哨兵系统发送此刻情况,当某个哨兵发现主库异常认定为主观掉线,此时联系其他哨兵链接主库试一试当半数都链接不上,认定为主库客观掉线,选取新的主库出来。

当新选出的主库发送给其他从库新的主库id和ip地址,旧主库重新上线变为从库。

集群cluster

当数据特别多的时候,提供的分布式数据库解决方案,将数据切片。

分片策略:对16384取模,每个节点进行认领曹slot

查询策略:每个节点都存储集群的节点信息,这些信息为元信息。元信息包括各个节点的槽数据,各个节点的主从复制,节点存活状态

元数据的传播:使用gossip协议,周期性隔一段时间进行更新,病毒方式传播

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值