为了账号安全,请及时绑定邮箱和手机立即绑定

Redis 高级数据结构和持久化

标签:
Linux NoSql

大家学实战的时候可以把我的文章翻出来,就不用自己记笔记了。节省大家学习成本。

慢查询

图片描述

pipeline

图片描述

发布订阅

图片描述

bitmap(位图)

  • string类型,最大512mb
  • 注意setbit偏移量,可能有较大耗时
  • 位图要合理使用

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

set和Bitmap对比

  • 使用set和Bitmap
  • 1亿用户,5千万独立
数据类型 每个userid占用空间 需要存储的用户量 全部内存量
set 32位(假设userid用的是整型,实际很多网站用的是长整型) 50,000,000 32位*50,000,000=200MB
Bitmap 1位 100,000,000 1位*100,000,000=12.5MB

一天 一月 一年
set 200M 6G 72G
Bitmap 12.5M 375M 4.5G

只有10万独立用户呢

数据类型 每个userid占用空间 需要存储的用户量 全部内存量
set 32位(假设userid用的是整型,实际很多网站用的是长整型) 1,000,000 32位*1,000,000=4MB
Bitmap 1位 100,000,000 1位*100,000,000=12.5MB

HyperLoglog

  • 1.基于HyperLogLog算法:极小空间完成独立数量统计。
  • 2.本质还是字符串。
127.0.0.1:6379>type hyperloglog_key
string

  • pfadd key element [element…]:向hyperloglog添加元素
  • pfcount key [key…]:计算hyperloglog的独立总数
  • pfmerge destkey sourcekey [sourcekey……]:合并多个hyperloglog

图片描述

图片描述

图片描述

图片描述

GEO

  • since 3.2+
  • type geokey=zset
  • 没有删除API:zrem key member

图片描述

图片描述

图片描述

图片描述

图片描述

127.0.0.1:6379> info memory
# Memory
used_memory:815096
used_memory_human:795.99K
used_memory_rss:7626752
used_memory_peak:815096
used_memory_peak_human:795.99K
used_memory_lua:36864
mem_fragmentation_ratio:9.36
mem_allocator:jemalloc-3.6.0

Redis持久化

图片描述

RDB

SAVE

  • 当数据量大时,save会阻塞
  • 文件策略 如存在老的RDB文件,新替换老
  • 复杂度O(N)

图片描述

  • save(同步)
  • bgsave(异步)
  • 自动

图片描述

bgsave

图片描述

图片描述

自动RDB

图片描述

最佳配置
save 900 1 
save 300 10 
save 60 10000
dbfilename dump.rdb
dir ./
stop-writes-on-bgsave-error- yes 中断写入
rdbcompression yes 默认启用压缩 
rdbchecknum yes 默认启用计算和

自动触发机制

  • 全量复制
  • debug reload
  • shutdown save

  • RDB是Redis内存到硬盘的快照,用于持久化。
  • save通常会阻塞Redis。
  • bgsave不会阻塞Redis,但是会fork新进程。
  • save自动配置满足任一就会被执行。
  • 有些触发机制不容忽视

AOF

rdB缺点

图片描述

数据不可控,容易丢失
图片描述

AOF three tactics

always

图片描述

everysec(默认值,故障,有可能丢失)

图片描述

no

命令 always everysec no
优点 不丢失数据 每秒一次fsync丢1秒数据 不用管
缺点 IO开销较大,一般的sata盘只有几百TPS 丢1秒数据 不可控

图片描述

AOF rewrite two ways

  • bgrewriteaof
  • AOF重写配置

图片描述

图片描述

图片描述

图片描述

AOF重写流程

图片描述

AOF配置

no-appendfsync-on-rewrite
重写时关闭正常的AOF append (性能和丢失率的选择)
aof-load-truncated yes 当aof有问题时,我们是否忽略错误

appendonly yes
appendfilename "appendonly-${port).aof"
appendfsync everysec
dir /bigdiskpath
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

图片描述

RDB vs AOF

命令 RDB AOF
启动优先级
体积
恢复速度
数据安全性 丢数据 根据策略决定
轻重

最佳实践

  • RDB
    • 主从,从‘开’,粒度不要太小
    • 集中管理
  • AOF
    • 开:缓存和存储
    • AOF重写集中管理 分配服务器百分之五十到六十的内存
    • everysync
    • 小切片 设置最大内存4个G
    • 存储和缓存
    • 监控(硬盘,内存,负载,网络)
    • 内存足够
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
1.6万
获赞与收藏
1807

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消