RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
pom 加入redis相关依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.0.4.RELEASE</version></dependency>

yml redis配置:

  redis:host: 192.168.0.0  # Redis服务器地址database: 0 # Redis数据库索引(默认为0)port: 6379 # Redis服务器连接端口password: # Redis服务器连接密码(默认为空)jedis:pool:max-active: 8 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 8 # 连接池中的最大空闲连接min-idle: 0 # 连接池中的最小空闲连接timeout: 3000ms # 连接超时时间(毫秒

配置一个RedisTemplate:

package com.company.project.common.utils.RedisUtil;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** Created by on 2020/9/22.*/
@Configuration
public class RedisConfig {/*** @SuppressWarnings 该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默**    关键字         用途*    deprecation   使用了不赞成使用的类或方法时的警告*    unchecked     执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。*    fallthrough   当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。*    path          在类路径、源文件路径等中有不存在的路径时的警告。*    serial        当在可序列化的类上缺少 serialVersionUID 定义时的警告。*    finally       任何 finally 子句不能正常完成时的警告。*    all           关于以上所有情况的警告。*///    注入 Spring 容器中,忽略所有警告@Bean@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//        key 采用 String 的序列化方式template.setKeySerializer(stringRedisSerializer);
//        hash 的 key 也采用 String 的序列化方式template.setHashKeySerializer(stringRedisSerializer);
//        value 的序列化方式采用 JSONtemplate.setValueSerializer(jackson2JsonRedisSerializer);
//        hash value 的序列化方式也采用 JSONtemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}}

配置RedisUtil,直接用redisTemplate操作redis,需要很多行代码,因此直接封装好一个redisutils,这样写代码更方便点。这个redisUtils交给spring容器实例化,使用时直接注解注入。

package com.company.project.common.utils.RedisUtil;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;/*** Created by on 2020/9/22.* 直接用redisTemplate操作redis,需要很多行代码,因此直接封装好一个redisutils,这样写代码更方便点。这个redisUtils交给spring容器实例化,使用时直接注解注入。*/
/*** @component (把普通pojo实例化到spring容器中,相当于配置文件中的)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。1、@Service用于标注业务层组件2、@Controller用于标注控制层组件(如struts中的action)3、@Repository用于标注数据访问组件,即DAO组件.4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。*/
@Component
public class RedisUtil {/*** @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的* <property name="属性名" value=" 属性值"/>    通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释*/@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 指定缓存失效时间* @param key 键* @param time 时间(秒)* @return true / false*/public boolean expire(String key, long time) {try {if (time > 0) {redisTemplate.expire(key, time, TimeUnit.SECONDS);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 根据 key 获取过期时间* @param key 键* @return*/public long getExpire(String key) {return redisTemplate.getExpire(key, TimeUnit.SECONDS);}/*** 判断 key 是否存在* @param key 键* @return true / false*/public boolean hasKey(String key) {try {return redisTemplate.hasKey(key);} catch (Exception e) {e.printStackTrace();return false;}}/*** 删除缓存* @SuppressWarnings("unchecked") 忽略类型转换警告* @param key 键(一个或者多个)*/@SuppressWarnings("unchecked")public void del(String... key) {if (key != null && key.length > 0) {if (key.length == 1) {redisTemplate.delete(key[0]);} else {//                传入一个 Collection<String> 集合redisTemplate.delete(CollectionUtils.arrayToList(key));}}}//    ============================== String ==============================/*** 普通缓存获取* @param key 键* @return 值*/public Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 普通缓存放入* @param key 键* @param value 值* @return true / false*/public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 普通缓存放入并设置时间* @param key 键* @param value 值* @param time 时间(秒),如果 time < 0 则设置无限时间* @return true / false*/public boolean set(String key, Object value, long time) {try {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {set(key, value);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 递增* @param key 键* @param delta 递增大小* @return*/public long incr(String key, long delta) {if (delta < 0) {throw new RuntimeException("递增因子必须大于 0");}return redisTemplate.opsForValue().increment(key, delta);}/*** 递减* @param key 键* @param delta 递减大小* @return*/public long decr(String key, long delta) {if (delta < 0) {throw new RuntimeException("递减因子必须大于 0");}return redisTemplate.opsForValue().increment(key, delta);}//    ============================== Map ==============================/*** HashGet* @param key 键(no null)* @param item 项(no null)* @return 值*/public Object hget(String key, String item) {return redisTemplate.opsForHash().get(key, item);}/*** 获取 key 对应的 map* @param key 键(no null)* @return 对应的多个键值*/public Map<Object, Object> hmget(String key) {return redisTemplate.opsForHash().entries(key);}/*** HashSet* @param key 键* @param map 值* @return true / false*/public boolean hmset(String key, Map<Object, Object> map) {try {redisTemplate.opsForHash().putAll(key, map);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** HashSet 并设置时间* @param key 键* @param map 值* @param time 时间* @return true / false*/public boolean hmset(String key, Map<Object, Object> map, long time) {try {redisTemplate.opsForHash().putAll(key, map);if (time > 0) {expire(key, time);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 向一张 Hash表 中放入数据,如不存在则创建* @param key 键* @param item 项* @param value 值* @return true / false*/public boolean hset(String key, String item, Object value) {try {redisTemplate.opsForHash().put(key, item, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 向一张 Hash表 中放入数据,并设置时间,如不存在则创建* @param key 键* @param item 项* @param value 值* @param time 时间(如果原来的 Hash表 设置了时间,这里会覆盖)* @return true / false*/public boolean hset(String key, String item, Object value, long time) {try {redisTemplate.opsForHash().put(key, item, value);if (time > 0) {expire(key, time);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 删除 Hash表 中的值* @param key 键* @param item 项(可以多个,no null)*/public void hdel(String key, Object... item) {redisTemplate.opsForHash().delete(key, item);}/*** 判断 Hash表 中是否有该键的值* @param key 键(no null)* @param item 值(no null)* @return true / false*/public boolean hHasKey(String key, String item) {return redisTemplate.opsForHash().hasKey(key, item);}/*** Hash递增,如果不存在则创建一个,并把新增的值返回* @param key 键* @param item 项* @param by 递增大小 > 0* @return*/public Double hincr(String key, String item, Double by) {return redisTemplate.opsForHash().increment(key, item, by);}/*** Hash递减* @param key 键* @param item 项* @param by 递减大小* @return*/public Double hdecr(String key, String item, Double by) {return redisTemplate.opsForHash().increment(key, item, -by);}//    ============================== Set ==============================/*** 根据 key 获取 set 中的所有值* @param key 键* @return 值*/public Set<Object> sGet(String key) {try {return redisTemplate.opsForSet().members(key);} catch (Exception e) {e.printStackTrace();return null;}}/*** 从键为 key 的 set 中,根据 value 查询是否存在* @param key 键* @param value 值* @return true / false*/public boolean sHasKey(String key, Object value) {try {return redisTemplate.opsForSet().isMember(key, value);} catch (Exception e) {e.printStackTrace();return false;}}/*** 将数据放入 set缓存* @param key 键值* @param values 值(可以多个)* @return 成功个数*/public long sSet(String key, Object... values) {try {return redisTemplate.opsForSet().add(key, values);} catch (Exception e) {e.printStackTrace();return 0;}}/*** 将数据放入 set缓存,并设置时间* @param key 键* @param time 时间* @param values 值(可以多个)* @return 成功放入个数*/public long sSet(String key, long time, Object... values) {try {long count = redisTemplate.opsForSet().add(key, values);if (time > 0) {expire(key, time);}return count;} catch (Exception e) {e.printStackTrace();return 0;}}/*** 获取 set缓存的长度* @param key 键* @return 长度*/public long sGetSetSize(String key) {try {return redisTemplate.opsForSet().size(key);} catch (Exception e) {e.printStackTrace();return 0;}}/*** 移除 set缓存中,值为 value 的* @param key 键* @param values 值* @return 成功移除个数*/public long setRemove(String key, Object... values) {try {return redisTemplate.opsForSet().remove(key, values);} catch (Exception e) {e.printStackTrace();return 0;}}//    ============================== List ==============================/*** 获取 list缓存的内容* @param key 键* @param start 开始* @param end 结束(0 到 -1 代表所有值)* @return*/public List<Object> lGet(String key, long start, long end) {try {return redisTemplate.opsForList().range(key, start, end);} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取 list缓存的长度* @param key 键* @return 长度*/public long lGetListSize(String key) {try {return redisTemplate.opsForList().size(key);} catch (Exception e) {e.printStackTrace();return 0;}}/*** 根据索引 index 获取键为 key 的 list 中的元素* @param key 键* @param index 索引*              当 index >= 0 时 {0:表头, 1:第二个元素}*              当 index < 0 时 {-1:表尾, -2:倒数第二个元素}* @return 值*/public Object lGetIndex(String key, long index) {try {return redisTemplate.opsForList().index(key, index);} catch (Exception e) {e.printStackTrace();return null;}}/*** 将值 value 插入键为 key 的 list 中,如果 list 不存在则创建空 list* @param key 键* @param value 值* @return true / false*/public boolean lSet(String key, Object value) {try {redisTemplate.opsForList().rightPush(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 将值 value 插入键为 key 的 list 中,并设置时间* @param key 键* @param value 值* @param time 时间* @return true / false*/public boolean lSet(String key, Object value, long time) {try {redisTemplate.opsForList().rightPush(key, value);if (time > 0) {expire(key, time);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 将 values 插入键为 key 的 list 中* @param key 键* @param values 值* @return true / false*/public boolean lSetList(String key, List<Object> values) {try {redisTemplate.opsForList().rightPushAll(key, values);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 将 values 插入键为 key 的 list 中,并设置时间* @param key 键* @param values 值* @param time 时间* @return true / false*/public boolean lSetList(String key, List<Object> values, long time) {try {redisTemplate.opsForList().rightPushAll(key, values);if (time > 0) {expire(key, time);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 根据索引 index 修改键为 key 的值* @param key 键* @param index 索引* @param value 值* @return true / false*/public boolean lUpdateIndex(String key, long index, Object value) {try {redisTemplate.opsForList().set(key, index, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 在键为 key 的 list 中删除值为 value 的元素* @param key 键* @param count 如果 count == 0 则删除 list 中所有值为 value 的元素*              如果 count > 0 则删除 list 中最左边那个值为 value 的元素*              如果 count < 0 则删除 list 中最右边那个值为 value 的元素* @param value* @return*/public long lRemove(String key, long count, Object value) {try {return redisTemplate.opsForList().remove(key, count, value);} catch (Exception e) {e.printStackTrace();return 0;}}/*** ceshi* @param args*/public static void main(String[] args) {}
}

在ServiceImpl 中使用:

