jediscluster.set_java.lang.throwable

jediscluster.set_java.lang.throwable如果使用的是redis3.x中的集群,在项目中使用jedisCluster。1、项目结构2、pom.xml123xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd”>454.0.067com.xxx8myboot9…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

如果使用的是redis3.x中的集群,在项目中使用jedisCluster。

1、项目结构

0b690a6c536ea9828d22c032c12158a5.png

2、pom.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version=”1.0″ encoding=”UTF-8″?>

2

3 xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”>

4

5 4.0.0

6

7 com.xxx

8 myboot

9 1.0-SNAPSHOT

10

11

12 1.8

13

14

19

20 org.springframework.boot

21 spring-boot-starter-parent

22 1.2.5.RELEASE

23

24

25

37

38

39

40

41 org.springframework.boot

42 spring-boot-starter-web

43

44

45 redis.clients

46 jedis

47

48

49 com.alibaba

50 fastjson

51 1.1.15

52

53

54 org.apache.commons

55 commons-lang3

56 3.3.2

57

58

59

60

61

62

64

65 org.springframework.boot

66 spring-boot-maven-plugin

67

68

69

70

View Code

说明:相对于上一章的代码仅仅引入了jedis的依赖jar。

3、application.properties

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #user info2 user.id=13 user.username=zhaojigang4 user.password=1235

6 #redis cluster7 redis.cache.clusterNodes=localhost:80808 redis.cache.commandTimeout=59 #unit:second10 redis.cache.expireSeconds=120

View Code

说明:相对于上一章的代码仅仅引入了redis cluster的配置信息

4、Application.java(springboot启动类,与上一章一样)

5、RedisProperties.java(Redis属性装配)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.xxx.firstboot.redis;2

3 importorg.springframework.boot.context.properties.ConfigurationProperties;4 importorg.springframework.stereotype.Component;5

6 @Component7 @ConfigurationProperties(prefix = “redis.cache”)8 public classRedisProperties {9

10 private intexpireSeconds;11 privateString clusterNodes;12 private intcommandTimeout;13

14 public intgetExpireSeconds() {15 returnexpireSeconds;16 }17

18 public void setExpireSeconds(intexpireSeconds) {19 this.expireSeconds =expireSeconds;20 }21

22 publicString getClusterNodes() {23 returnclusterNodes;24 }25

26 public voidsetClusterNodes(String clusterNodes) {27 this.clusterNodes =clusterNodes;28 }29

30 public intgetCommandTimeout() {31 returncommandTimeout;32 }33

34 public void setCommandTimeout(intcommandTimeout) {35 this.commandTimeout =commandTimeout;36 }37

38 }

View Code

说明:与上一章的User类似,采用@ConfigurationProperties注解自动读取application.properties文件的内容并装配到RedisProperties的每一个属性中去。

6、JedisClusterConfig.java(获取JedisCluster单例)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.xxx.firstboot.redis;2

3 importjava.util.HashSet;4 importjava.util.Set;5

6 importorg.springframework.beans.factory.annotation.Autowired;7 importorg.springframework.context.annotation.Bean;8 importorg.springframework.context.annotation.Configuration;9

10 importredis.clients.jedis.HostAndPort;11 importredis.clients.jedis.JedisCluster;12

13 @Configuration14 public classJedisClusterConfig {15

16 @Autowired17 privateRedisProperties redisProperties;18

19 /**

20 * 注意:21 * 这里返回的JedisCluster是单例的,并且可以直接注入到其他类中去使用22 *@return

23 */

24 @Bean25 publicJedisCluster getJedisCluster() {26 String[] serverArray = redisProperties.getClusterNodes().split(“,”);//获取服务器数组(这里要相信自己的输入,所以没有考虑空指针问题)

27 Set nodes = new HashSet<>();28

29 for(String ipPort : serverArray) {30 String[] ipPortPair = ipPort.split(“:”);31 nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));32 }33

34 return newJedisCluster(nodes, redisProperties.getCommandTimeout());35 }36

37 }

View Code

说明:

该类注入了RedisProperties类,可以直接读取其属性

这里没有对jedis链接池提供更多的配置(jedis-2.5.x好像不支持,jedis-2.6.x支持),具体的配置属性可以查看文章开头第一篇博客

注意:

该类使用了Java注解,@Configuration与@Bean,

在方法上使用@Bean注解可以让方法的返回值为单例,

该方法的返回值可以直接注入到其他类中去使用

@Bean注解是方法级别的

如果使用的是常用的spring注解@Component,

在方法上没有注解的话,方法的返回值就会是一个多例,

该方法的返回值不可以直接注入到其他类去使用

