作者 :日常打BUG

转载自 :blog.csdn.net/qq_38023253/article/details/90581455

集成redis

1.引入jar包

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

2.配置属性
在application.properties增加Redis服务的相关信息

#################redis单服务基础配置#################
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.password=
spring.redis.port=6379

3. RedisTemplate配置

/*** RedisTemplate配置*/@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {// 设置序列化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);// 配置redisTemplateRedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();redisTemplate.setConnectionFactory(lettuceConnectionFactory);RedisSerializer<?> stringSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringSerializer);// key序列化redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化redisTemplate.afterPropertiesSet();return redisTemplate;}

不配置RedisTemplate,也是可以自动注入StringRedisTemplate进行redis的读写操作,但是不能注入 RedisTemplate<K, V>对象,这里先配置了 RedisTemplate<String, Object>来操作redis关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

@RequestMapping(path = "/redis" )
public class RedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** stringRedisTemplate 传入对象* @return*/@GetMapping("/test2")public UUser testRedis2() {UUser user = new UUser();user.setUserName("test2");user.setEmail("11费@QQ.com");stringRedisTemplate.opsForValue().set("A2", JSONObject.toJSONString(user));UUser stu1 = JSONObject.parseObject(stringRedisTemplate.opsForValue().get("A2"), UUser.class);return stu1;}/*** redisTemplate传入对象* @return*/@GetMapping("/test1")public UUser testRedis1() {UUser user = new UUser();user.setUserName("test1");user.setEmail("11飞@163.com");redisTemplate.opsForValue().set("A1", user);UUser stu1 = (UUser) redisTemplate.opsForValue().get("A1");
// redisTemplate.delete("A1");return stu1;}
}

通过localhost:8080/redis/test1、localhost:8080/redis/test2来进行验证

5.可配置连接池

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

Jedis与Lettuce的区别:

Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接

Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

springboot2.0后将之前的jedis已经改成Lettuce,默认使用Lettuce

集成spring-session-Redis

参考 https://blog.csdn.net/qq_35206261/article/details/82289066

1 引入jar包

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

2 配置

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1900)
public class RedisSessionConfig {}

application.properties增加

spring.session.store-type=redis

也可不进行配置,都有默认值,开箱即用。
这里的maxInactiveIntervalInSeconds设置还没生效,原因还在寻找中。

@RestController
@RequestMapping(path = "/redis" )
public class RedisController {/*** session测试* @param request* @return*/@RequestMapping(value = "/session", method = RequestMethod.GET)public Map<String, String> addSession (HttpServletRequest request){String sessionId = request.getSession().getId();String requestURI = request.getRequestURI() + ":"  + request.getServerPort();// 向session中保存用户信息 key规则:user + "_" + uidrequest.getSession().setAttribute("user_1", "{uid:1,username:11@qq.com}");Map<String, String> sessionInfoMap = new HashMap<>(2);sessionInfoMap.put("sessionId", sessionId);sessionInfoMap.put("requestURI", requestURI);return sessionInfoMap;}/*** session测试* @param request* @return*/@RequestMapping(value = "/getSession", method = RequestMethod.GET)public Map<String, String> getSession (HttpServletRequest request){String sessionId = request.getSession().getId();String requestURI = request.getRequestURI() + ":"  + request.getServerPort();Map<String, String> sessionInfoMap = new HashMap<>(2);// 获取session中uid为1的用户的信息String user_1 = (String) request.getSession().getAttribute("user_1");sessionInfoMap.put("sessionId", sessionId);sessionInfoMap.put("requestURI", requestURI);sessionInfoMap.put("user_1", user_1);return sessionInfoMap;}
}

分别启动不同的端口号,使用浏览器、postman、rest client测试sessionID

结果:使用同一工具,例如postman测试不同端口号请求,其sessionId值一致,并且能从一个端口获取另一个端口存在request中的user信息。session数据存放在redis中

1.8080端口往session中放入对象

2.8081端口请求session中对象

实验效果:

sessionId一致,且成功获取了session中对象,不同端口间session实现共享

开箱即用的便利

注释掉第二步集成spring-session-Redis后的配置,只导入jar包进行测试,其session还是存入了Redis中,结果如上面二图所示,跟增加配置后的效果一致

将引入spring-session-Redis jar包也注释掉 进行测试,也就是回到没集成session-redis前,如下图所示,此时session不再存放在Redis中,且不同端口号之间的session不互通,相同端口session也会有过期时间。

1.8080往session中放入对象

2.8081读取session信息

3.8081再次读取session信息(刷新一次)

结果:相同端口之间的session共享,不同端口间session隔离
出现上下两种情况是springboot开箱即用的效果,引入jar包后无需配置即可使用。

2步轻松搞定SpringBoot2.x分布式session共享,极少配置相关推荐