    @Autowiredprivate RedisUtil redisUtil;List<Object> strings = new ArrayList<>();strings.add("哈哈哈");strings.add("嘤嘤嘤");strings.add("嘎嘎嘎");redisUtil.lSetList("666", strings);

查看:

SpringBoot整合redis——redisTemplate,RedisUtil的使用!相关推荐

  1. springboot整合redis,redisTemplate 空指针

    今天创建了一个springboot项目,想整合一下redis数据库,结果redisTemplate一直未空指针异常,最后总结:出现在的原因有两点 1.对@Autowired和@Resource不熟 2 ...

  2. Redis学习篇3_事务及其监控(锁)、Jedis、SpringBoot整合Redis、RedisTemplate的json序列化、RedisUtil工具类

    目录 事务及其监控(锁) Jedis SpringBoot整合Redis RedisTemplate 默认RedisTemplate来源 关于中文序列化问题 RedisUtil工具类 一.事务及其监控 ...

  3. SpringBoot整合Redis 之 StringRedisTemplate、RedisTemplate 基础

    SpringBoot 整合 Redis 环境准备 引入依赖 配置文件 StringRedisTemplate 基本使用 Key 常用操作 String 常用操作 List 常用操作 Set 常用操作 ...

  4. SpringBoot整合Redis - @Cacheable 和 RedisTemplate

