springboo 整合 redis

springBoot 整合 redis

starter启动依赖。---包含自动装配类---完成相应的装配功能。

  1. 引入依赖
xml 复制代码
<!--引入了redis整合springboot 的依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 修改配置文件
properties 复制代码
# 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
  1. 使用

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()操作命令
  1. put(H var1, HK var2, HV var3)
    :::tips
  • 新增hashMap值
    • var1 为Redis的key
    • var2 为key对应的map值的key
    • var3 为key对应的map值的值
    • var2相同替换var3

:::

  1. get(H var1, Object var2)

    :::success
    获取key对应的map中,key为var2的map的对应的值

    :::

  2. entries(H key)

获取key对应的所有map键值对

  1. keys(H key)

**获取key对应的map中所有的键 **

5、values(H key)

:::danger
获取key对应的map中所有的值

:::

  1. hasKey(H key, Object var2)

判断key对应的map中是否有指定的键

  1. size(H key)

    :::info
    获取key对应的map的长度

    :::

  2. putIfAbsent(H key, HK var2, HV var3)

如何key对应的map不存在,则新增到map中(true),存在则不新增也不覆盖(false)

  1. putAll(H key, Map<? extends HK, ? extends HV> map)

    :::info
    直接以map集合的方式添加key对应的值
    map中key已经存在,覆盖替换
    map中key不存在,新增

    :::

  2. multiGet(H key, Collection var2)

    :::tips

    以集合的方式获取这些键对应的map

    :::

  3. lengthOfValue(H key, HK var2)

获取指定key对应的map集合中,指定键对应的值的长度

  1. increment(H key, HK var2, long long1)

使key对应的map中,键var2对应的值以long1自增

  1. increment(H key, HK var2, double d1)

使key对应的map中,键var2对应的值以double类型d1自增

  1. delete(H key, Object... var2)

删除key对应的map中的键值对

opsForValue()
  1. **set(K var1, V var2)**

新增一个字符串类型的值

  • var1是key
  • var2是值
  • key存在就覆盖,不存在新增
  1. **set(K key, V value, timeout, TimeUnit.XXX)**

新增一个字符串类型的值,同时设置过期时间

  • var1是key
  • var2是值
  • key存在就覆盖,不存在新增
  1. **append(K var1, String var2)**

给对应的key追加value,key不存在直接新增 返回增加后的字符串长度

  1. **set(K key1, V v1, long v2)**

将key的 value 从下标 3 往后替换为新的value, key不存在相当于新增

  1. **setIfAbsent(K var1, V var2);**

如果key不存在则新增(true),key存在不做任何操作(false)

  1. **setIfAbsent(K var1, V var2, long var3, TimeUnit var5)**

如果key不存在则新增,同时设置过期时间,key存在不做任何操作。

  1. **setIfPresent(K var1, V var2)**

如果key存在则修改,key不存在不做任何操作

  1. **setIfPresent(K var1, V var2, long var3, TimeUnit var5)**

如果key存在则修改,同时设置过期时间,key不存在不做任何操作。

  1. **getAndSet(K var1, V var2)**

获取key对应的值,如果key存在则修改,不存在则新增

  1. **increment(K var1)**

以增量的方式(默认增量为1)将long值存储在变量中(value为其他类型时报错),返回最新值

  1. **increment(K var1, long var2)**

以指定增量的方式将Long值存储在变量中,返回最新值

  1. **decrement(K var1)**

以递减的方式(默认为1)将long值存储在变量中(value为其他类型时报错,Double也不行,只能为Long),返回最新值

  1. **decrement(K var1, long var2)**

以指定递减量递减的方式将long值存储在变量中(value为其他类型时报错,Double也不行,只能为Long),返回最新值

  1. **size(K var1)**

获取指定key对应值的长度

  1. **get(Object var1)**

获取指定的key对应的值

  1. **get(K var1, long var2, long var4)**

获取key指定下标之间对应的值

  1. **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**

java 复制代码
//指定key的序列化方式。
redisTemplate.setKeySerializer(new StringRedisSerializer());
//指定value的序列化方式
redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));

直接写一个序列化配置类

后面再使用时候直接自动注入就行不用再序列化了(省略 8.6.2)

java 复制代码
@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);
    }

集群模式

只需要修改配置文件

java 复制代码
#集群模式
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
相关推荐
666786662 分钟前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
十年人间~2 分钟前
mysql等保数据库命令
数据库·mysql
Amagi.6 分钟前
Redis的内存淘汰策略
数据库·redis·mybatis
hai41174196212 分钟前
mysql 与postgresql 的区别(gpt4)
数据库·mysql·postgresql
知识分享小能手21 分钟前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
白总Server36 分钟前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
冰镇毛衣42 分钟前
2.4 数据库表字段约束
数据库·sql·mysql
&木头人&1 小时前
oracle select字段有子查询会每次执行子查询吗
数据库·oracle
冰镇毛衣1 小时前
数据库简介
开发语言·数据库·sql·oracle
(⊙o⊙)~哦1 小时前
oracle查询历史操作记录
数据库·oracle