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. hdu4604 Deque(最长上升子序列变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 题意:一个含有n个数栈,每次取出一个数,可以把这个数放在deque(双向队列)首部,放在尾部,或 ...

  2. bat批处理文件夹内文件名的提取

    有时候会在做某些东西的时候 我们要提取某个文件夹的所有文件名,一个一个打出来那不是 现实的 所以这个时候就用到了一个比较简便而又快捷的方法 在所在的文件夹内新建一个a.txt 在a.txt编辑DIR ...

  3. poj 3525Most Distant Point from the Sea【二分+半平面交】

    相当于多边形内最大圆,二分半径r,然后把每条边内收r,求是否有半平面交(即是否合法) #include<iostream> #include<cstdio> #include& ...

  4. bzoj3265: 志愿者招募加强版(线性规划+单纯形法)

    传送门 鉴于志愿者招募那题我是用网络流写的所以这里还是写一下单纯形好了-- 就是要我们求这么个线性规划(\(d_{ij}\)表示第\(i\)种志愿者在第\(j\)天能不能服务,\(x_i\)表示第\( ...

  5. 【UVA - 101】The Blocks Problem(vector+模拟)

    The Blocks Problem Descriptions:(英语就不说了,直接上翻译吧) 初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作: move a onto b: 把a和 ...

  6. SSM框架手动搭建

    SSM框架手动搭建 创建web项目 IDEA创建Maven项目 [File]-->[new]-->[project..] 将项目变为web项目 [File]-->[Project S ...

  7. JavaScript编程艺术-第6章(JavaScript美术馆改进版)代码

    基于[第4章(JavaScript美术馆)代码]进行改进(***HTML与JS分离***) (*亲测可用) HTML: JS: CSS:

  8. [转]mysql事务处理用法与实例详解

    转自:http://www.cnblogs.com/ymy124/p/3718439.html MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于 ...

  9. .Net应用自定义鼠标样式

    (调用系统API的方法) 1.引用命名空间 using System.Runtime.InteropServices; 命名空间提供各种各样支持 COM 互操作 及平台调用服务的成员.using Sy ...

  10. iOS捷径(Workflow 2.0)拓展

    前言 iOS12 捷径(Workflow 2.0)入门 iOS12 捷径(Workflow 2.0)进阶 iOS12捷径(Workflow 2.0)实例大全 注:本文主要介绍如何获取URL Schem ...