Jedis整合到项目中,就可以在项目中使用redis了,作为Java程序狗,这个可以会,贴代码了,不截图了,哈哈

一、maven中的pom.xml中添加依赖

 <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>

二、spring和Jedis整合

    <!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxTotal}"/>
</bean> <!-- 分片式集群连接池 -->
<bean class="redis.clients.jedis.ShardedJedisPool">
<constructor-arg index="0" ref="jedisPoolConfig" />
<constructor-arg index="1">
<list>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg index="0" value="${redis.node1.host}"></constructor-arg>
<constructor-arg index="1" value="${redis.node1.port}"></constructor-arg>
</bean>
</list>
</constructor-arg>
</bean>

三、封装RedisService

注意:这个是待优化的代码,只有jedis分片对象ShardedJedis调用不同的方法而已,其他的代码完全一样,这个是可以优化的,这个优化方法很巧妙

 @Service
publicclass RedisService {   @Autowired
  private ShardedJedisPool shardedJedisPool;   /**
* 执行set操作
*
* @param key
* @param value
* @return
*/
  public String set(String key, String value) {
ShardedJedis shardedJedis = null;
  try {
    // 从连接池中获取到jedis分片对象
    shardedJedis = shardedJedisPool.getResource();
    return shardedJedis.set(key, value);
} finally {
      if (null != shardedJedis) {
      // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
      shardedJedis.close();
}
}
}   /**
* 执行get操作
*
* @param key
* @return
*/
  public String get(String key) {
ShardedJedis shardedJedis = null;
  try {
    // 从连接池中获取到jedis分片对象
    shardedJedis = shardedJedisPool.getResource();
    return shardedJedis.get(key);
} finally {
      if (null != shardedJedis) {
      // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
      shardedJedis.close();
}
}
} }

四、优化RedisService

1、定义接口,借助泛型

public interface Function<T, E> {

    public T callback(E e);

}

2、定义一个通用方法,减少相同代码的编写

     @Autowired
private ShardedJedisPool shardedJedisPool; private <T> T execute(Function<T, ShardedJedis> fun) {
ShardedJedis shardedJedis = null;
try {
// 从连接池中获取到jedis分片对象
shardedJedis = shardedJedisPool.getResource();
return fun.callback(shardedJedis);
} finally {
if (null != shardedJedis) {
// 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
shardedJedis.close();
}
}
}

3、调用通用的代码,实现不同的逻辑

注意:这个方法有点太巧妙了,有木有,这里面用到了JavaScript中的回调函数的思想,第一次感到代码之美

     /**
* 执行set操作,设置数据
*
* @param key
* @param value
* @return
*/
public String set(String key, String value) {
return this.execute(new Function<String, ShardedJedis>() { @Override
public String callback(ShardedJedis e) {
return e.set(key, value);
} });
} /**
* 执行set操作,设置数据,并且设置生存时间,单位:秒
*
* @param key
* @param value
* @param seconds
* @return
*/
public String set(String key, String value, Integer seconds) {
return this.execute(new Function<String, ShardedJedis>() { @Override
public String callback(ShardedJedis e) {
String str = e.set(key, value);
e.expire(key, seconds);
return str;
}
});
} /**
* 执行get操作,获取数据
*
* @param key
* @return
*/
public String get(String key) {
return this.execute(new Function<String, ShardedJedis>() { @Override
public String callback(ShardedJedis e) {
return e.get(key);
} });
} /**
* 删除一个key
*
* @param key
* @return
*/
public Long del(String key) {
return this.execute(new Function<Long, ShardedJedis>() { @Override
public Long callback(ShardedJedis e) {
return e.del(key);
} });
} /**
* 设置生存时间,单位:秒
*
* @param key
* @param seconds
* @return
*/
public Long expire(String key,Integer seconds) {
return this.execute(new Function<Long, ShardedJedis>() { @Override
public Long callback(ShardedJedis e) {
return e.expire(key, seconds);
} });
}

