Redis

redis是什么
Redis - 图2
给予键值对的存储服务系统,有多重数据结构
特性

  • 速度快

10W OPS

  • 持久化

Redis - 图3

  • 多种数据结构
    • 5种基本数据结构(String,HashTable,list,set,sortSet)
    • BitMaps
    • HyperLogLog:超小内存唯一值计数
    • GEO:地理信息定位
  • 支持多种变成语言
  • 功能丰富
    • 发布订阅
    • Lua脚本
    • 简单事务
    • pipeline
  • 主从复制
  • 高可用、分布式

单机安装
典型应用场景

  • 缓存系统Redis - 图4
  • 计数器Redis - 图5
  • 消息队列系统

Redis - 图6

  • 排行榜
  • 社交网络
  • 实时流系统

安装
redis-check-aof AOF文件修复工具
redis-check-dump RDB文件检查工具
redis-sentinelsentinel服务器
启动方法

  1. redis-server

验证
ps -ef | grep redis

netstat -antpl | grep redis

redis-cli -h ip -p port ping

  1. 动态参数启动redis-server —port 6380
  2. 配置文件启动redis-server configPath

三种启动方式比较
生产环境选择使用配置文件启动
单机多实例配置文件可以使用端口区分开
常用配置
daemonize 是否是守护进行
port
logfile 系统日志
dir redis工作目录
merz6379

API通用命令

通用命令
keys [pattern]
不在生产环境下使用,会阻塞
dbsize 计算key的总数
时间复杂度O(1)
exists key
del key
expire key seconds
ttl key 查看key剩余的过期时间
-2说明key不存在了
-1代表key存在,并且没有过期时间
persise key 去掉key的过期时间
type key #返回key的类型
string hash list set zset none
Redis - 图7
数据结构和内部编码
Redis - 图8
Redis - 图9
单线程架构
Redis - 图10
单线程为什么这么快
1.使用内存
2.非阻塞IO
3.避免线程切换和竞态消耗
一次只运行一条命令
拒绝长(慢)命令
Redis - 图11
其实不是单线程
Redis - 图12

字符串

限制在512M
Redis - 图13
伪代码
Redis - 图14
Redis - 图15
Redis - 图16
Redis - 图17
Redis - 图18
Redis - 图19
Redis - 图20
Redis - 图21

hash

Redis - 图22
key作为mysql表的一行,值为表的各个字段
所有命令以h开头
Redis - 图23
Redis - 图24
Redis - 图25
实战:记录网站每个用户个人主页的访问量
Redis - 图26
Redis - 图27
小心hgetall的使用
查缺补漏
Redis - 图28
Redis - 图29

list

Redis - 图30
Redis - 图31
有序的可重复的,左右两边又可以操作的
Redis - 图32
lpush同理
Redis - 图33
Redis - 图34
Redis - 图35
Redis - 图36
Redis - 图37
Redis - 图38
Redis - 图39
Redis - 图40
Redis - 图41
Redis - 图42

set

无序不重复
Redis - 图43
Redis - 图44
集合内api
Redis - 图45
Redis - 图46
Redis - 图47
集合间api
Redis - 图48
Redis - 图49
tips
Redis - 图50

zset

Redis - 图51
Redis - 图52
api
Redis - 图53
Redis - 图54
Redis - 图55
Redis - 图56
Redis - 图57
Redis - 图58
Redis - 图59
Redis - 图60
Redis - 图61
实战
排行榜
Redis - 图62
Redis - 图63

3.redis客户端

Jedis

4.其他功能

4.1 慢查询

生命周期
Redis - 图64
慢查询发生在第三阶段
客户端超时不一定是慢查询,但慢查询是客户端超时的一个可能性
慢查询的配置
Slowlog-max-len
Redis - 图65
Redis - 图66
Redis - 图67
Redis - 图68
Redis - 图69

4.2 流水线pipeline

redis命令时间消耗是us级别
Redis - 图70
Redis - 图71
Redis - 图72
Redis - 图73

4.3发布订阅

Redis - 图74
无法做消息堆积
Redis - 图75
Redis - 图76
Redis - 图77
Redis - 图78

4.4 Bitmap

image.png
image.png
image.png
image.pngimage.pngimage.png
image.png

4.5 HyperLogLog

image.png
image.png
image.png
image.png

4.6 GEO

5.Redis持久化

将内存中的数据更新一步的保存在磁盘上
image.png

作用

1.快照
mysql dump redisrdb
2.日志
mysql binlog
redis aof

RDB

什么是RDB

image.png

触发机制三种方式

save 同步命令

bgsave 异步命令
image.png
image.png
自动
image.png

image.png

AOF

RDB的问题
耗时耗费性能
image.png
不可控丢失数据
image.png
image.png
三种策略

  • always

image.png

  • everysec(默认配置)

image.png

  • no

由操作系统决定
image.png
AOF重写

  • 减少硬盘占用
  • 加速恢复速度

image.png
AOF重写的两种方式

  • bgrewriteaof

实际是从redis进行回溯,而不是像上图演示的那样

image.png

  • AOF重写配置

image.png
image.png
image.png
相关配置
image.png

RDB和AOF的抉择

image.png
优先级
image.png
image.png