转载请注明出处 : Spring-boot通过redisTemplate使用redis(无须手动序列化)

redisTemplate的一些操作可以参考下面俩篇文章
http://blog.csdn.net/whatlookingfor/article/details/51863286
http://www.jianshu.com/p/7bf5dc61ca06

#导入redis依赖

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

#Jackson依赖

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.3.2</version>
</dependency>

#配置redis
方式一 redisProperties.yml

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

方式二 redis.Properties

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

#新建处理序列化的类
使redisTemplate无须手动序列化的类,并用jackson替换默认的序列化工具

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;@Configuration
public class RedisConfig {/*** redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类* @param redisConnectionFactory* @return*/@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);// 使用Jackson2JsonRedisSerialize 替换默认序列化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);// 设置value的序列化规则和 key的序列化规则redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
}

User.java实体

package com.biologic.entity;public class User {private String id;private String username;private String password;private String registerTime;private String phone;private String name;private String sex;private String age;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRegisterTime() {return registerTime;}public void setRegisterTime(String registerTime) {this.registerTime = registerTime;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}

#开始使用

package com.biologic.test;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.test.context.junit4.SpringRunner;
import com.biologic.entity.User;@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisApplicationTests {@Autowiredprivate RedisTemplate<Object, Object> template;@Testpublic void contextLoads() {User user = new User();user.setId("1");user.setName("joe");user.setPassword("123");template.opsForValue().set(user.getId()+"",user);//原本opsForValue()是只能操作字符串的.现在就可以操作对象了User result = (User) template.opsForValue().get(user.getId()+"");System.out.println(result.getId()+" "+result.getName());}
}

输出结果:

1 joe

RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
使用:String[] strarrays = new String[]{"strarr1","sgtarr2"};System.out.println(template.opsForSet().add("setTest", strarrays));
结果:2
使用:System.out.println(template.opsForSet().size("setTest"));
结果:1

#共享Session-spring-session-data-redis

分布式系统中,sessiong共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一,

Spring Session官方说明

Spring Session provides an API and implementations for managing a user’s session information.

更多信息参考 Spring Data Redis

如何使用

1、引入依赖

<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>

2、Session配置:

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}

maxInactiveIntervalInSeconds: 设置Session失效时间,使用Redis Session之后,原Boot的server.session.timeout属性不再生效

好了,这样就配置好了,我们来测试一下

3、测试

添加测试方法获取sessionid

@RequestMapping("/uid")String uid(HttpSession session) {UUID uid = (UUID) session.getAttribute("uid");if (uid == null) {uid = UUID.randomUUID();}session.setAttribute("uid", uid);return session.getId();}

登录redis 输入 keys ‘sessions

t<spring:session:sessions:db031986-8ecc-48d6-b471-b137a3ed6bc4
t(spring:session:expirations:1472976480000

其中 1472976480000为失效时间,意思是这个时间后session失效,db031986-8ecc-48d6-b471-b137a3ed6bc4 为sessionId,登录http://localhost:8080/uid 发现会一致,就说明session 已经在redis里面进行有效的管理了。

如何在两台或者多台中共享session

其实就是按照上面的步骤在另一个项目中再次配置一次,启动后自动就进行了session共享。

转载请注明出处 : Spring-boot通过redisTemplate使用redis(无须手动序列化)

Spring-boot通过redisTemplate使用redis(无须手动序列化)相关推荐

  1. spring boot使用Jedis整合Redis

    文章目录 spring boot使用jedis整合redis 总结 Spring Boot整合Redis有两种方式,分别是Jedis和RedisTemplate,那么它们二者有什么区别呢? 1.Jed ...

  2. 搞懂分布式技术14:Spring Boot使用注解集成Redis缓存

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80785403 为了提高性能,减少数据库的压力,使用 ...

  3. Spring boot 默认静态资源路径与手动配置访问路径的方法

    这篇文章主要介绍了Spring boot 默认静态资源路径与手动配置访问路径的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在application.propertis中配置 ##端口号 s ...

  4. 电子商务商城源码 Spring Cloud、Spring Boot、Mybatis、Redis

    1. 涉及平台 Spring Cloud.Spring Boot.Mybatis.Redis 2. 核心架构 Spring Cloud.Spring Boot.Mybatis.Redis 3. 前端框 ...

  5. Spring Boot细节挖掘(Redis的集成)

    Spring Boot 对 Redis 的支持已经非常完善,丰富的 API 足够我们日常的开发,这里我介绍几个最常用的供大家学习,其他 API 希望大家自己多学习,多研究,用到会去查即可. 目前有两个 ...

  6. 超完整!Springboot整合redis集群(Sentine),spring boot自动配置集成redis集群(Sentine)

    1.添加maven依赖 注意maven版本依赖,版本要相互匹配,如不知道如何查看相对应的版本时,可进入博主主页查看博主上一篇博文. <parent><groupId>org.s ...

  7. Spring Boot实战:整合Redis、MyBatis,封装RedisUtils工具类

    创建 Spring Boot 项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redi ...

  8. Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...

  9. Spring中使用RedisTemplate操作Redis(spring-data-redis)

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

最新文章

  1. Windows和Linux的编译理解
  2. 如何提高Linux下块设备IO的整体性能?
  3. ArrayUtils使用详解
  4. SAP ERP classification和C4C的同步
  5. Javascript中Base64编码解码的使用实例
  6. epoll nio区别_高性能网络服务器编程:为什么linux下epoll是最好,Netty要比NIO.2好?...
  7. SwiftUI实战二:组合视图和地图视图
  8. 成功解决3dmax三维建模过程中,视口中不显示贴图但渲染时显示
  9. 10分钟教你阿里云环境下搭建iredmail邮件服务器
  10. 三角形的内切圆和外接圆半径公式
  11. 一维卷积神经网络在近红外光谱分析中的应用
  12. matlab rho是什么意思,什么是Rho值
  13. 计算机中数值数据编码(大计基复习资料)
  14. mysql 建表最佳实践
  15. EXCEL常用函数公式和VBA汇总
  16. Windows 10 右键 在此处打开 CMD
  17. 【强化学习】Asynchronous Advantage Actor-Critic(A3C)
  18. 用汇编实现2进制到16进制 2进制到10进制转换并按要求输出
  19. [微服务架构 ] 微服务- 生存还是毁灭!
  20. 输入一个字符串,内有数字和非数字字符,例如: A123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]……

热门文章

  1. R语言学习丨数据重塑、拆分与组合基础知识,merge、melt、cast函数介绍
  2. 系统安全 --------- 账号安全管理
  3. 十大盗版软件你用了几个?
  4. 2022-2028年中国汽车转向系统零部件行业发展现状调查及前景战略分析报告
  5. server.context-path不是默认的时候的注意事项
  6. Gym - 101128H - Sheldon Numbers
  7. 想分享给各位的故事【如果你想成为很厉害很厉害的人】
  8. 删除对象属性的三种方法
  9. 6款真正好用的播放器推荐
  10. 本科、硕士、博士的区别(终极版)