与使用注解方式不同,注解方式可以零配置,只需引入依赖并在启动类上加上 @EnableCaching 注解就可以使用;而使用 RedisTemplate 方式麻烦些,需要做一些配置。

Redis 配置

第一步还是引入依赖和在启动类上加上 @EnableCaching 注解。

然后在 application.yml 文件中配置 Redis

spring:redis:port: 6379database: 0host: 127.0.0.1password:jedis:pool:max-active: 8max-wait: -1msmax-idle: 8min-idle: 0timeout: 5000ms

然后写个 RedisConfig.java 配置类

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;import java.net.UnknownHostException;@Configuration
public class RedisConfig {@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(jackson2JsonRedisSerializer);template.setValueSerializer(jackson2JsonRedisSerializer);template.setHashKeySerializer(jackson2JsonRedisSerializer);template.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}@Bean@ConditionalOnMissingBean(StringRedisTemplate.class)public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
}

Redis 的配置就完成了。

Redis 的数据结构类型

Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

下面来对这5种数据结构类型作简单的介绍:

结构类型 结构存储的值 结构的读写能力
String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement)
List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素
Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素
Hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对
Zset 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

StringRedisTemplate 与 RedisTemplate

RedisTemplate 对五种数据结构分别定义了操作

  • redisTemplate.opsForValue();

    操作字符串

  • redisTemplate.opsForHash();

    操作hash

  • redisTemplate.opsForList();

    操作list

  • redisTemplate.opsForSet();

    操作set

  • redisTemplate.opsForZSet();

    操作有序set

如果操作字符串的话,建议用 StringRedisTemplate

StringRedisTemplate 与 RedisTemplate 的区别

  1. StringRedisTemplate 继承了 RedisTemplate。

  2. RedisTemplate 是一个泛型类,而 StringRedisTemplate 则不是。

  3. StringRedisTemplate 只能对 key=String,value=String 的键值对进行操作,RedisTemplate 可以对任何类型的 key-value 键值对操作。

  4. 他们各自序列化的方式不同,但最终都是得到了一个字节数组,殊途同归,StringRedisTemplate 使用的是 StringRedisSerializer 类;RedisTemplate 使用的是 JdkSerializationRedisSerializer 类。反序列化,则是一个得到 String,一个得到 Object

  5. 两者的数据是不共通的,StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate中 的数据。

项目中使用

在需要使用 Redis 的地方,用 @Autowired 注入进来

@Autowired
RedisTemplate redisTemplate;@Autowired
StringRedisTemplate stringRedisTemplate;

由于项目中暂时仅用到了 StringRedisTemplate 与 RedisTemplate 的 Hash 结构,StringRedisTemplate 比较简单就不贴代码了,下面仅对操作 Hash 进行举例。

关于 RedisTemplate 的详细用法,有一篇文章已经讲的很细很好了,我觉得没必要再去写了。传送门

用 RedisTemplate 操作 Hash

package io.redis.demo;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTemplateTest {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testpublic void test1(){redisTemplate.opsForValue().set("name","zhangsan");String name = (String)redisTemplate.opsForValue().get("name");System.out.println(name);}@Testpublic void test2(){stringRedisTemplate.opsForValue().set("name","zhangsan");String name = stringRedisTemplate.opsForValue().get("name");System.out.println(name);}@Testpublic void test3(){redisTemplate.opsForHash().put("produce","1","电视机");redisTemplate.opsForHash().put("produce","2","冰箱");redisTemplate.opsForHash().put("produce","3","彩电");redisTemplate.opsForHash().put("produce","4","自行车");String name = (String) redisTemplate.opsForHash().get("produce", "4");System.out.println(name);}@Testpublic void test4(){redisTemplate.opsForList().leftPush("name","zhangfei");redisTemplate.opsForList().leftPush("name","liubei");redisTemplate.opsForList().leftPush("name","guanyu");List names = redisTemplate.opsForList().range("name", 0, -1);for (Object name : names) {System.out.println(name);}}
}