该方式的注解是类级别的

7、MyRedisTemplate.java(具体redis操作)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.xxx.firstboot.redis;2

3 importorg.slf4j.Logger;4 importorg.slf4j.LoggerFactory;5 importorg.springframework.beans.factory.annotation.Autowired;6 importorg.springframework.stereotype.Component;7

8 importredis.clients.jedis.JedisCluster;9

10 @Component11 public classMyRedisTemplate {12 private static final Logger LOGGER = LoggerFactory.getLogger(MyRedisTemplate.class);13

14 @Autowired15 privateJedisCluster jedisCluster;16

17 @Autowired18 privateRedisProperties redisProperties;19

20 private static final String KEY_SPLIT = “:”; //用于隔开缓存前缀与缓存键值

21

22 /**

23 * 设置缓存24 *@paramprefix 缓存前缀(用于区分缓存,防止缓存键值重复)25 *@paramkey 缓存key26 *@paramvalue 缓存value27 */

28 public voidset(String prefix, String key, String value) {29 jedisCluster.set(prefix + KEY_SPLIT +key, value);30 LOGGER.debug(“RedisUtil:set cache key={},value={}”, prefix + KEY_SPLIT +key, value);31 }32

33 /**

34 * 设置缓存,并且自己指定过期时间35 *@paramprefix36 *@paramkey37 *@paramvalue38 *@paramexpireTime 过期时间39 */

40 public void setWithExpireTime(String prefix, String key, String value, intexpireTime) {41 jedisCluster.setex(prefix + KEY_SPLIT +key, expireTime, value);42 LOGGER.debug(“RedisUtil:setWithExpireTime cache key={},value={},expireTime={}”, prefix + KEY_SPLIT +key, value,43 expireTime);44 }45

46 /**

47 * 设置缓存,并且由配置文件指定过期时间48 *@paramprefix49 *@paramkey50 *@paramvalue51 */

52 public voidsetWithExpireTime(String prefix, String key, String value) {53 int EXPIRE_SECONDS =redisProperties.getExpireSeconds();54 jedisCluster.setex(prefix + KEY_SPLIT +key, EXPIRE_SECONDS, value);55 LOGGER.debug(“RedisUtil:setWithExpireTime cache key={},value={},expireTime={}”, prefix + KEY_SPLIT +key, value,56 EXPIRE_SECONDS);57 }58

59 /**

60 * 获取指定key的缓存61 *@paramprefix62 *@paramkey63 */

64 publicString get(String prefix, String key) {65 String value = jedisCluster.get(prefix + KEY_SPLIT +key);66 LOGGER.debug(“RedisUtil:get cache key={},value={}”, prefix + KEY_SPLIT +key, value);67 returnvalue;68 }69

70 /**

71 * 删除指定key的缓存72 *@paramprefix73 *@paramkey74 */

75 public voiddeleteWithPrefix(String prefix, String key) {76 jedisCluster.del(prefix + KEY_SPLIT +key);77 LOGGER.debug(“RedisUtil:delete cache key={}”, prefix + KEY_SPLIT +key);78 }79

80 public voiddelete(String key) {81 jedisCluster.del(key);82 LOGGER.debug(“RedisUtil:delete cache key={}”, key);83 }84

85 }

View Code

注意:

这里只是使用了jedisCluster做了一些字符串的操作,对于list/set/sorted set/hash的操作,可以参考开头的两篇博客。

8、MyConstants.java(缓存前缀常量定义类)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.xxx.firstboot.common;2

3 /**

4 * 定义一些常量5 */

6 public classMyConstants {7 public static final String USER_FORWARD_CACHE_PREFIX = “myboot:user”;//user缓存前缀

8 }

View Code

注意:

根据业务特点定义redis的缓存前缀,有助于防止缓存重复导致的缓存覆盖问题

缓存前缀使用”:”做分隔符,这是推荐做法(这个做法可以在使用redis-desktop-manager的过程看出来)

9、UserController.java(测试)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.xxx.firstboot.web;2

3 importorg.apache.commons.lang3.StringUtils;4 importorg.springframework.beans.factory.annotation.Autowired;5 importorg.springframework.web.bind.annotation.RequestMapping;6 importorg.springframework.web.bind.annotation.RequestParam;7 importorg.springframework.web.bind.annotation.RestController;8

9 importcom.alibaba.fastjson.JSON;10 importcom.xxx.firstboot.common.MyConstants;11 importcom.xxx.firstboot.domain.User;12 importcom.xxx.firstboot.redis.MyRedisTemplate;13 importcom.xxx.firstboot.service.UserService;14

