亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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萬
獲贊與收藏
1809

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消