Redis

目录

一.      NoSQL数据库简介... 6

1.1      技术发展... 6

1.2 NoSQL数据库... 6

1.2.1 概述.... 6

1.2.2 适用场景.... 6

1.2.3 不适用场景.... 7

1.2.4 Memcache. 7

1.2.5 Redis. 7

1.2.6 MongoDB. 7

1.3 行式存储数据库... 8

1.3.1 行式数据库.... 8

1.3.2 列式数据库.... 8

1.3.2.1 Hbase. 8

1.3.2.2 Cassandra. 8

1.4 图关系型数据库... 9

二.      概述和安装—单线程+多路io复用... 9

2.1 应用场景... 10

2.1.1 配合关系型数据库做高速缓存.... 10

2.1.2 多样的数据结构存储持久化数据.... 10

2.2 安装... 11

2.2.1 步骤.... 11

2.2.2 安装目录:/usr/local/bin. 12

2.2.3 前台启动(不推荐).... 13

2.2.4 后台启动(推荐).... 13

2.2.5 Redis相关知识.... 14

三.      常用(value)数据类型... 15

3.1 Redis键(key)... 15

3.2 String. 16

3.2.1 简介.... 16

3.2.2 数据结构.... 16

3.3 List 17

3.3.1 简介.... 17

3.3.2 常用命令补充.... 17

3.3.3 数据结构.... 18

3.4 Set—不可重复... 18

3.4.1 简介.... 18

3.4.2 数据结构.... 18

3.5 Hash—存储对象... 19

3.5.1 简介.... 19

3.5.2 数据结构.... 19

3.6 Zset—有序Set 20

3.6.1 简介.... 20

3.6.2 数据结构.... 20

3.6.3 跳跃表.... 20

3.6.3.1 简介.... 20

3.6.3.2 实例.... 21

四.      配置文件详解... 21

4.1 Units—单位... 21

4.2 include—包含... 22

4.3 网络相关配置... 22

4.3.1 bind.. 22

4.3.2 protected-mode. 23

4.3.3 Port 23

4.3.4 tcp-backlog.. 23

4.3.5 timeout 24

4.3.6 tcp-keepalive. 24

4.4 GENERAL通用... 25

4.4.1 daemonize. 25

4.4.2 pidfile. 25

4.4.3 loglevel 25

4.4.4 logfile. 26

4.4.5 databases16. 26

4.5 SECUTIRY 安全... 26

4.5.1 设置密码.... 26

4.6 LIMITS 限制... 27

4.6.1 maxclients. 27

4.6.2 maxmemory. 28

4.6.3 maxmemory-policy. 28

4.6.4 maxmemory-samples. 28

五.      发布和订阅... 29

5.1 什么?... 29

5.2 Redis的发布和订阅... 29

5.3 发布订阅命令行实现... 30

六.      Redis6新数据类型... 31

6.1 Bitmaps. 31

6.1.1 简介.... 31

6.1.2 命令.... 32

6.1.2.1 setbit 32

6.1.2.2 getbit 32

6.1.2.3 bitcount 33

6.1.2.4 bitop.. 33

6.1.3 bitmap和set比较.... 33

6.2 HyperLogLog. 34

6.3 Geospatial 34

七.      Jedis操作Redis6. 34

7.1 步骤... 34

7.2 遇到的问题(已经设置了bind和protected-mode)... 35

7.3 实例(具体代码参照代码区)... 35

八.      Springboot整合Redis. 36

8.1 整合步骤... 36

九.      事务_锁机制... 38

9.1 事务的定义... 38

9.2 Multi,Exec,discard. 38

9.3 事务的错误处理... 39

9.4 事务冲突—锁... 40

9.4.1 悲观锁.... 40

9.4.2 乐观锁.... 40

9.4.3 操作.... 41

9.4.3.1 WATCH key(乐观锁).... 41

9.4.3.2 unwatch. 41

9.5 Redis事务三特性... 41

十.      持久化... 42

10.1 RDB—Redis DataBase. 42

10.1.1 简介.... 42

10.1.2 备份是如何执行的.... 42

10.1.3 Fork. 42

10.1.4 RDB流程.... 43

10.1.5 dump.rdb文件.... 43

10.1.6 如何触发RDB. 44

10.1.7 备份和恢复.... 46

10.1.8 优劣势.... 46

10.1.8.1 优势.... 46

10.1.8.2 劣势.... 46

10.2 AOF—Append Only File. 47

10.2.1 是什么.... 47

10.2.2 流程.... 47

10.2.3 补充.... 48

