springBoot 整合 redis
starter启动依赖。—包含自动装配类—完成相应的装配功能。
- 引入依赖
<!--引入了redis整合springboot 的依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 修改配置文件
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-idle=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.jedis.timeout=5000
- 使用
springboot整合redis时封装了两个工具类:
**StringRedisTemplate**和**RedisTemplate**.
StringRedisTemplate它是RedisTemplate的子类。StringRedisTemplate里面只能存放字符串的内容。
StringRedisTemplate && redisTemplate
**StringRedisTemplate中定义的5中数据结构,其实和redisTemplate一样,只是参数改成了String,两者的使用就看大家的业务场景了。
| opsForList() | 操作list | 
|---|---|
| opsForValue() | 操作字符串 | 
| opsForCluster() | 集群时使用 | 
| opsForGeo() | 地理位置时使用 | 
| opsForHash() | 操作hash | 
| opsForSet() | 操作set | 
| opsForZSet() | 操作有序set | 
opsForHash()操作命令
 

- put(H var1, HK var2, HV var3)
 :::tips
- 新增hashMap值 
  - var1 为Redis的key
- var2 为key对应的map值的key
- var3 为key对应的map值的值
- var2相同替换var3
 

 :::
-  get(H var1, Object var2)
 :::success
 获取key对应的map中,key为var2的map的对应的值 
 :::
-  entries(H key)
获取key对应的所有map键值对
- keys(H key)
**获取key对应的map中所有的键 **
5、values(H key)
 :::danger
 获取key对应的map中所有的值
 :::
- hasKey(H key, Object var2)
判断key对应的map中是否有指定的键
-  size(H key)
 :::info
 获取key对应的map的长度 
 :::
-  putIfAbsent(H key, HK var2, HV var3)
如何key对应的map不存在,则新增到map中(true),存在则不新增也不覆盖(false)
-  putAll(H key, Map<? extends HK, ? extends HV> map)
 :::info
 直接以map集合的方式添加key对应的值
 map中key已经存在,覆盖替换
 map中key不存在,新增 
 :::
-  multiGet(H key, Collection var2)
 :::tips
 以集合的方式获取这些键对应的map 
 :::
-  lengthOfValue(H key, HK var2)
获取指定key对应的map集合中,指定键对应的值的长度
- increment(H key, HK var2, long long1)
使key对应的map中,键var2对应的值以long1自增
- increment(H key, HK var2, double d1)
使key对应的map中,键var2对应的值以double类型d1自增
- delete(H key, Object… var2)
删除key对应的map中的键值对
opsForValue()

- **set(K var1, V var2)**
新增一个字符串类型的值
- var1是key
- var2是值
- key存在就覆盖,不存在新增

- **set(K key, V value, timeout, TimeUnit.XXX)**
新增一个字符串类型的值,同时设置过期时间
- var1是key
- var2是值
- key存在就覆盖,不存在新增

- **append(K var1, String var2)**
给对应的key追加value,key不存在直接新增 返回增加后的字符串长度
- **set(K key1, V v1, long v2)**
将key的 value 从下标 3 往后替换为新的value, key不存在相当于新增
- **setIfAbsent(K var1, V var2);**
如果key不存在则新增(true),key存在不做任何操作(false)
- **setIfAbsent(K var1, V var2, long var3, TimeUnit var5)**
如果key不存在则新增,同时设置过期时间,key存在不做任何操作。
- **setIfPresent(K var1, V var2)**
如果key存在则修改,key不存在不做任何操作
- **setIfPresent(K var1, V var2, long var3, TimeUnit var5)**
如果key存在则修改,同时设置过期时间,key不存在不做任何操作。
- **getAndSet(K var1, V var2)**
获取key对应的值,如果key存在则修改,不存在则新增
- **increment(K var1)**
以增量的方式(默认增量为1)将long值存储在变量中(value为其他类型时报错),返回最新值
- **increment(K var1, long var2)**
以指定增量的方式将Long值存储在变量中,返回最新值
- **decrement(K var1)**
以递减的方式(默认为1)将long值存储在变量中(value为其他类型时报错,Double也不行,只能为Long),返回最新值
- **decrement(K var1, long var2)**
以指定递减量递减的方式将long值存储在变量中(value为其他类型时报错,Double也不行,只能为Long),返回最新值
- **size(K var1)**
获取指定key对应值的长度
- **get(Object var1)**
获取指定的key对应的值
- **get(K var1, long var2, long var4)**
获取key指定下标之间对应的值
- **multiSet(Map<? extends K, ? extends V> var1)**
将map中的key分别作为不同的key存到Redis中(见截图)
- 若某个key已经存在则替换为新值,其他不存在的则新增
- map中5个key,3个存在Redis中,2个没有,结果就是3个值被修改,2个新增

在使用 redis 时要注意
如果使用RedisTemplate每次都需要人为指定key和value的序列化
注意导包**FastJson**
//指定key的序列化方式。
redisTemplate.setKeySerializer(new StringRedisSerializer());
//指定value的序列化方式
redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
直接写一个序列化配置类
后面再使用时候直接自动注入就行不用再序列化了(省略 8.6.2)
@Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置value的序列化方式json
        redisTemplate.setValueSerializer(redisSerializer());
        //设置key序列化方式String
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置hash key序列化方式String
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //设置hash value序列化json
        redisTemplate.setHashValueSerializer(redisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
    public RedisSerializer<Object> redisSerializer() {
        //创建JSON序列化器
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //必须设置,否则无法序列化实体类对象
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
        return new GenericJackson2JsonRedisSerializer(objectMapper);
    }
集群模式
只需要修改配置文件
#集群模式
spring.data.redis.cluster.nodes=47.121.143.123:7001,47.121.143.123:7002,47.121.143.123:7003,47.121.143.123:7004,47.121.143.123:7005,47.121.143.123:7006


























![[IMX6ULL]移植NXP Linux Kernel 5.15](https://i-blog.csdnimg.cn/direct/7b84efcb7e5e439ea9e71547c8ecb312.png)















