博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 一二事 - 在spring中使用jedis 连接调试单机redis以及集群redis
阅读量:7038 次
发布时间:2019-06-28

本文共 7675 字,大约阅读时间需要 25 分钟。

Redis真是好,其中的键值用起来真心强大啊有木有,

之前的文章讲过搭建了redis集群

那么咋们该如何调用单机版的redis以及集群版的redis来使用缓存服务呢?

先讲讲单机版的,单机版redis安装非常简单,不多说了,直接使用命令:

 1 [root@nginx bin]# ./redis-server redis.conf 

启动就行

在sprig文件中配置如下

1 
6
7
8
9
10
11
12
13 14
15

这是配置的redis-cli的连接池

然后定义一个接口,这个接口供两个类实现

一个是单机版,一个是集群版

有人会问为啥要2个类实现,因为redis的单机和集群都是不同的实现方法

一般在开发环境会使用单机版来做测试,生产环境直接上集群

1 #fake cluster 2 redis.single.client.host=192.168.1.191 3 redis.single.client.port=6379 4  5 redis01.cluster.client.host=192.168.1.192 6 redis01.cluster.client.port=7001 7  8 redis02.cluster.client.host=192.168.1.192 9 redis02.cluster.client.port=700210 11 redis03.cluster.client.host=192.168.1.19212 redis03.cluster.client.port=700313 14 redis04.cluster.client.host=192.168.1.19215 redis04.cluster.client.port=700416 17 redis05.cluster.client.host=192.168.1.19218 redis05.cluster.client.port=700519 20 redis06.cluster.client.host=192.168.1.19221 redis06.cluster.client.port=7006

在你的资源文件中配好如上信息,供spring调用

说个题外话,资源文件*.properties,在spring的父子容器中不是公用的

也就是说,在service的spring容器中,只能配service层调用

在springMVC容器中只能被springmvc自己调用,因为资源文件不是夸容器的

而spring容器中的对象是可以被springMVC来访问的

但是springMVC的对象以及资源文件绝对不能被spring来访问,

举个栗子:你有见过service访问controller的吗?没有吧,哈哈

咱们先来建一个通用jedis客户端

(有2个小家伙看不懂最后2个方法什么意思,就加了注释,其实规范点来讲,所有的接口方法都要加注释,而实现类就不需要,但是实现类中的私有方法必须加注释,这是规范)

1 package com.lee.rest.component; 2  3 /** 4  *  5  * @Title: JedisClient.java 6  * @Package com.lee.rest.component 7  * @Description: redis客户端 8  * Copyright: Copyright (c) 2016 9  * Company:Nathan.Lee.Salvatore10  * 11  * @author leechenxiang12  * @date 2016年4月27日 下午4:28:4613  * @version V1.014  */15 public interface JedisClient {16 17     public String set(String key, String value);18     public String get(String key);19     public Long hset(String key, String item, String value);20     public String hget(String key, String item);21     public Long hdel(String key, String item);22     public Long incr(String key);23     public Long decr(String key);24     25     /**26      * 27      * @Description: 设置存存活时间28      * @param key29      * @param second30      * @return31      * 32      * @author leechenxiang33      * @date 2016年4月27日 下午4:34:3534      */35     public Long expire(String key, int second);36     37     /**38      * 39      * @Description: 判断key多久过期40      * @param key41      * @return 秒 42      *             >= 0     剩余秒数43      *             = -1    永久存活44      *             = -2    已经消除45      * 46      * @author leechenxiang47      * @date 2016年4月27日 下午4:34:2248      */49     public Long ttl(String key);50 }
1 /** 2  *  3  * @Title: JedisClientSingle.java 4  * @Package com.lee.rest.component.impl 5  * @Description: 单机版的jedis客户端操作 6  * Copyright: Copyright (c) 2016 7  * Company:Nathan.Lee.Salvatore 8  *  9  * @author leechenxiang10  * @date 2016年4月27日 下午4:36:4211  * @version V1.012  */13 public class JedisClientSingle implements JedisClient {14 15     @Autowired16     private JedisPool jedisPool;17 18     @Override19     public String set(String key, String value) {20         Jedis jedis = jedisPool.getResource();21         String result = jedis.set(key, value);22         jedis.close();23         return result;24     }25 26     @Override27     public String get(String key) {28         Jedis jedis = jedisPool.getResource();29         String result = jedis.get(key);30         jedis.close();31         return result;32     }33 34     @Override35     public Long hset(String key, String item, String value) {36         Jedis jedis = jedisPool.getResource();37         Long result = jedis.hset(key, item, value);38         jedis.close();39         return result;40     }41 42     @Override43     public String hget(String key, String item) {44         Jedis jedis = jedisPool.getResource();45         String result = jedis.hget(key, item);46         jedis.close();47         return result;48     }49     50     @Override51     public Long hdel(String key, String item) {52         Jedis jedis = jedisPool.getResource();53         Long result = jedis.hdel(key, item);54         jedis.close();55         return result;56     }57 58     @Override59     public Long incr(String key) {60         Jedis jedis = jedisPool.getResource();61         Long result = jedis.incr(key);62         jedis.close();63         return result;64     }65 66     @Override67     public Long decr(String key) {68         Jedis jedis = jedisPool.getResource();69         Long result = jedis.decr(key);70         jedis.close();71         return result;72     }73 74     @Override75     public Long expire(String key, int second) {76         Jedis jedis = jedisPool.getResource();77         Long result = jedis.expire(key, second);78         jedis.close();79         return result;80     }81 82     @Override83     public Long ttl(String key) {84         Jedis jedis = jedisPool.getResource();85         Long result = jedis.ttl(key);86         jedis.close();87         return result;88     }89 90 }
1 /** 2  *  3  * @Title: JedisClientCluster.java 4  * @Package com.lee.rest.component.impl 5  * @Description: 集群版的jedis客户端操作 6  * Copyright: Copyright (c) 2016 7  * Company:Nathan.Lee.Salvatore 8  *  9  * @author leechenxiang10  * @date 2016年4月27日 下午4:44:0211  * @version V1.012  */13 public class JedisClientCluster implements JedisClient {14 15     @Autowired16     private JedisCluster jedisCluster;17 18     @Override19     public String set(String key, String value) {20         return jedisCluster.set(key, value);21     }22 23     @Override24     public String get(String key) {25         return jedisCluster.get(key);26     }27 28     @Override29     public Long hset(String key, String item, String value) {30         return jedisCluster.hset(key, item, value);31     }32 33     @Override34     public String hget(String key, String item) {35         return jedisCluster.hget(key, item);36     }37 38     @Override39     public Long hdel(String key, String item) {40         return jedisCluster.hdel(key, item);41     }42     43     @Override44     public Long incr(String key) {45         return jedisCluster.incr(key);46     }47 48     @Override49     public Long decr(String key) {50         return jedisCluster.decr(key);51     }52 53     @Override54     public Long expire(String key, int second) {55         return jedisCluster.expire(key, second);56     }57 58     @Override59     public Long ttl(String key) {60         return jedisCluster.ttl(key);61     }62 63 }