  1. [译] 12步轻松搞定python装饰器 - 简书

    [译] 12步轻松搞定python装饰器 - 简书 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编 ...

  2. Python高级特性: 12步轻松搞定Python装饰器

    12步轻松搞定Python装饰器 通过 Python 装饰器实现DRY(不重复代码)原则:  http://python.jobbole.com/84151/ 基本上一开始很难搞定python的装饰器 ...

  3. png照片太大怎么压缩?三步轻松搞定

    png属于无损压缩图片格式,所以文件的体积会比较的大,这时候就需要将图片进行压缩,压缩图网站中的png压缩功能就可以实现,三步轻松搞定.步骤如下: 1.首先上传你需要压缩的图片. 2.然后选择需要的尺 ...

  4. Iphone手机企业邮箱设置 九步轻松搞定

    Iphone手机企业邮箱设置 九步轻松搞定 随着IPhone4S.IPhone5.小米系列手机的爆棚热销,智能手机迅速成为我们生活必备品.智能手机的便捷性也是随时随地都能派上用场.轻便自不必说,电话沟 ...

  5. linux shadow文件*,Linux怎么查找shadow文件进入这样几步轻松搞定

    摘要 腾兴网为您分享:Linux怎么查找shadow文件进入这样几步轻松搞定,作业大师,中英翻译,一直播,携程抢票等软件知识,以及倩女,控制时间,蓝墨云,绿豆刷机神器,头影测量软件,正当防卫33dm, ...

  6. 父母英语不好,孩子照样行:在家四步轻松搞定英语启蒙 读后感

    父母英语不好,孩子照样行:在家四步轻松搞定英语启蒙 读后感 作者:马丁 著 <父母英语不好,孩子照样行:在家四步轻松搞定英语启蒙>重点讲述了在孩子的语言敏感期,家长该如何通过亲子互动的方式 ...

  7. 12步轻松搞定 Python 装饰器

    12步轻松搞定 Python 装饰器 1. 函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例来说明如何定义和调用一个简单的函数: > ...

  8. 手机如何去视频水印?只需几步轻松搞定

    手机如何去视频水印?只需几步轻松搞定 很多人对于ps相关的功能有极大的误解,认为必须通过专业的软件才能够实现,而且很多专业的ps软件并不是仅仅拥有一部手机就能够使用的,还需要具备一定配置的电脑. 其实 ...

  9. 深入浅出 Python 装饰器:16 步轻松搞定 Python 装饰器

    2019独角兽企业重金招聘Python工程师标准>>> Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的De ...

  10. 韩泰轮胎:备胎怎么换?三步轻松搞定!

    在高速或者荒郊野岭遭遇爆胎.轮胎漏气怎么办?想必不少司机朋友或多或少都遇到过这些问题,很多司机朋友由于没有更换备胎的经验,只能是等待拖车或者公路救援.这不仅耽误了驾乘人员的时间,也会增加一定的道路风险 ...

最新文章

  1. 码书:入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)
  2. 如何理解机器学习中的嵌入 (Embeddings)?
  3. POJ-2386-Lake Counting
  4. C++知识总结(2)--字符串和数组
  5. 深入浅出WPF之Binding的使用(一)
  6. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
  7. CUDA:在GPU上实现核函数的嵌套以及编译运行
  8. 回顾云计算项目的得与失
  9. Nik Collection 4.2.0 for Mac(PS滤镜插件套装)
  10. 如何设置app字体跟随系统_Android中App字体大小不随系统改变而改变
  11. 非合作博弈篇——纳什均衡(Nash Equilibrium)
  12. java applet的方法_Java Applet的常用方法
  13. MDM平台数据分发功能说明
  14. mysql proxy maxscale_通过Maxscale代理,实现MySQL读写分离
  15. 递推DP UVA 473 Raucous Rockers
  16. adventure项目案例分析
  17. 微软亚洲研究院多模态模型NÜWA:以自然语言创造视觉内容
  18. PHP爆绝对路径方法收集
  19. 移动端应该如何动态设置字体大小?
  20. 微信小程序输出Object,Object

热门文章

  1. Jersey 2.x 运行项目
  2. linux 安装Paramiko模块安装和使用
  3. ARM计划将四核心CPU引入磁盘驱动器
  4. WebLogic简单的备份和恢复
  5. 一个流氓的SQL设计,备份(一个字段存多个数据)
  6. 考研复习(8)-图的基本操作
  7. 一次cpu占用100%的故障解决
  8. 「leetcode」127. 单词接龙【广度优先搜索】超详细讲解!
  9. 一道曾经微软的面试题
  10. 苹果mac专业文献管理软件:endnote x9