    对之前网站做了一些很简单的优化,给用户列表加了一个分页功能. 分页就更好考虑加载速度,如果换一页就要等几秒,那体验感是非常差的. 因此想到了加一个redis缓存. springboot整合redis有 ...

  5. RedisTemplate操作redis五大类型用法详解(springboot整合redis版本)

    1.案例说明 springboot整合redis之后,提供了操作redis的简便方式 通过通用对象redisTemplate方式操作String,Hash,List,Set SortSet五大数据类型 ...

  6. SpringBoot 整合 Redis 使用详解(StringRedisTemplate 和 RedisTemplate 对比分析)

    背景: 最近项目采用前后端分离的架构,单点登录系统采用Redis存储用户session信息,在这里总结下springboot整合redis的详细过程,以及部分源码分析 1.前期准备 首先保证安装好re ...

  7. SpringBoot(六):SpringBoot整合Redis

    From: https://blog.csdn.net/plei_yue/article/details/79362372 前言 在本篇文章中将SpringBoot整合Redis,使用的是RedisT ...

  8. Linux中部署Redis及SpringBoot整合Redis

    一.Linux下安装Redis 1.官网下载安装包 redis-6.2.0.tar.gz 2.程序一般放在/opt目录下,将安装包移动到/opt目录下 mv redis-6.2.0.tar.gz /o ...

