Redis练习

文章目录

  • Redis入门
    • 安装
    • Redis-benchmark性能测试
    • Redis基础知识
      • 简单操作
      • Reids单线程的特点
  • 事务
    • Redis中事务的概念
    • 执行与放弃事务操作
    • Redis执行异常
    • Redis实现乐观锁
  • Redis配置文件
  • Redis持久化
    • 28、持久化之RDB操作
    • AOF
    • 建议
  • SpringBoot集成Redis
      • RedisTemplate
  • redis发布订阅
    • 原理
    • 订阅使用场景
  • Redis集群的搭建
  • Redis主从复制
    • 32、主从复制之复制原理
    • 33、宕机后手动配置主机
    • 哨兵模式详解
      • 配置哨兵文件
    • 哨兵配置
  • 缓存穿透与雪崩
    • 缓存穿透
    • 缓存击穿
    • 雪崩

Java狂神说:https://www.bilibili.com/video/BV1S54y1R7SB?p=1

Redis入门

安装

https://blog.csdn.net/weixin_43746433/article/details/103434365

Redis-benchmark性能测试

redis-benchmark -h 192.168.1.201 -p 6379 -c 100 -n 100000 

可参考:https://www.cnblogs.com/ailiailan/p/9480997.html

  • 测试参数说明
    Redis练习_第1张图片

Redis基础知识

简单操作

  • 连接与切换
    D:\Redis>redis-cli
    127.0.0.1:6379> select 3
    OK
    
  • 数据库大小
    127.0.0.1:6379[3]> DBSIZE
    (integer) 2
    
  • 获取值
    127.0.0.1:6379[3]> keys *
    1) "new_sets"
    2) "movie7"
    127.0.0.1:6379[3]> get movie7
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    127.0.0.1:6379[3]> type new_sets
    set
    127.0.0.1:6379[3]> type movie7
    set
    127.0.0.1:6379[3]> smembers movie7
    1) "{\"__v\": 0, \"author\": \"yang\", \"time\": 111, \"text\": 999, \"color\": 888, \"type\": 777, \"ip\": 444, \"_id\": 6, \"player\": [666, 777]}"
    2) "{\"__v\": 0, \"author\": \"hua\", \"time\": 111, \"text\": 999, \"color\": 888, \"type\": 777, \"ip\": 444, \"_id\": 6, \"player\": [666, 777]}"
    127.0.0.1:6379[3]>
    
  • 清空当前数据库 flashdb
  • 清空全部数据库 flashall

Reids单线程的特点

Redis练习_第2张图片
Redis练习_第3张图片

事务

Redis中事务的概念

Redis练习_第4张图片

执行与放弃事务操作

  • 开始事务
  • 命令入队
  • 执行事务
    Redis练习_第5张图片
  • 放弃事务
    Redis练习_第6张图片

Redis执行异常

  • 编译型异常
    Redis练习_第7张图片
  • 运行时异常
    Redis练习_第8张图片

Redis实现乐观锁

Redis练习_第9张图片
加锁 watch
解锁 unwatch
Redis练习_第10张图片

  • 多线程,可以使用watch当做redis乐观锁操作
    Redis练习_第11张图片
  • 如果操作失败,先解锁,再次获取最新的值
    Redis练习_第12张图片

Redis配置文件

Redis练习_第13张图片

  • 通用文件
    Redis练习_第14张图片
  • 快照
    Redis练习_第15张图片
  • SECURITY 安全
    Redis练习_第16张图片
  • 限制CLIENTS
    Redis练习_第17张图片
    Redis练习_第18张图片

Redis持久化

28、持久化之RDB操作

RDB 文件的创建与载入
有两个 Redis 命令可以用于生成 RDB 文件,一个是 SAVE,另一个是 BGSAVE
SAVE 命令会阻塞 Redis 服务器进程,直到 RDB 文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求

BGSAVE 命令会派生出一个子进程,然后由子进程负责创建 RDB 文件,父进程继续处理命令请求

RDB 文件的载入工作是在服务启动时自动执行的,所以 Redis 并没有专门用于载入 RDB 文件的命令,只要 Redis 服务器在启动时检测到 RDB 文件存在,它就会自动载入 RDB 文件

因为 AOF 文件的更新频率通常比 RDB 文件的更新频率高,所以如果服务器开启了 AOF 持久化功能,那么服务器会优先使用 AOF 文件来还原数据库状态
只有在 AOF 持久化功能处于关闭状态时,服务器才会使用 RDB 文件来还原数据库状态

Redis练习_第19张图片
Redis练习_第20张图片
Redis练习_第21张图片

  • 优缺点
    Redis练习_第22张图片

AOF

Redis练习_第23张图片

建议

Redis练习_第24张图片

SpringBoot集成Redis

Redis练习_第25张图片

  • 操作redis
    Redis练习_第26张图片
package com.kuang;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class Redis02SpringbootApplicationTests {

    // @Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
    //@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

    //成员属性字段使用 @Autowired,无需字段的 set 方法
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {

        redisTemplate.opsForValue().set("name1","password");
        System.out.println(redisTemplate.opsForValue().get("name1"));
    }

}

Redis练习_第27张图片
序列化配置
Redis练习_第28张图片
Redis练习_第29张图片

RedisTemplate

package com.kuang;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kuang.pojo.User;
import org.junit.jupiter.api.Test;
import org.omg.CORBA.Object;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class Redis02SpringbootApplicationTests {

    // @Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
    //@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

    //成员属性字段使用 @Autowired,无需字段的 set 方法
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {

        redisTemplate.opsForValue().set("name1","password");
        System.out.println(redisTemplate.opsForValue().get("name1"));
    }
    @Test
    public void test() throws JsonProcessingException {
        // 真实开发用json传递对象
        User user = new User("wang", "10");
        String jsonUser = new ObjectMapper().writeValueAsString(user);
        redisTemplate.opsForValue().set("user", jsonUser);
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

}

redis发布订阅

Redis练习_第30张图片

  • Redis客户端测试
    Redis练习_第31张图片

原理

Redis练习_第32张图片

Redis练习_第33张图片

订阅使用场景

  • 实时消息系统
  • 实时聊天系统
  • 订阅、关注系统
    较为复杂的场景就会使用消息中间件 MQ,Kafka等

Redis集群的搭建

集群搭建也可点这里https://blog.csdn.net/weixin_43746433/article/details/103846147

Redis主从复制

Redis练习_第34张图片
Redis练习_第35张图片

32、主从复制之复制原理

Redis练习_第36张图片
Redis练习_第37张图片

  • 在命令行中添加配置
    在这里插入图片描述
    Redis练习_第38张图片

33、宕机后手动配置主机

Redis练习_第39张图片

哨兵模式详解

Redis练习_第40张图片

配置哨兵文件

Redis练习_第41张图片
在这里插入图片描述

Redis练习_第42张图片
可参考: https://www.jianshu.com/p/06ab9daf921d

哨兵配置

Redis练习_第43张图片

缓存穿透与雪崩

缓存穿透

解放方案:
1.布隆过滤器
2.设置空缓存
Redis练习_第44张图片

缓存击穿

Redis练习_第45张图片
Redis练习_第46张图片

雪崩

Redis练习_第47张图片

Redis练习_第48张图片

你可能感兴趣的:(Redis)