redis基本使用

下载安装配置

windows下载

http://redis.io/download

Linux下载

# 安装gcc
yum install gcc
# 把下载好的redis-5.0.3.tar.gz放在/export/sort文件夹下,并解压
cd /export/sort
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -zxvf /export/sort/redis-5.0.3.tar.gz 
# 编译文件
cd /export/sort/redis-5.0.3
make
# 安装
make PREFIX=/export/install/redis-5.0.3 install

基本配置

# 后台启动
daemonize yes 
# 关闭保护模式,开启的话,只有本机才可以访问redis
protected-mode no  
# 需要注释掉bind 代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可
# bind 127.0.0.1

启动服务端

# 复制一份配置文件到bin目录,启动服务
cd /export/install/redis-5.0.3/bin
cp /export/sort/redis-5.0.3/redis.conf /export/install/redis-5.0.3/bin
./redis-server redis.conf
# 验证启动是否成功 
ps -ef | grep redis 
netstat -lanp | grep 6379

五种数据类型

数据类型实现
String(字符串)简单动态字符串
Hash(哈希)字典表
List(列表)双向链表,可以随机写入
Set(无序集合)字典表
zSet(有序集合)跳跃表

高级指令

指令指令说明示例
keys [MATCH pattern]全量遍历键(生产环境推荐禁用)
可选参数pattern: key 的正则模式
keys test*
scan cursor [MATCH pattern] [COUNT count]渐进式遍历键
可选参数cursor : 游标起始位置
可选参数pattern: key 的正则模式
可选参数count: 扫描的数量
scan 0 MATCH test* COUNT 10
time显示服务器时间 , 时间戳(秒), 微秒数
dbsize当前数据库的key的数量
Info查看redis服务器的信息

Redis持久化

RDB

将数据以二进制快照的形式保存在磁盘上,是默认持久化方式

# 表示 在60秒内有1000个key发生改变,就进行一次持久化备份
# save 60 1000

客户端也可以通过命令手动触发持久化备份

  • save

    向Redis发起数据备份命令,该命令会使Redis进入阻塞,无法对外提供服务,需等待数据备份完成。

  • bgsave

    向Redis发起数据备份命令,该命令会使新创建一个线程来进行数据持久化备份,主线程还是可以继续对外提供服务。

AOF

将修改的每一条命令记录到文件appendonly.aof中

# 表示开启aof备份方式
# appendonly yes

AOF重写会将一些没用的命令进行合并,例如一个数字自增100次,aof只会记录最后的结果;向一个列表中添加多个值时,会将结果进行合并

LPUSH  list1 a
LPUSH  list1 b
LPUSH  list1 c
#合并为
LPUSH  list1 a b c
混合持久化

如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将
重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一
起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改
名,原子的覆盖原有的AOF文件,完成新旧两个AOF文件的替换

主从复制

相关配置
# 从本机6379的redis实例复制数据,老版本使用slaveof命令
replicaof 192.168.0.60 6379 
# 从节点只读
replica‐read‐only yes
全量复制

主从复制主要发生在slave节点启动时,数据同步的过程如下

  1. 从服务连接到主服务器后,发送SYNC命令
  2. 主服务器接受到到SYNC命令后,执行bgsave命令保存当前数据快照文件(多个slave只生成1个快照
  3. bgsave命令执行完成后,将快照文件发送给slave服务器
  4. slave服务器接受到快照文件后,会删除本地的数据,开始载入快照数据数据
  5. 如果主服务器在生成快照–从服务器恢复快照期间存在数据的修改,会将修改过的数据放在缓冲区,并将该数据发送给slave服务器
  6. salve恢复缓冲区的数据,数据同步完成。
增量复制

Redis2.8后的版本支持快照的增量同步

主服务器会维护一个和他所有slave服务器的数据同步下标offset,当slave服务异常重启后,主服务器会根据slave上一次数据同步的下标生成快照文件并发送给slave服务器(每个slave生成一个快照),进行数据的增量更新.

哨兵机制

相关配置
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时master才算真正失效
# sentinel monitor <master‐name> <ip> <redis‐port> <quorum>
sentinel monitor mymaster 192.168.0.60 6379 2
  • 主观下线:单个哨兵察觉到主节点挂了
  • 客观下线:有quorum个哨兵察觉到主节点,quorum可以自行配置(默认大小为哨兵节点的一半)
选举机制

1、优先级高的最分最高

Redis提供了一个优先级,可以自定义配置优先级别默认是100,值越小被选中的概率就越高,如果值为0则永远无法被选中。

2、优先级相同时和原主节点同步程序最接近的得分最高;

Redis再同步时会维护一个slave_repl_offset值来记录同步的版本,每次数据从主节点同步到从节点slave_repl_offset都会增加。根据值的大小判断,将版本大的作为新的主节点。

3、ID号最小的从库最分最高。

每一个redis实例启动的时候,系统都会为它分配一个id,如果前面的两轮得分都完成一样的话,那么将会由所有从库中ID号最小的那个从节点来担任新的主节点。

应用场景

  • 实现高并发分布式锁
  • 计数器使用:记录访问次数,点赞次数
  • 分布式session缓存
  • 唯一序列号生成
  • 用户的单点登入
  • 短信验证码
  • 表单重复提交

常见问题

缓存穿透

访问一个缓存当中不存在的数据,每次缓存都不会命中。缓存中查询不到就去查询数据库,导致数据库压力过大

解决方案

  • 在Redis中维护一个空对象
  • 使用布隆过滤器排除大多是的key
缓存击穿

但缓存中的一个热点key失效后,出现大量的请求查询数据库

解决方案

  • 在代码中使用互斥锁,一次只允许一个进程访问数据进行查询
缓存雪崩

同一时间内出现大量的key同时失效,导致数据库请求并发量过大甚至挂掉

解决方案

  • 给每一个key设置不同的过期时间,在基本的过期时间上再加上一个随机数作为过期时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值