10.2.4 AOP启动/修复/恢复.... 48

10.2.5 AOP同步频率设置—在配置文件里.... 49

10.2.6 优劣势.... 49

10.2.6.1 优势.... 49

10.2.6.2 劣势.... 49

10.3 总结... 50

十一.     主从复制... 50

11.1 是什么... 50

11.2 能干嘛... 51

11.3 怎么玩... 51

11.4 常用3招... 53

11.4.1 一主二从.... 53

11.4.2 薪火相传.... 54

11.4.3 反客为主.... 54

11.5 复制原理... 55

11.6 哨兵模式... 55

11.6.1 是什么.... 55

11.6.2 步骤.... 56

11.6.3 故障恢复.... 57

十二.     Redis集群... 57

12.1 问题... 57

12.2 什么是集群... 58

12.3 步骤... 58

12.4 集群方式访问... 61

12.5 redis cluster如何分配... 61

12.6 slots. 62

12.7 在集群中录入值... 62

12.8 查询... 63

12.9 故障恢复... 63

12.10 Jedis集群开发... 63

12.11 优劣势... 64

12.11.1 优势.... 64

12.11.2 劣势.... 64

十三.     Redis应用问题解决... 64

13.1 缓存穿透... 64

13.1.1 问题描述.... 64

13.1.2 解决方案.... 65

13.2 缓存击穿... 66

13.2.1 问题描述.... 66

13.2.2 解决方案.... 66

13.3 缓存雪崩... 67

13.3.1 问题描述.... 67

13.3.2 解决方案.... 67

16.4 分布式锁... 68

16.4.1 问题描述.... 68

16.4.2 解决方案(使用Redis).... 69

16.4.3 优化.... 70

16.4.3.1 设置方式的优化.... 70

16.4.3.2 UUID防误删.... 72

十四.     Redis6的新功能... 73

14.1 ACL—Access Control List 73

14.1.1 简介.... 73

14.1.2 命令.... 74

14.2 IO多线程... 74

14.2.1 简介.... 74

14.2.2 原理架构.... 75

14.3 工具支持cluster 75

1.2 NoSQL数据库

1.2.1 概述

1.2.2 适用场景

1.2.3 不适用场景

1.2.4 Memcache

1.2.5 Redis

1.2.6 MongoDB

1.3 行式存储数据库

1.3.1 行式数据库

1.3.2 列式数据库

1.3.2.1 Hbase

1.3.2.2 Cassandra

1.4 图关系型数据库

2.1 应用场景

2.1.1 配合关系型数据库做高速缓存

2.1.2 多样的数据结构存储持久化数据

2.2 安装

2.2.1 步骤

2.2.2 安装目录:/usr/local/bin

2.2.3 前台启动(不推荐)

2.2.4 后台启动(推荐)

2.2.5 Redis相关知识

3.1 Redis键(key)

3.2 String

3.2.1 简介

3.2.2 数据结构

3.3 List

3.3.1 简介

3.3.2 常用命令补充

3.3.3 数据结构

3.4 Set—不可重复

3.4.1 简介

3.4.2 数据结构

3.5 Hash—存储对象

3.5.1 简介

3.5.2 数据结构

3.6 Zset—有序Set

3.6.1 简介

3.6.2 数据结构

3.6.3 跳跃表

3.6.3.1 简介

3.6.3.2 实例

4.1 Units—单位

4.2 include—包含

类似jsp中的include,多实例的情况可以把公用的配置文件提取出来

4.3 网络相关配置

4.3.1 bind

4.3.2 protected-mode

4.3.3 Port

4.3.4 tcp-backlog

4.3.5 timeout

4.3.6 tcp-keepalive

4.4 GENERAL通用

4.4.1 daemonize

4.4.2 pidfile

4.4.3 loglevel

4.4.4 logfile

4.4.5 databases16

4.5 SECUTIRY 安全

4.5.1 设置密码

4.6 LIMITS 限制

4.6.1 maxclients

4.6.2 maxmemory

4.6.3 maxmemory-policy

4.6.4 maxmemory-samples

5.1 什么?

5.2 Redis的发布和订阅

5.3 发布订阅命令行实现

6.1 Bitmaps

6.1.1 简介

6.1.2 命令

6.1.2.1 setbit

6.1.2.2 getbit

6.1.2.3 bitcount

6.1.2.4 bitop

6.1.3 bitmap和set比较

6.2 HyperLogLog

6.3 Geospatial

7.1 步骤

7.2 遇到的问题(已经设置了bind和protected-mode)

7.3 实例(具体代码参照代码区)