RedisTemplate 使用 Redis 缓存相关推荐

  1. Spring Boot集成Redis缓存之RedisTemplate的方式

    前言 Spring Boot 集成Redis,将自动配置 RedisTemplate,在需要使用的类中注入RedisTemplate的bean即可使用 @Autowired private Redis ...

  2. SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)

    1.说明 SpringBoot集成Redis缓存, 首先创建一个Spring Boot工程, 使用Maven向导方式创建:SpringBoot集成Maven工程 然后引入redis的spring bo ...

  3. redistemplate使用_SpringBoot 使用 Redis 缓存

    1.pom.xml引入jar包,如下: org.springframework.boot spring-boot-starter-data-redis 2.修改项目启动类,增加注解@EnableCac ...

  4. 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...

  5. Spring Boot 结合 Redis 缓存

    Redis官网: 中:http://www.redis.cn/ 外:https://redis.io/ redis下载和安装 Redis官方并没有提供Redis的Windows版本,这里使用微软提供的 ...

  6. 高并发下redis缓存穿透问题解决方案

    一.使用场景 我们在日常的开发中,经常会遇到查询数据列表的问题,有些数据是不经常变化的,如果想做一下优化,在提高查询的速度的同时减轻数据库的压力,那么redis缓存绝对是一个好的解决方案. 二.需求 ...

  7. java清空redis缓存数据库_java相关:Spring Cache手动清理Redis缓存

    java相关:Spring Cache手动清理Redis缓存 发布于 2020-4-24| 复制链接 摘记: 这篇文章主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非 ...

  8. springboot中使用RedisTemplate操作redis遇到的问题

    首先说说问题, 在springboot中使用RedisTemplate操作redis时候,通过redis工具发现存入redis的数据的键为空 ,如下图: 点击空的键,弹出错误提示:不能打开值的标签,不 ...

  9. 【过程记录】springboot整合redis/分别用redisRepository和redistemplate操作redis

    导入依赖 基本配置 使用RedisTemplate访问redis 使用Redisrepository访问redis 实例: 导入依赖 菜单大部分情况下不会出现变化,我们可以将其放入Redis 加快加载 ...

最新文章

  1. 算法---字符串去重
  2. Pytorch的tensor数据类型
  3. JSP简单练习-EL表达式操作JavaBean
  4. mysql linux 安装部署,linux之MySQL安装部署(示例代码)
  5. list vue 删除后页面渲染_Vue项目中v-for数组删除第n项元素产生渲染错误问题及解决方法...
  6. tcpdump启动脚本
  7. html+css+js实现登录页面
  8. 用python语言写一个简单的计算器
  9. Python初识以及变量
  10. mac maven安装与配置镜像
  11. Python程序设计题库
  12. 阿里、腾讯裁员,2022金三银四Android开发该何去何从?
  13. PTK(Pulmonarytoolkit)环境搭建与 ITK4.13+VS2015的配置
  14. ad19怎么手动布线_AD18/19自动布线之坑
  15. 【渝粤题库】广东开放大学 网络风险评估 形成性考核
  16. jOOQ星期二:Markus Winand执行现代SQL任务
  17. Gerrit升级和升级后的check(包括gerrit mirror 服务器上的升级)
  18. my read_university
  19. java实验四 综合应用实验
  20. 计算机一级B考试总结500字,期中考试反思作文500字

热门文章

  1. 20162302 《程序设计与数据结构》第一周学习总结
  2. ECMAScript 6的解构赋值 ( destructuring assignment)
  3. 【分享】WeX5的正确打开方式(1)
  4. R语言中strptime返回值永远为NA的问题
  5. informatica中的workflow连接远程数据库
  6. 【存储过程】Merge Into语句实现Insert/Update在Oracle中的应用
  7. Oracle数据库多结点相关配置
  8. 【PL/SQL】Excel批量往数据库中插入数据:
  9. java程序员的第二编程语言应该选什么?
  10. 对象并不一定都是在堆上分配内存的