redis的javaclientJedis简单封装
经过我们团队的一番讨论,终于决定使用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简单封装的更多相关文章
- redis数据库操作的C++简单封装
用c++简单封装了redis的基本操作(hiredis) 接口包括:①链接和断开连接.②设置键值对(set).③查询键值对(get).④删除键值对(del).⑤将所有键显示出来 若任何一处发生错误,返 ...
- Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节
工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- Redis中的简单事物以及消息订阅发布
Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善 我们接下来看一下Redis和Mysql的事物的一个对比: MySQL Redis 开启 start transactio ...
- Android--Retrofit+RxJava的简单封装(三)
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
- okhttp3 get post 简单封装
最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...
- Redis 2:简单使用
导读:上一篇博客对于Redis进行了简单的介绍,本篇博客就浅显的说一下Redis的基本操作使用.本次测试的环境是window8.1,呃,没用Linux等其他系统,就下载的window环境的安装包. 一 ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
随机推荐
- UVA 11825 Hackers’ Crackdown 状压DP枚举子集势
Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed com ...
- oracle如何创建数据库
第一步: 从Windows桌面执行“开始”→“Database Configuration Assistant”命令,打开Database Configuration Assistant对话框的欢迎界 ...
- BZOJ 3729 splay维护DFS序+博弈论
思路: 这像是 阶梯Nim之类的东西 我们 直接把sg函数 设成mod(L+1)的 一棵子树 向下的奇数层上的石子xor起来 就是答案 有加点和改值的操作 就splay维护一下 //By Sirius ...
- SQL常用函数集锦
..STUFF()用另一子串替换字符串指定位置.长度的子串.STUFF (<character_expression1>, <start_ position>, <len ...
- ASP内建对象
Active Server Pages 提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息.响应浏览器以及存储用户信息(如用户首选项).本文简要说明每一个对象.有关每个对象的详细信息,请参 ...
- hdu 3416 Marriage Match IV 【 最短路 最大流 】
求边不可重复的最短路条数 先从起点到终点用一次dijkstra,再从终点到起点用一次dijkstra,来判断一条边是否在最短路上 如果在,就将这条边的两个端点连起来,容量为1 再跑一下dinic(), ...
- “双十二”年终盛典,Guitar Pro邀您一起倾情共舞
躲过了双十一,躲不过双十二,隐约昨天还是双十一,马上双十二又叕来了,弱弱的问一句“你们的手长粗了来了吗?”在这即将结束的年终盛典里,各商家又将如“双十一”般纷纷使出浑身解数,作为吉他最佳拍档的编曲软件 ...
- ZBrush中如何把模型的细节映射到低模上
我们在ZBrush®雕刻模型的时候,发现模型布线不利于雕刻,这使我们不得不对模型进行重建细分,而重建细分之后的模型细节已经没有了,这个时候我们就需要把原来高模的细节映射到新的模型上面. 接下来我们介绍 ...
- c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)
我的安装环境: (1)vs2013(32位版) (vs2013只有32位的 没有64位的,但是它可以编译出64位的程序) : (2)mysql-5.7.15(64位) vs2013中的设置(按步骤来 ...
- jquery queryBuilder过滤插件的使用
1.此插件用于过滤搜索的功能,功能强大,可实现复杂条件过滤,单选多选的等条件的过滤.还可以在插件中调用其他插件. 下载地址和文档阅读:http://querybuilder.js.org/ 效果图: ...