运行环境:
JDK1.7.
SpringBoot1.4.7
redis3.0.4
1.生成Springboot项目,分别添加web,redis依赖,具体的maven依赖如下
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-data-redis</artifactId> 4 </dependency> 5 <dependency> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-web</artifactId> 8 </dependency> 9 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-test</artifactId> 13 <scope>test</scope> 14 </dependency>
数据源
使用spring的默认配置
在 src/main/resources/application.properties 中配置数据源信息。
1 server.context-path=/redis 2 server.port=9099 3 4 # REDIS (RedisProperties) 5 # Redis数据库索引(默认为0) 6 spring.redis.database=0 7 # Redis服务器地址 8 spring.redis.host=192.168.0.106 9 # Redis服务器连接端口 10 spring.redis.port=6379 11 # Redis服务器连接密码(默认为空) 12 #Sspring.redis.password= 13 # 连接池最大连接数(使用负值表示没有限制) 14 spring.redis.pool.max-active=8 15 # 连接池最大阻塞等待时间(使用负值表示没有限制) 16 spring.redis.pool.max-wait=-1 17 # 连接池中的最大空闲连接 18 spring.redis.pool.max-idle=8 19 # 连接池中的最小空闲连接 20 spring.redis.pool.min-idle=0 21 # 连接超时时间(毫秒) 22 spring.redis.timeout=10
然后我们需要一个配置类官网:www.fhadmin.org,将配置文件与对象进行关联
新建一个RedisConfig类
@Configuration @EnableAutoConfiguration public class RedisConfig extends CachingConfigurerSupport {}
通过
@ConfigurationProperties
注解,将属性文件注入进来
@Bean @ConfigurationProperties(prefix = "spring.redis") public JedisPoolConfig getRedisConfig() { JedisPoolConfig config = new JedisPoolConfig(); //System.out.println(config.getMaxWaitMillis()); return config; }
这里需要注意的是,我们的属性文件并没有全部的注入进来,这里只是配置连接池的属性
我们还需要将redis的host,port等信息也注入进来
1 @Autowired 2 private Environment env; 3 4 @Bean 5 @ConfigurationProperties(prefix = "spring.redis") 6 public JedisConnectionFactory getConnectionFactory() { 7 JedisConnectionFactory factory = new JedisConnectionFactory(); 8 JedisPoolConfig config = getRedisConfig(); 9 factory.setPoolConfig(config); 10 factory.setHostName(env.getProperty("spring.redis.host")); 11 factory.setPort(Integer.parseInt(env.getProperty("spring.redis.port").trim())); 12 factory.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database").trim())); 13 logger.info("JedisConnectionFactory bean init success."); 14 return factory; 15 }
这样我们的属性信息就都配置好了
我们就要开始连接redis服务器,实现我们的业务了,这里我们先介绍下 RedisTemplate
spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。
RedisTemplate中定义了对5种数据结构操作
1 redisTemplate.opsForValue();//操作字符串 2 redisTemplate.opsForHash();//操作hash 3 redisTemplate.opsForList();//操作list 4 redisTemplate.opsForSet();//操作set 5 redisTemplate.opsForZSet();//操作有序set
StringRedisTemplate与RedisTemplate
-
两者的关系是StringRedisTemplate继承RedisTemplate。
-
两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
-
SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
我们先来写一个简单的例子,来看看RedisTemplate是怎么操作的
还是在RedisConfig类里面
1 @Bean 2 public RedisTemplate<String, ?> getRedisTemplate() { 3 RedisTemplate<String, ?> template = new RedisTemplate(); 4 template.setConnectionFactory(getConnectionFactory()); 5 6 return template; 7 }
然后我们新建一个service类,注入redisTemplate,操作相关的api,将键值对写入到redis服务器
1 @Autowired 2 private RedisTemplate<String, Object> redisTemplate; 6 7 public void setKey(Map<String, Map<?, ?>> map) { 8 ValueOperations<String, Object> opsForValue = redisTemplate.opsForValue(); 9 for (Map.Entry<String, Map<?, ?>> entry : map.entrySet()) { 10 String jsonStringFromMap = JsonUtils.getJsonStringFromMap(entry.getValue()); 11 opsForValue.set(entry.getKey(), jsonStringFromMap); 12 } 13 }
@RequestMapping(value = "set") public ResponseVo setKey() { ResponseVo responseVo = new ResponseVo(); try { Map<String, Map<?, ?>> map = new HashMap<String, Map<?, ?>>(); Map<String, String> map2 = new HashMap<>(); map2.put("value", "2"); map.put("boxUid", map2); demoService.setKey(map); responseVo.setInfo("操作成功"); responseVo.setData(map); } catch (Exception e) { responseVo.setInfo("操作失败"); responseVo.setData(e.getMessage()); } return responseVo; }
请求:http://localhost:9099/redis/demo/set
数据就写到redis数据库了。
序列化
RedisTemplate对象默认使用jdkSerializer实现序列化,如果想要更换序列化的实现方式,例如使用json实现value的序列化,可以进行如下配置
1 @Bean 2 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer(ObjectMapper objectMapper) { 3 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>( 4 Object.class); 5 jackson2JsonRedisSerializer.setObjectMapper(objectMapper); 6 return jackson2JsonRedisSerializer; 7 } 8 9 @Bean 10 RedisTemplate<String, Object> objRedisTemplate(JedisConnectionFactory connectionFactory, 11 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer) { 12 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); 13 redisTemplate.setConnectionFactory(getConnectionFactory()); 14 redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer); 15 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); 16 redisTemplate.setKeySerializer(stringRedisSerializer); 17 redisTemplate.setHashKeySerializer(stringRedisSerializer); 18 return redisTemplate; 19 }
redis的value将会以jason形式保存
对象序列化
除了String类型,实战中我们还经常会在Redis中存储对象,这时候我们就会想是否可以使用类似RedisTemplate<String, User>
来初始化并进行操作。但是Spring Boot并不支持直接使用,需要我们自己实现RedisSerializer<T>
接口来对传入对象进行序列化和反序列化,下面我们通过一个实例来完成对象的读写操作。
- 创建要存储的对象:User
1 public class User implements Serializable { 2 3 /** 4 * 5 */ 6 private static final long serialVersionUID = -8289770787953160443L; 7 8 private String username; 9 private Integer age; 10 11 public User() { 12 super(); 13 // TODO Auto-generated constructor stub 14 } 15 16 public User(String username, Integer age) { 17 this.username = username; 18 this.age = age; 19 } 20 21 public String getUsername() { 22 return username; 23 } 24 25 public void setUsername(String username) { 26 this.username = username; 27 } 28 29 public Integer getAge() { 30 return age; 31 } 32 33 public void setAge(Integer age) { 34 this.age = age; 35 } 36 37 }
- 实现对象的序列化接口
1 public class RedisObjectSerializer implements RedisSerializer<Object> { 2 // private Converter<Object, byte[]> serializer = new SerializingConverter(); 3 // private Converter<byte[], Object> deserializer = new 4 // DeserializingConverter(); 5 static final byte[] EMPTY_ARRAY = new byte[0]; 6 7 @Override 8 public Object deserialize(byte[] bytes) { 9 if (isEmpty(bytes)) { 10 return null; 11 } 12 ObjectInputStream oii = null; 13 ByteArrayInputStream bis = null; 14 bis = new ByteArrayInputStream(bytes); 15 try { 16 oii = new ObjectInputStream(bis); 17 Object obj = oii.readObject(); 18 return obj; 19 } catch (Exception e) { 20 21 e.printStackTrace(); 22 } 23 return null; 24 } 25 26 @Override 27 public byte[] serialize(Object object) { 28 if (object == null) { 29 return EMPTY_ARRAY; 30 } 31 ObjectOutputStream obi = null; 32 ByteArrayOutputStream bai = null; 33 try { 34 bai = new ByteArrayOutputStream(); 35 obi = new ObjectOutputStream(bai); 36 obi.writeObject(object); 37 byte[] byt = bai.toByteArray(); 38 return byt; 39 } catch (IOException e) { 40 e.printStackTrace(); 41 } 42 return null; 43 } 44 45 private boolean isEmpty(byte[] data) { 46 return (data == null || data.length == 0); 47 } 48 }
- 配置针对User的RedisTemplate实例
@Bean public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, User> template = new RedisTemplate<String, User>(); template.setConnectionFactory(getConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new RedisObjectSerializer()); return template; }
- 完成了配置工作后,编写测试用例实验效果
@Autowired private RedisTemplate<String, User> redisUserTemplate; public void setUser(User user) { ValueOperations<String, User> opsForValue = redisUserTemplate.opsForValue(); opsForValue.set(user.getUsername(), user); Integer age = opsForValue.get(user.getUsername()).getAge(); String username = opsForValue.get(user.getUsername()).getUsername(); System.out.println(age + " " + username); }
最后的结果是会输出年龄和姓名。
源代码
相关示例代码在redisBoot
相关推荐
基于 SpringBoot + Spring + SpringMvc + Mybatis + Shiro+ Redis 开发单点登录管理系统 基于 SpringBoot + Spring + SpringMvc + Mybatis + Shiro+ Redis 开发单点登录管理系统 基于 SpringBoot + Spring + ...
项目描述 在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为...
报表后端采用技术: SpringBoot整合SSM(Spring+Mybatis-plus+ SpringMvc),spring security 全注解式的权限管理和JWT方式禁用Session,采用redis存储token及权限信息 报表前端采用Bootstrap框架,结合Jquery Ajax,...
springboot + mybatis-plus + database+ 多数据源 + redis + hutool 框架干净,没有其他冗余的成分; 配置了MP的代码生成器,意见生成代码,节省开发时间! 可用于各种定时任务处理,各种夸库操作, 多数据源支持...
本项目集成了springboot+security+mybatis+redis+jwt用于学习security鉴权功能,其中有集成了redis,mybatis,jasypt,jwt,thymeleaf,knife4j,mybatis-plus 项目搭建已经比较成熟,能够直接进行使用,通过代码...
总的来说,这个"springboot + redis 整合 maven项目源码"提供了一个很好的起点,帮助开发者了解并掌握Spring Boot与Redis的整合。通过学习和分析这个项目的源码,初学者不仅可以学习到基本的整合方式,还能进一步...
目标:本示例说明SFM...6、如果一切正常,你会看到我们使用SpringBoot整合Spring+MyBatis+tkMabtis+pagehelper+redis+webFlux的响应式单体并高web应用项目。 目的:希望学习springboot开发SFM响应式应用的小白们。
+ elasticsearch(用到在整合) + redis(用到在整合) 项目编码: UTF-8 项目名称: poem 数据库名称: poem 项目中包结构: src/main/java com.baizh.xxx .util 工具包 .entity 实体类 .dao ...
该项目范例是使用了SpringBoot+Mybatis+Redis搭建而成,该项目可以下载后直接打开运行,里面包含增加、删除、修改和查询的的范例实现。本人结合网上资源,多方面查询才整合完成;但愿对需要和学习的朋友能有所帮助。
标题 "Springboot+Redis+Dubbo+Rocketmq" 暗示了这是一个关于构建分布式系统的技术组合,其中Springboot作为基础框架,Redis用于缓存管理,Dubbo是服务治理框架,而Rocketmq则是消息中间件。现在,我们将深入探讨...
将SpringBoot、Shiro和Redis整合,主要目的是利用Shiro进行用户认证和授权,而Redis作为Session的共享存储,解决分布式环境下的会话一致性问题。以下是整合步骤: 1. **引入依赖**:在SpringBoot的pom.xml文件中...
springboot整合redis选用 `Lettuce` 作为redis框架,选用 `Protobuf` 作为序列化框架
总的来说,Spring Boot+Redis+RabbitMq的整合提供了高效的数据缓存和消息传递机制,对于构建可扩展、高可用的分布式系统具有极大的价值。通过理解和掌握这些技术,开发者可以更好地应对复杂的企业级项目挑战。
本项目“Springboot+SpringSecurity+SpringSession+Redis+Mybatis-Plus+Swwager”整合了Spring Boot、Spring Security、Spring Session、Redis、Mybatis-Plus以及Swagger等技术,旨在构建一个强大的、安全的、具有...
"Spring Boot + Shiro + Redis 实现 Session 共享方案二" 1. 概述 本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 ...
在Spring Boot应用中整合Redis,首先需要在`pom.xml`中引入Redis相关依赖。然后,通过`application.yml`或`application.properties`配置Redis连接信息,如主机地址、端口、密码等。Spring Boot提供`RedisTemplate`和...
【标题】"springBoot+mysql+redis基础项目"是一个适合初学者入门的IT项目,它结合了Spring Boot、MySQL和Redis三个关键组件,构建了一个基本的后端数据处理框架。这个项目的核心目标是帮助新手理解如何在实际开发中...
springboot+mybatis+mybatisplus+swagger redis框架整合springboot+mybatis+mybatisplus+swagger redis框架整合springboot+mybatis+mybatisplus+swagger redis框架整合springboot+mybatis+mybatisplus+swagger redis...
这是一个基于Spring Boot、MyBatis、Redis和Thymeleaf技术栈构建的Web项目示例。这个源码库提供了一个全面的学习平台,帮助开发者理解如何将这些流行的技术整合到一个实际的应用中。以下是对这些技术及其整合方式的...