  9. SpringBoot整合Redis+Redis缓存应用+Redis实现Session共享+...

    一.SpringBoot整合Redis 1.导入依赖 <!--存在Redis依赖--> <dependency><groupId>org.springframewo ...

最新文章

  1. 国际电信联盟(ITU)发布最新IDI指数
  2. 类继承、组合和抽象类
  3. 关于jQuery.query.js 取参数的一个小问题
  4. 前端学习(1742):前端调试值之快速调试和修改
  5. DBeaver 导出EXCEL文件
  6. Spark基础学习笔记10:Scala集成开发环境
  7. Spring学习笔记:尝试Lombok简化实体类代码
  8. bzoj2286【SDOI2011】消耗战
  9. a指定许可服务器无效,错误的hostid与许可证服务器
  10. java实现消息推送_java实现后台服务器消息推送
  11. 知识点索引:常用的麦克劳林级数展开式
  12. JDK8中Lambda 表达式语法糖脱糖[非原创]
  13. 为何要使用加密邮箱?
  14. “三只猫,三分钟,捉三只老鼠,多少只猫,一百分钟,捉一百只老鼠”有感
  15. Java基础篇--概念理解(重写、接口)
  16. 高通平台开发系列讲解(USB篇)DWC3控制USB速率
  17. 2019尚硅谷大数据Maven篇一 Maven安装和概念
  18. react 实现图片上传功能
  19. 程序员眼中的优秀记帐软件
  20. matlab坐标污染物浓度,基于MATLAB城市空气质量评价体系.doc

热门文章

  1. WebDAV之葫芦儿•派盘+RS文件管理器
  2. laravel开源版华登区块狗
  3. 三菱梯形图转换c语言软件,三菱梯形图转51单片机软件使用程序超过100步又要使用软件的朋友.pdf...
  4. Linux系统目录简单说明
  5. SpringBoot使用JavaMailSender发送邮件:com.sun.mail.smtp.SMTPSendFailedException: 451 MI:SFQ 163 smtp7
  6. CAD高清全彩输出pdf文件
  7. heigh,clientHeight , scrollHeight , offsetHeight介绍
  8. 翻斗式雨量计的组成与工作原理
  9. 单页面SPA和多页面MPA应用的区别
  10. Ubuntu 下PupBot 搭建QQ机器人