经过我们团队的一番讨论,终于决定使用redis来进行我们的业务缓存。redis会将数据缓存到内存中,执行效率会非常快。同一时候异步将数据写入到磁盘中。进行持久化。

且redis支持主从同步,支持分布式部署,支持N多数据结构,这对于我们有着莫大的吸引力。

參见:http://blog.csdn.net/yichenlian/article/details/27207383

我们团队讨论的焦点是在于redis的灾备恢复问题。

因为redis的持久化是异步的。总会有一点时间内存中数据和磁盘数据不同步的情况(当然能够设置成全然同步。那么用redis的意义就大打折扣了)。尽管没有找到尽善尽美的解决的方法。只是有一些网上的处理方式还是能够接受的。

參见:http://blog.csdn.net/xiangliangyu/article/details/8165644        随后我使用javaclientJedis对redis相关操作进行了一些系统的简单的封装。使用的是jedis的分布式连接池,这样方便于redis横向扩展,添加高可用性。封装思路:首先定义连接池类,封装连接池获取方式;对外为接口。接口定义的是redis常规操作,定义的方法基本与redis中一致,而且使用接口便于扩展;实现接口,我封装的实现类仅仅使用了分布式的方式(即ShardedJedis),也能够使用别的实现方式,能够自己扩展。

1.获取连接池:

简单配置JedisPoolConfig

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);//the max number of connection
jedisPoolConfig.setMaxIdle(maxIdle);//the max number of free
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);//the longest time of waiting

设置JedisShardInfo(redis.clients.jedis.JedisShardInfo.JedisShardInfo(String
host, int port))

得到ShardedJedisPool(连接池):redis.clients.jedis.ShardedJedisPool.ShardedJedisPool(GenericObjectPoolConfig
poolConfig, List<JedisShardInfo> shards,Hashing
algo)

这样就得到了连接池。

2.定义接口,简单为上:

public interface JedisClientInterface {

	/**
* 写入一般的string类型的value
*
* @param key
* @param value
*/
void put(String key, String value); /**
* 读取String类型的value
*
* @param key
* @return
*/
String get(String key);
}

3.完毕实现类:

public class JedisClientShardImpl implements JedisClientInterface {
@Override
public void put(String key, String value) {
boolean flag = true;
ShardedJedis shardedJedis = pool.getResource();
try{
if(shardedJedis!=null){
shardedJedis.set(key, value);
}
}catch(Exception e){
flag = false;
e.printStackTrace();
}finally{
if (flag){
             pool.returnResource(shardedJedis);
        }else{
            pool.returnBrokenResource(shardedJedis);
        }
}
} @Override
public String get(String key) {
boolean flag = true;
ShardedJedis shardedJedis = pool.getResource();
try{
if(shardedJedis!=null){
return shardedJedis.get(key);
}
}catch(Exception e){
flag = false;
e.printStackTrace();
}finally{
if (flag){
             pool.returnResource(shardedJedis);
        }else{
            pool.returnBrokenResource(shardedJedis);
        }
}
return null;
}
}

至此,整个封装流程就走通了。

能够随意向下扩展了。

redis的javaclientJedis简单封装的更多相关文章

  1. redis数据库操作的C++简单封装

    用c++简单封装了redis的基本操作(hiredis) 接口包括:①链接和断开连接.②设置键值对(set).③查询键值对(get).④删除键值对(del).⑤将所有键显示出来 若任何一处发生错误,返 ...

  2. Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节

    工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...

  3. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  4. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

  5. Redis中的简单事物以及消息订阅发布

    Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善 我们接下来看一下Redis和Mysql的事物的一个对比:   MySQL Redis 开启 start transactio ...

  6. Android--Retrofit+RxJava的简单封装(三)

    1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...

  7. okhttp3 get post 简单封装

    最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...

  8. Redis 2:简单使用

    导读:上一篇博客对于Redis进行了简单的介绍,本篇博客就浅显的说一下Redis的基本操作使用.本次测试的环境是window8.1,呃,没用Linux等其他系统,就下载的window环境的安装包. 一 ...

  9. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

随机推荐

  1. OpenST Basic tool library

    /***************************************************************************** * OpenST Basic tool l ...

  2. Oracle 11g 学习3——表空间操作

    一.表空间概述 表空间是Oracle中最大的逻辑存储结构,与操作系统中的数据文件相相应: 基本表空间:一般指用户使用的永久性表空间,用于存储用户的永久性数据          暂时表空间: 主要用于存 ...

  3. 创建多线程的HttpClient

    在实际的应用中,我们的联网应用程序里应该有一个HttpClient,并将其用于所有的HTTP通信.这就可能在同一个Http Client同时发出多个请求,也就产生了多线程的问题.幸运的是,在HttpC ...

  4. Oracle实例和Oracle数据库(Oracle体系结构)---转载

    对于初接触Oracle 数据库的人来讲,很容易混淆的两个概念即是Oracle 实例和Oracle 数据库.这两 概念不同于SQL sever下的实例与数据库,当然也有些相似之处.只是在SQL serv ...

  5. Oracle 数据库勒索病毒 RushQL 处理办法

    处理办法来自Oracle 官方: https://blogs.oracle.com/cnsupport_news/%E5%AF%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A% ...

  6. Linux中文件上传使用rz

    1.首先,要是服务器不支持rz命令的话,需要安装执行 sudo yum -y install lrzsz 2.再输入rz -be命令,选择需要上传的本地文件 sudo rz 从服务端发送文件到客户端: ...

  7. 将maven项目中依赖的jar包导出到指定的目录

    <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> &l ...

  8. FFmpeg 移植 Android

    近期项目需要解析苹果的HLS流媒体协议,而FFmpeg从0.11.1“Happiness”版本开始,才增加了对HLS协议的支持.目前网上关于FFmpeg编译移植的文章有很多,但大多都是对旧版本的说明. ...

  9. node操作mysql插入数据异常,incorrect string value

    产生的原因 我在创建表的时候,并没有设定字符编码,所以,默认的字符编码是 latin1 在我插入数据的时候,我的一个字段name设定的是varchar(20) 其实,这时的编码就是 latin1 所以 ...

  10. layer-list

    <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android=" ...