赞
踩
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习新东西是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
<!-- redisTemplate -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.3</version>
</dependency>
application.yml
#tomcat
server:
port: 8089
#spring
spring:
redis:
datasource: 0
host: 47.116.333.444
port: 30005
# username:
password: mima123
注:这里的redis配置服务器地址和密码是假的,请根据自己的redis配置
RedisConfig.java
package com.redis.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @ClassDescription: redisTemplate配置类 * 配置工厂 * 序列化处理(解决redis客户端工具显示序列化导致的二进制) * 创建对象(解决了redisTemplate为null的问题) * @Author:李白 * @Date:2023/4/9 11:17 */ @Configuration public class RedisConfig { @Bean(name = "redisTemplate") public RedisTemplate redisTemplate(RedisConnectionFactory factory){ System.out.println("redis序列化-->"); RedisTemplate redisTemplate = new RedisTemplate(); RedisSerializer redisSerializer = new StringRedisSerializer(); //连接工厂 redisTemplate.setConnectionFactory(factory); //键序列化 redisTemplate.setKeySerializer(redisSerializer); //值序列化 redisTemplate.setValueSerializer(redisSerializer); //key hashMap序列化 redisTemplate.setHashKeySerializer(redisSerializer); //value hashMap序列化 redisTemplate.setHashValueSerializer(redisSerializer); return redisTemplate; } }
注:这里的配置类是解决两个问题--------------------------------
1 为了将redisTemplate对象注入容器,解决redisTemplate为空的报错
2 为了将redis存入的数据序列化,解决在redis工具中查看存入的数据是二进制乱码的问题
乱码原因:spring boot默认使用自带的jdk序列化器JdkSerializationRedisSerializer,所以会在序列化的时候在键值之前加上二进制标识
此配置类就是让redis使用这里的序列化器
RedisTemplateUtil.java
package com.redis.utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.io.Serializable; import java.time.Duration; import java.util.*; import java.util.concurrent.TimeUnit; /** * @ClassDescription: redisTemplate工具类 * 注: 同一个键存再次进行存储就是修改操作 * * @Author:李白 * @Date:2023/4/6 10:12 */ @Component public class RedisTemplateUtil implements Serializable { @Autowired private RedisTemplate redisTemplate; private static RedisTemplate redisTem; @PostConstruct public void initRedisTem(){ redisTem = redisTemplate; } /** * 判断redis中是否含有该键 * @param key 键值 * @return Boolean值 false 没有此键, true 含有此键 */ public static boolean hasKey(String key){ //返回boolean值 return redisTem.hasKey(key); } /** * 获取键的过期时间 * @param key 键 * @return 返回long类型的时间数值 */ public static long getExpire(String key){ return redisTem.getExpire(key); } /** * 过期时间设置 * @param key 键 * @param expireMinutes 过期时间 * @return 返回设置成功 */ public static boolean setExpire(String key, long expireMinutes){ Boolean expire = redisTem.expire(key, Duration.ofMinutes(expireMinutes)); return expire; } public static boolean setExpireByMillis(String key, long expireMillis){ Boolean expire = redisTem.expire(key, Duration.ofMillis(expireMillis)); return expire; } public static boolean setExpireBySecond(String key, long expireSeconds){ Boolean expire = redisTem.expire(key, Duration.ofSeconds(expireSeconds)); return expire; } public static boolean setExpireByHour(String key, long expireHours){ Boolean expire = redisTem.expire(key, Duration.ofHours(expireHours)); return expire; } public static boolean setExpireByDay(String key, long expireDays){ Boolean expire = redisTem.expire(key, Duration.ofMinutes(expireDays)); return expire; } /** * 删除键值 * @param key 键 * @return 返回删除结果 */ public static boolean delete(String key){ Boolean delete = redisTem.delete(key); return delete; } /** * 通过集合中的所有key删除对应的所有值 * @param keys 集合keys * @return 返回boolean值 */ public static boolean delete(Collections keys){ Boolean delete = redisTem.delete(keys); return delete; } //-----------------------------对象键值存取--------------------------------------------------------------- /** * 存值 * @param key 键 * @param value 值 */ public static void set(Object key, Object value){ redisTem.opsForValue().set(key, value); } /** * 存值 * @param key 键 * @param value 值 * @param offset 位置 */ public static void set(Object key, Object value, long offset){ redisTem.opsForValue().set(key, value, offset); } /** * 存值 * @param key 键 * @param value 值 * @param timeout 过期时间 */ public static void set(Object key, Object value, Duration timeout){ redisTem.opsForValue().set(key, value, timeout); } /** * 存值 * @param key 键 * @param value 值 * @param timeout 过期时间 * @param timeUnit 时间单位 */ public static void set(Object key, Object value, long timeout, TimeUnit timeUnit){ redisTem.opsForValue().set(key, value, timeout, timeUnit); } /** * 获取键对应的值 * @param key 键 * @return 返回键对应的值 */ public static Object get(Object key){ Object value = redisTem.opsForValue().get(key); return value; } /** * 获取键对应的值 * @param key 键 * @param start 开始位置 * @param end 结束位置 * @return 返回范围内的对应键的值 */ public static Object get(Object key, long start, long end){ Object value = redisTem.opsForValue().get(key, start, end); return value; } /** * 获取键对应的值的大小 * @param key 键 * @return 大小 */ public static long getSize(Object key){ Long size = redisTem.opsForValue().size(key); return size; } //-----------------------------String键值存取--------------------------------------------------------------- /** * 存值 * @param key 键 * @param value 值 */ public static void set(String key, String value){ redisTem.opsForValue().set(key, value); } /** * 存值 * @param key 键 * @param value 值 * @param offset 位置 */ public static void setByOffset(String key, String value, long offset){ redisTem.opsForValue().set(key, value, offset); } /** * 存值 * @param key 键 * @param value 值 * @param timeout 过期时间 可以使用Duration来调用相关时间参数 */ public static void set(String key, String value, Duration timeout){ redisTem.opsForValue().set(key, value, timeout); } /** * 存值(时间封装) * @param key 键 * @param value 值 * @param minutes 过期时间 分钟 */ public static void set(String key, String value, long minutes){ redisTem.opsForValue().set(key, value, Duration.ofMinutes(minutes)); } public static void setBySeconds(String key, String value, long seconds){ redisTem.opsForValue().set(key, value, Duration.ofSeconds(seconds)); } public static void setByHour(String key, String value, long hours){ redisTem.opsForValue().set(key, value, Duration.ofHours(hours)); } public static void setByDay(String key, String value, long days){ redisTem.opsForValue().set(key, value, Duration.ofDays(days)); } /** * 存值 * @param key 键 * @param value 值 * @param timeout 过期时间 * @param timeUnit 时间单位 */ public static void set(String key, String value, long timeout, TimeUnit timeUnit){ redisTem.opsForValue().set(key, value, timeout, timeUnit); } /** * 获取键对应的值 * @param key 键 * @return 返回键对应的值 */ public static Object get(String key){ Object value = redisTem.opsForValue().get(key); return value; } /** * 获取键对应的值 * @param key 键 * @param start 开始位置 * @param end 结束位置 * @return 返回范围内的对应键的值 */ public static Object get(String key, long start, long end){ Object value = redisTem.opsForValue().get(key, start, end); return value; } //-----------------------------List键值存取--------------------------------------------------------------- /** * 根据key存储到list的指定位置 * @param key 键 * @param index list中指定索引 * @param value 值 */ public static void lSet(Object key, long index, Object value){ redisTem.opsForList().set(key, index, value); } /** * 存储到列表最左侧 * @param key 键 * @param value 值 */ public static void lSet(Object key, Object value){ redisTem.opsForList().leftPush(key, value); } /** * 存储到列表最左 * @param key 键 * @param pivot * @param value 值 */ public static void lSet(Object key, Object pivot, Object value){ redisTem.opsForList().leftPush(key, pivot, value); } /** * 存储到列表最右 * @param key 键 * @param value 值 */ public static void lSetR(Object key, Object value){ redisTem.opsForList().rightPush(key, value); } /** * 存储到列表最右 * @param key 键 * @param pivot * @param value 值 */ public static void lSetR(Object key, Object pivot, Object value){ redisTem.opsForList().rightPush(key, pivot, value); } /** * 获取对应key的list列表大小 * @param key 键 * @return size */ public static long lGetSize(Object key){ Long size = redisTem.opsForList().size(key); return size; } /** * 获取键对应的列表数据 * @param key 键 * @return key的值(列表) */ public static List lGet(Object key){ List list = redisTem.opsForList().range(key, 0, -1); return list; } /** * 获取键对应的列表数据 * @param key 键 * @param start 开始位置 * @param end 结束位置 * @return 返回key对应范围内的列表数据 */ public static List lGet(Object key, long start, long end){ List list = redisTem.opsForList().range(key, start, end); return list; } //-----------------------------Set(无序)键值存取--------------------------------------------------------------- /** * 存储set类型的数据 * @param key 键 * @param values 值,可以是多个 */ public static void sSet(Object key, Object... values){ redisTem.opsForSet().add(key, values); } /** * 获取key对应set类型数据的大小 * @param key 键 */ public static long sGetSize(Object key){ Long size = redisTem.opsForSet().size(key); return size; } /** * 获取set类型的数据 * @param key 键 * @return 返回一个set集合 */ public static Set sGet(Object key){ Set members = redisTem.opsForSet().members(key); return members; } //-----------------------------ZSet(有序)键值存取--------------------------------------------------------------- /** * 存储有序集合 * @param key 键 * @param value 值 * @param score 排序 */ public static void zSet(Object key, Object value, double score){ redisTem.opsForZSet().add(key, value, score); } /** * 存储值 * @param key 键 * @param set 集合 */ public static void zSet(Object key, Set set){ redisTem.opsForZSet().add(key, set); } /** * 获取key指定范围的值 * @param key 键 * @param start 开始位置 * @param end 结束位置 * @return 返回set */ public static Set zGet(Object key, long start, long end){ Set set = redisTem.opsForZSet().range(key, start, end); return set; } /** * 获取key对应的所有值 * @param key 键 * @return 返回set */ public static Set zGet(Object key){ Set set = redisTem.opsForZSet().range(key, 0, -1); return set; } /** * 获取对用数据的大小 * @param key 键 * @return 键值大小 */ public static long zGetSize(Object key){ Long size = redisTem.opsForZSet().size(key); return size; } //-----------------------------HashMap键值存取--------------------------------------------------------------- /** * 存储hashMap数据 * @param key 键 * @param hashKey map的id * @param value 值 */ public static void hSet(Object key, Object hashKey, Object value){ redisTem.opsForHash().put(key, hashKey, value); } /** * 获取大小 * @param key 键 */ public static void hGetSize(Object key){ redisTem.opsForHash().size(key); } /** * 获取hashMap数据 * @param key 键 * @param hashKey map的id * @return 返回值 */ public static Object hGet(Object key, Object hashKey){ Object o = redisTem.opsForHash().get(key, hashKey); return o; } /** * 删除数据 * @param key 键 * @param hashKeys map的id * @return 返回Boolean */ public static Object hDel(Object key, Object... hashKeys){ Long delete = redisTem.opsForHash().delete(key, hashKeys); return delete; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。