springboo 整合 redis

avatar
作者
筋斗云
阅读量:0

springBoot 整合 redis

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

  1. 引入依赖
<!--引入了redis整合springboot 的依赖--> <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 
  1. 修改配置文件
# 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,两者的使用就看大家的业务场景了。
QQ_1721789573733.png

opsForList()操作list
opsForValue()操作字符串
opsForCluster()集群时使用
opsForGeo()地理位置时使用
opsForHash()操作hash
opsForSet()操作set
opsForZSet()操作有序set

opsForHash()操作命令

QQ_1721818487604.png

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

image.png
:::

  1. get(H var1, Object var2)
    :::success
    获取key对应的map中,key为var2的map的对应的值
    QQ_1721818086626.png
    :::

  2. entries(H key)

获取key对应的所有map键值对
QQ_1721818474977.png

  1. keys(H key)

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

5、values(H key)
:::danger
获取key对应的map中所有的值
QQ_1721818758194.png
:::

  1. hasKey(H key, Object var2)

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

  1. size(H key)
    :::info
    获取key对应的map的长度
    QQ_1721818958535.png
    :::

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

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

  1. putAll(H key, Map<? extends HK, ? extends HV> map)
    :::info
    直接以map集合的方式添加key对应的值
    map中key已经存在,覆盖替换
    map中key不存在,新增
    QQ_1721819261479.png
    :::

  2. multiGet(H key, Collection var2)
    :::tips
    以集合的方式获取这些键对应的map
    QQ_1721819501397.png
    :::

  3. lengthOfValue(H key, HK var2)

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

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

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

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

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

  1. delete(H key, Object… var2)

删除key对应的map中的键值对
QQ_1721819930636.png

opsForValue()

QQ_1721821312247.png

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

新增一个字符串类型的值

  • var1是key
  • var2是值
  • key存在就覆盖,不存在新增

QQ_1721821320573.png

  1. **set(K key, V value, timeout, TimeUnit.XXX)**

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

  • var1是key
  • var2是值
  • key存在就覆盖,不存在新增

QQ_1721821889011.png

  1. **append(K var1, String var2)**

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. **increment(K var1)**

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

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

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

  1. **decrement(K var1)**

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

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

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

  1. **size(K var1)**

获取指定key对应值的长度
QQ_1721823045497.png

  1. **get(Object var1)**

获取指定的key对应的值
QQ_1721823089843.png

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

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

  1. **multiSet(Map<? extends K, ? extends V> var1)**

将map中的key分别作为不同的key存到Redis中(见截图)

  • 若某个key已经存在则替换为新值,其他不存在的则新增
  • map中5个key,3个存在Redis中,2个没有,结果就是3个值被修改,2个新增

QQ_1721823172801.png

在使用 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 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!