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