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 ...
随机推荐
- 关于App class loader的总结
关于App class loader的总结 2010-05-11 15:19:09 分类: 系统运维 Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点 ...
- python的range()函数使用方法
python的range()函数使用非常方便.它能返回一系列连续添加的整数,它的工作方式类似于分片.能够生成一个列表对象. range函数大多数时常出如今for循环中.在for循环中可做为索引使用.事 ...
- ShareREC for iOS v1.0.4 已经公布
ShareREC for iOS v1.0.4 已经公布 版本号:v1.0.4 2015-3-13 1.新增视频列表的筛选排序功能 2.修复在開始录制后,没有调用结束录制直接进入社区崩溃问题 3.优化 ...
- IOS之UITableView——怎样刷新父页面的Cell
问题:评论数同步 在社交相关的项目中常常有这种主页面,主列表的Cell中有赞数.评论数,详情页顶部也是相同的一个Cell,下部有评论列表,评论添加或降低.详情页的评论数随之改变,返回主列表,主列表的相 ...
- POJ 2299 离散化线段树
点击打开链接 Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 40827 Accepted ...
- C# WebAPI小记
新建WebAPI项目 新建一个Model 安装Entity Framework 添加连接字符串 去Web.config 中 <configuration> 节点中最下面添加 在Word中编 ...
- reflect 反射结合集合泛型的总结
集合泛型: 可以放任何对象的 ArrayList ArrayList list = new ArrayList(); 没有限定泛型类型. list.add("lilin");l ...
- GRpc-Proto3语法
syntax = "proto3"; 文件的第一行指定了你使用的是proto3的语法:如果你不指定,protocol buffer 编译器就会认为你使用的是proto2的语 ...
- 阿里logo库
http://www.iconfont.cn/home/index?spm=a313x.7781069.1998910419.2
- 根据 thread id 停止一个线程
出自 https://github.com/Bogdanp/dramatiq/blob/master/dramatiq/middleware/threading.py#L62 thread_id = ...