使用地方,一般都是在service中调用,把需要加缓存的地方都实现接口

取之前查询有没有缓存,有直接返回,没有查数据库,然后再放入缓存

也有企业会这么做,所有的缓存都有一个团队来管理,做一个定时器,每天凌晨固定一个时间点来跑批,把数据放入缓存

这么做也是可以的

我们采取的是第一种

PS:@Autowired 这边是用的类型相同,有人喜欢用@resource,这样的话就得多写一个,区别点

1 @Autowired 2 private JedisClient jedisClient; 3  4 @Value("${REDIS_CONTENT_KEY}") 5 private String REDIS_CONTENT_KEY; 6  7 @Override 8 public List
gettList(Long id) { 9 // TODO 这个地方加缓存和不加缓存,单台或者集群的redis,都要进行压力测试10 //添加缓存11 //查询数据库之前先查询缓存,如果有直接返回12 try {13 //从redis中取缓存数据14 String json = jedisClient.hget(REDIS_CONTENT_KEY, id + "");15 if (!StringUtils.isBlank(json)) {16 //把json转换成List17 List
list = JsonUtils.jsonToList(json, Content.class);18 return list;19 }20 } catch (Exception e) {21 e.printStackTrace();22 }23 24 //执行查询25 List<?> list = xxxMapper.select(id);26 // 返回结果之前,向缓存中添加数据27 try {28 // 为了规范key可以使用hash29 // 定义一个保存内容的key,hash中每个项就是cid30 // value是list,需要把list转换成json数据。31 jedisClient.hset(REDIS_CONTENT_KEY, id + "", JsonUtils.objectToJson(list));32 } catch (Exception e) {33 e.printStackTrace();34 }35 return list;36 }

 

那么service就好了,集群版的也通用

那么集群的配置如何呢?

放开注释

使用资源文件的配置

 

好了,启动一下就可以运行了

配置好Test或者controller都可以调用

但是要做好缓存同步,也就是在增加,修改,删除数据后,要同步缓存,把原有的del,在放入新的

这样就可以了`~

 

转载地址:http://unaal.baihongyu.com/

你可能感兴趣的文章
linux 修改挂载目录
查看>>
yield---迭代集合的不同方式
查看>>
MySQL主库复制中Slave_SQL_Running_State参数详解
查看>>
Linux常用的基本命令12
查看>>
Docker学习系列 之etcd(一)etcd简介
查看>>
【yum和rpm】个人用到的方法记录
查看>>
Linux磁盘和文件系统
查看>>
DNS服务器之配置
查看>>
Java 八大基本数据类型
查看>>
Azure运维系列 6:使用自定义映像创建虚拟机
查看>>
分布式缓存BeIT Memcached简介
查看>>
Ubuntukylin 全局环境变量
查看>>
解决NEC SV8100 内线分机拨打总机和专用话机自动接听的故障
查看>>
session地址丢失
查看>>
“沃派36元预付费终端合约产品包” 青少年是否买单?
查看>>
ORACLE数据库事务隔离级别介绍
查看>>
DHCP服务和http服务
查看>>
bitnami 使用记录
查看>>
ActiveMQ(02):JMS基本概念和模型
查看>>
理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
查看>>