Jedis集成到项目中的更多相关文章

  1. Android高手进阶篇4-实现侧滑菜单框架,一分钟集成到项目中

    先来看下面的这张效果图: 上面这张效果图是百度影音的,现在在Android上很流行,最初是由facebook自己实现的,而后各大应用有跟风之势,那么这种侧滑效果是如何实现的呢? 网上现在这种侧滑菜单的 ...

  2. 分享一个集成在项目中的REST APIs文档框架swagger

    1 为什么是使用swagger? 1-1 当后台开发人员开发好接口,是不是还要重新书写一份接口文档提给前端人员,当然对于程序员最不喜欢的就是书写文档(当然文档是必须的,有利于项目的维护) 1-2 当后 ...

  3. 项目中处理android 6.0权限管理问题

    android 6.0对于权限管理比较收紧,因此在适配android 6.0的时候就很有必要考虑一些权限管理的问题. 如果你没适配6.0的设备并且权限没给的话,就会出现类似如下的问题: java.la ...

  4. Ioc依赖注入:Unity4.0.1 在项目中的应用 (MVC和API)

    使用Unity的好处网上有很多,百度一下即可 这里引用了一篇关于面向接口编程的好处的文章作为引申:https://blog.csdn.net/Cyy19970527/article/details/8 ...

  5. 【笔记】android sdk集成的eclipse中导入项目

    android sdk集成的eclipse中导入项目 想要把旧的ADT项目,一模一样的导入进来,需要: 1.把项目放到,非当前ADT的workspace目录下: 2.从Project中Import,选 ...

  6. Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明

    Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...

  7. iOS原生项目中集成React Native

    1.本文的前提条件是,电脑上已经安装了CocoaPods,React Native相关环境. 2.使用Xcode新建一个工程.EmbedRNMeituan [图1] 3.使用CocoaPods安装Re ...

  8. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  9. 06_在web项目中集成Spring

    在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = ...

随机推荐

  1. VMware虚拟机安装WinXP出现错误output error file to the following location A:\GHOSTERR.TXT

    我们安装Ghost版WinXP系统的时候,可能会出现一个如下图这样的错误:output error file to the following location A:\GHOSTERR.TXT. 出现 ...

  2. bzoj 2169 连边 —— DP+容斥

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2169 就和这篇博客说的一样:https://blog.csdn.net/WerKeyTom_ ...

  3. asp.net MVC 切换网站主题

    首先要有一些定义后的CSS文件,本例是用Bootstrap作为前端框架,可以从http://bootswatch.com/网站上下载一些主题文件,也就是一些定义好的Bootstap.css的文件. 然 ...

  4. 关于spring cloud eureka整合ribbon实现客户端的负载均衡

    1. 实现eureka整合ribbon非常简单, 1.1.首先引入所需maven依赖 <dependency> <groupId>org.springframework.boo ...

  5. Unity优化总览

    CPU GC 序列化与反序列化,如protobuff,json解析 String的频繁构造,拼接,如ToString()会生成字符串,Object.name会返回拷贝 闭包和匿名函数,在闭包中调用外部 ...

  6. bzoj 4826: [Hnoi2017]影魔【单调栈+树状数组+扫描线】

    参考:https://www.cnblogs.com/lcf-2000/p/6789680.html 这是一个相对码量少的做法,用到了区间修改区间查询的树状数组,详见:www.cnblogs.com/ ...

  7. Code:Blocks 中文乱码问题原因分析和解决方法

    下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...

  8. UML 活动图(转载)

    活动图:用于表示系统中各种活动的次序,它的应用非常广泛,即可用来描述用例的工作流程,也可用来描述类中某个方法的操作行为.常用于表示业务流程,对系统功能建模,强调对象之间的控制流.活动图是由状态图变化而 ...

  9. 451 Sort Characters By Frequency 根据字符出现频率排序

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...

  10. python vs java的rsa加密

    首先:java的加密解密模块需要更加精细的算法细节指定 java的加密方式 javax.crypto.Cipher,定义的获取方式 tatic Cipher getInstance(String tr ...