Redis核心技术与实战课程复习一

基础数据类型

指给客户用的数据类型
string、list、hash、set、sorted set

底层数据结构

指实现Redis各功能所用到的数据结构
sds(简单动态字符串)、双向链表、ziplist、跳表、整数数组,字典

数据类型和数据类型的对应关系

  • string:std
  • list:ziplist、双向链表
  • hash:ziplist,字典
  • set:ziplist,整数数组
  • sorted set:ziplist,跳表

Redis数据类型操作复杂度大概

单元素操作快,统计操作快(底层数据结构都带有大小计数),范围操作(lange,zrange)慢

如果业务非要范围操作有没有好的办法?

Redis2.8版本增加scan操作,可以一部分一部分的范围操作

Redis为什么快?

  1. 内存数据库
  2. 单线程
    不过说Redis单线程是指和读写客户端数据的网络IO和读写键值对。
    其他线程有哪些操作?持久化、异步删除、集群数据同步(其实是子进程操作)
    6.0版本,客户端数据网络IO变为多线程
  3. 多路IO复用

Redis性能瓶颈

  • 请求耗时
    – 操作bigkey(如存有大量键值对的hash),删除时,释放内存阻塞
    – 范围操作,操作复杂度高,耗时
    – 大量key同时过期,释放内存
    – 内存淘汰策略
    – AOF使用Always写回策略
    – RDB大量数据,虽然是写盘是子进程,但是fork子进程需要复制内存页,主线程数据改变时由于fork的写实复制机制,主线程数据修改就会写数据,这个时候耗时多,并且在fork时如果机器开启了hugepage(页面大小2M)会分配大内存块,所以建议关闭,关于fork带来的阻塞,在其他redis使用fork时都有。
  • 读写客户端数据虽然是epoll,但是单个读写也是同步的

AOF

AOF是写后日志

好处
  1. 可以不做语法检查, Redis操作成功后才写入
  2. 不会阻塞当前的Redis指令
风险
  1. Redis指令刚执行完就宕机则无法写日志,这段时间的数据无法恢复
  2. 如果写盘阻塞将阻塞后面的指令

AOF写回策略

  • Always
  • EverySec
  • No 由操作系统决定什么时候写回

AOF日志重写

根据Redis当前键值对数据重新生成一次的指令写入日志
如有多次set key value更新同一个string的值最后的值是value1,则生成最后的指令
set key value1

一个拷贝,两处日志

AOF重写是fork出bgrewriteaof子进程重写日志,重写这段时间的客户端指令即要写入aof本身也要写入重写日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值