15 /**

16 * @RestController:spring mvc的注解,17 * 相当于@Controller与@ResponseBody的合体,可以直接返回json18 */

19 @RestController20 @RequestMapping(“/user”)21 public classUserController {22

23 @Autowired24 privateUserService userService;25

26 @Autowired27 privateMyRedisTemplate myRedisTemplate;28

29 @RequestMapping(“/getUser”)30 publicUser getUser() {31 returnuserService.getUser();32 }33

34 @RequestMapping(“/testJedisCluster”)35 public User testJedisCluster(@RequestParam(“username”) String username){36 String value =myRedisTemplate.get(MyConstants.USER_FORWARD_CACHE_PREFIX, username);37 if(StringUtils.isBlank(value)){38 myRedisTemplate.set(MyConstants.USER_FORWARD_CACHE_PREFIX, username, JSON.toJSONString(getUser()));39 return null;40 }41 return JSON.parseObject(value, User.class);42 }43

44 }

View Code

说明:相对于上一章,只是添加了测试缓存的方法testJedisCluster。

测试:

在Application.properties右击–>run as–>java application,在浏览器输入”localhost:8080/user/testJedisCluster?username=xxx”即可。

附:对于redis的测试,我们有时需要查看执行set后,缓存是否存入redis的db中了,有两种方式

执行set后,get数据,之后修改数据,在get数据,比较两次get的数据是否相同即可

有时,这些数据是无法修改的(假设该数据是我们从第三方接口得来的),这个时候可以使用redis-desktop-manager这个软件来查看缓存是否存入redis(该软件的使用比较简单,查看官网)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181916.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 阿里云申请免费DV SSl(https证书),及详细配置运用[通俗易懂]

    阿里云申请免费DV SSl(https证书),及详细配置运用[通俗易懂]概述(大体流程):申请好免费证书后,一键推送到负载均衡,然后再给负载均衡配置443端口监听,并选择相应的证书!1、在阿里云购买证书说明:免费版的只能针对特定的一个域名(如果有多个域名,那就多买几个免费的)注意:在里面挨个挨个点乱点,这个免费的隐藏得有点深,不容易出的来(Symantec里面才有免费版的)创建证书,在【证书列表】中选择自己购买的那个2、配置证书…

  • Locust 参数化

    Locust 参数化(九)Locust参数化使用LoadRunner和JMeter的同学都知道,性能测试工具设置参数化颇为麻烦,但对于Python来说,生成点数据再简单不过了。参数化系统登录这里以某系统登录为例,简单介绍登录用户名密码的参数化实现fromlocustimportHttpLocust,TaskSet,taskfromrandomimportrandint#Web性能…

  • 基于web的酒店管理系统_新锐酒店管理系统

    基于web的酒店管理系统_新锐酒店管理系统小型酒店管理系统一、前言小型酒店管理系统采用Vue前端框架、SpringBoot框架实现项目前后端分离,并通过Mysql存储数据。本系统实现针对不同用户的登录验证;客户信息、前台管理员以及超级管理员等信息存取;客户信息登记、预约、入住、消费等功能;前台管理员对客户操作的管理;超级管理员对客户以及前台管理员操作进行控制等的功能,系统功能基本实现,测试良好。二、系统可行性分析(一)系统开发工具及平台操作系统:Windows10编程语言:Vue、SpringBoot开发工具:WebStorm、I

  • linux系统怎么数据恢复,linux系统数据恢复

    linux系统怎么数据恢复,linux系统数据恢复程序员的误操作造成数据丢失,忙着一个星期的项目,就这样付之东流了。老板的痛斥、经理的训斥接踵而来。接下来就是没休息、加班,甚至忙到凌晨都不能离开那该死的电脑,都有种想屎的感觉呢?为那些不喜欢备份数据的朋友带来了福音,我们来谈谈数据恢复,这里我们来手把手地教会你如何利用简单的工具来恢复被你删除的数据。工具:hexedit、fdisk下文内容操作均在root环境下完成。hexedit:在linux上…

  • 留言模板中 删除按钮不显示

    留言模板中 删除按钮不显示

  • 点在三维平面上的投影怎么求_直线投影到三维

    点在三维平面上的投影怎么求_直线投影到三维已知空间中的任一点:P(x0,y0,z0)P(x_0,y_0,z_0)P(x0​,y0​,z0​),一个平面 Ax+By+Cz+D=0。\text{一个平面}Ax+By+Cz+D=0。一个平面 Ax+By+Cz+D=0。则平面的法线方向:V2=[A,B,C]\text{则平面的法线方向:}V_2=[A,B,C]则平面的法线方向:V2​=[A,B,C],投影方程为:…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号