8.1 整合步骤

@EnableCaching
@Configuration

public class RedisConfig extends CachingConfigurerSupport {

   
@Bean
   
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template =
new RedisTemplate<>();
        RedisSerializer<String> redisSerializer =
new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =
new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om =
new ObjectMapper();
        om.setVisibility(PropertyAccessor.
ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.
NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);

//key序列化方式
       
template.setKeySerializer(redisSerializer);
//value序列化
       
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
       
template.setHashValueSerializer(jackson2JsonRedisSerializer);
       
return template;
    }

   
@Bean
   
public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer =
new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =
new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
       
ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.
ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.
NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

// 配置序列化(解决乱码的问题),过期时间600秒
       
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(
600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
       
return cacheManager;
    }
}

9.1 事务的定义

9.2 Multi,Exec,discard

9.3 事务的错误处理

9.4 事务冲突—锁

9.4.1 悲观锁

9.4.2 乐观锁

9.4.3 操作

9.4.3.1 WATCH key(乐观锁)

9.4.3.2 unwatch

9.5 Redis事务三特性

10.1 RDB—Redis DataBase

10.1.1 简介

10.1.2 备份是如何执行的

10.1.3 Fork

10.1.4 RDB流程

10.1.5 dump.rdb文件

10.1.6 如何触发RDB

10.1.7 备份和恢复

10.1.8 优劣势

10.1.8.1 优势

10.1.8.2 劣势

10.2 AOF—Append Only File

10.2.1 是什么

10.2.2 流程

10.2.3 补充

10.2.4 AOP启动/修复/恢复

10.2.5 AOP同步频率设置—在配置文件里

10.2.6 优劣势

10.2.6.1 优势

10.2.6.2 劣势

10.3 总结

11.1 是什么

11.2 能干嘛

11.3 怎么玩

11.4 常用3招

11.4.1 一主二从

11.4.2 薪火相传

11.4.3 反客为主

11.5 复制原理

11.6 哨兵模式

11.6.1 是什么

11.6.2 步骤

11.6.3 故障恢复

12.1 问题

12.2 什么是集群

12.3 步骤

include /home/bigdata/redis.conf

port 6379

pidfile "/var/run/redis_6379.pid"

dbfilename "dump6379.rdb"

dir "/home/bigdata/redis_cluster"

logfile "/home/bigdata/redis_cluster/redis_err_6379.log"

cluster-enabled yes

cluster-config-file nodes-6379.conf

cluster-node-timeout 15000

12.4 集群方式访问

12.5 redis cluster如何分配

12.6 slots

12.7 在集群中录入值

12.8 查询

12.9 故障恢复

12.10 Jedis集群开发

public class JedisClusterTest {

  public static void main(String[] args) { 

     Set<HostAndPort>set =new HashSet<HostAndPort>();

     set.add(new HostAndPort("192.168.31.211",6379));  放哪个都可以,集群会自动切换

     JedisCluster jedisCluster=new JedisCluster(set);

     jedisCluster.set("k1", "v1");

     System.out.println(jedisCluster.get("k1"));

  }

}

12.11 优劣势

12.11.1 优势

12.11.2 劣势

13.1 缓存穿透

13.1.1 问题描述

13.1.2 解决方案

13.2 缓存击穿

13.2.1 问题描述

13.2.2 解决方案

13.3 缓存雪崩

13.3.1 问题描述

13.3.2 解决方案

16.4 分布式锁

16.4.1 问题描述

16.4.2 解决方案(使用Redis)

设置过期时间可以解决锁一直不释放的问题

@GetMapping("testLock")
public void testLock(){
   
//1获取锁,setne
   
Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock", "111");
   
//2获取锁成功、查询num的值
   
if(lock){
        Object value =
redisTemplate.opsForValue().get("num");
       
//2.1判断num为空return
       
if(StringUtils.isEmpty(value)){
           
return;
        }
       
//2.2有值就转成成int
       
int num = Integer.parseInt(value+"");
       
//2.3把redis的num加1
       
redisTemplate.opsForValue().set("num", ++num);
       
//2.4释放锁,del
       
redisTemplate.delete("lock");

    }
else{
       
//3获取锁失败、每隔0.1秒再获取
       
try {
            Thread.sleep(
100);
            testLock();
        }
catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

16.4.3 优化

16.4.3.1 设置方式的优化

16.4.3.2 UUID防误删

14.1 ACL—Access Control List

14.1.1 简介

14.1.2 命令

  

14.2 IO多线程

14.2.1 简介

14.2.2 原理架构

14.3 工具支持cluster

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值