Redis 支持很多语言, 例如C#,RUBY,JAVA 等, Jedis是redis的java版本的客户端实现

一个简单的Jedis使用
依赖第三方包
jedis-2.7.2.jar
commons-pool2-2.3.jar JedisPoolManager 用户管理数据库连接,比如获取或者释放
package com.redis.jedis.project.common;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; public class JedisPoolManager { //private static String REDISDB_IP = "192.168.62.44";
private static String REDISDB_IP = "127.0.0.1";
private static int REDISDB_PORT = 6379; private JedisPool jedisPool; public JedisPoolManager() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(20);
config.setMaxIdle(5);
config.setMaxWaitMillis(1000l);
config.setTestOnBorrow(false);
jedisPool = new JedisPool(config, REDISDB_IP, REDISDB_PORT);
} public Jedis getJedis() throws Exception {
try {
Jedis jedis = jedisPool.getResource();
return jedis;
} catch (Exception e) {
throw e;
}
} public void releaseJedis(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
JedisManager 用户Redis数据库操作,当前只写了增删改查等常用行为
package com.redis.jedis.project.common;

import java.util.Map;

import redis.clients.jedis.Jedis;

public class JedisManager {

    private JedisPoolManager pool = new JedisPoolManager();

    protected void set(int dbIndex, String key, String value, int cashSeconds)
throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
jedis.set(key, value);
if (cashSeconds > 0) {
jedis.expire(key, cashSeconds);
}
} catch (Exception e) {
throw e;
} finally {
pool.releaseJedis(jedis);
}
} protected String get(int dbIndex, String key) throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
return jedis.get(key);
} catch (Exception e) {
throw e;
} finally {
pool.releaseJedis(jedis);
}
} protected void delete(int dbIndex, String key) throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
jedis.del(key);
} catch (Exception e) {
throw e;
} finally {
pool.releaseJedis(jedis);
}
} protected Map<String, String> hgetAll(int dbIndex, String key)
throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
return jedis.hgetAll(key);
} catch (Exception e) {
System.out.println(e);
throw e;
} finally {
pool.releaseJedis(jedis);
}
} protected void hset(int dbIndex, String key, String field, String value)
throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
jedis.hset(key, field, value);
} catch (Exception e) {
throw e;
} finally {
pool.releaseJedis(jedis);
}
} protected void hmset(int dbIndex, String key, Map<String, String> maps,
int cacheSeconds) throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
jedis.hmset(key, maps);
if (cacheSeconds >= 0) {
jedis.expire(key, cacheSeconds);
}
} catch (Exception e) {
throw e;
} finally {
pool.releaseJedis(jedis);
}
} protected void del(int dbIndex, String key) throws Exception {
Jedis jedis = null;
try {
jedis = pool.getJedis();
jedis.select(dbIndex);
jedis.del(key);
} catch (Exception e) {
throw e;
} finally {
pool.releaseJedis(jedis);
}
} }

第一个服务接口,实现具体业务

package com.redis.jedis.project.common;

public interface ILoginCash {

	public boolean longin(LoginDTO loginDTO,int cashSeconds) throws Exception;

	public LoginDTO getLogInfo(int userId) throws Exception;

	public boolean longout(int userId) throws Exception;

}

  

package com.redis.jedis.project.common;

import java.io.Serializable;

public class LoginDTO implements Serializable {

	private static final long serialVersionUID = 1L;
private int userId;
private String code;
private String name;
private String ip; public int getUserId() {
return userId;
} public void setUserId(int userId) {
this.userId = userId;
} public String getCode() {
return code;
} public void setCode(String code) {
this.code = code;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getIp() {
return ip;
} public void setIp(String ip) {
this.ip = ip;
} }

  

实现服务接口时,同时继承JedisManager管理类,这样可以使用JedisManager封装的操作数据库的行为,为了更好的方便管理KEY名称,一般Rredis中的KEY 都是由 对象:ID 或者对象:ID:类型 等结构管理的

package com.redis.jedis.project.common;

import java.util.HashMap;
import java.util.Map; public class LoginCashManager extends JedisManager implements ILoginCash { private static final String REDIS_USER = "user"; @Override
public boolean longin(LoginDTO loginDTO, int cashSeconds) throws Exception { boolean result = false;
String key = REDIS_USER + ":" + loginDTO.getUserId();
try {
Map<String, String> map = new HashMap<String, String>();
map.put("code", loginDTO.getCode());
map.put("name", loginDTO.getName());
map.put("ip", loginDTO.getIp());
hmset(RedisDBConstants.USER_DB_INDEX, key, map, cashSeconds);
result = true;
} catch (Exception e) {
System.out.println(e);
}
return result; } @Override
public LoginDTO getLogInfo(int userId) throws Exception {
if (userId <= 0) {
return null;
}
String key = REDIS_USER + ":" + userId;
LoginDTO loginDTO = null;
try {
Map<String, String> map = hgetAll(RedisDBConstants.USER_DB_INDEX,
key);
if (map != null && !map.isEmpty()) {
loginDTO = new LoginDTO();
loginDTO.setUserId(userId);
loginDTO.setCode(map.get("code"));
loginDTO.setName(map.get("name"));
loginDTO.setIp(map.get("ip"));
}
} catch (Exception e) {
System.out.println(e);
}
return loginDTO;
} @Override
public boolean longout(int userId) throws Exception {
if (userId <= 0) {
return false;
}
String tokenKey = REDIS_USER + ":" + userId;
boolean result = false;
try {
del(RedisDBConstants.USER_DB_INDEX, tokenKey);
result = true;
} catch (Exception e) {
System.out.println(e);
}
return result; } }

  

Redis默认有16个库,分别由数字 0到15编号,为方便管理,可以通过名称定义的方式以便查找

package com.redis.jedis.project.common;

public class RedisDBConstants {
public static int SYS_DB_INDEX = 0;
public static int USER_DB_INDEX = 1;
}

  

测试类

package com.redis.jedis.project.common;

public class MainTestRedis {

	public static void main(String[] args) throws Exception {

		LoginCashManager logincash = new LoginCashManager();
System.out.println("==SAVE NOW==");
LoginDTO loginDTO = new LoginDTO();
loginDTO.setUserId(1000);
loginDTO.setCode("1003");
loginDTO.setName("LIUY");
loginDTO.setIp("127.0.0.1");
logincash.longin(loginDTO,50);
System.out.println("==SAVE END=="); LoginDTO login =logincash.getLogInfo(1000);
System.out.println("==GET INFO==");
System.out.println("id="+login.getUserId());
System.out.println("code="+login.getCode());
System.out.println("name="+login.getName());
System.out.println("loginIP="+login.getIp());
}
}

  

测试结果

==SAVE NOW==
==SAVE END==
==GET INFO==
id=1000
code=1003
name=LIUY
loginIP=127.0.0.1

【Redis】:Jedis 使用的更多相关文章

  1. Redis实战之Redis + Jedis

    用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...

  2. Redis实战之征服 Redis + Jedis + Spring (一)

    Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: Redis实战 Re ...

  3. Redis实战之征服 Redis + Jedis + Spring (二)

    不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?! 或许,是我的理解不对,没有真正的理解哈希表. 相关链接: Redis实战 Redis实 ...

  4. Redis实战之征服 Redis + Jedis + Spring (三)

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 通过spring-data-redis完 ...

  5. 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

    有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...

  6. 征服 Redis + Jedis + Spring (三)—— 列表操作【转】

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 相关链接: 征服 Redis 征服 Re ...

  7. Redis实战之Redis + Jedis[转]

    http://blog.csdn.net/it_man/article/details/9730605 2013-08-03 11:01 1786人阅读 评论(0) 收藏 举报   目录(?)[-] ...

  8. springboot配置redis+jedis,支持基础redis,并实现jedis GEO地图功能

    Springboot配置redis+jedis,已在项目中测试并成功运行,支持基础redis操作,并通过jedis做了redis GEO地图的java实现,GEO支持存储地理位置信息来实现诸如附近的人 ...

  9. [redis] Jedis 与 ShardedJedis 设计

    Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...

  10. springMVC+ mongdb + redis +Jedis 环境搭建

    环境信息: JDK1.7 : Eclipse 4.4.1 ; mongdb + mongVUE:mongDB的安装 redis的下载和安装:window下安装redis maven3.0.5 新建ma ...

随机推荐

  1. Angular.js中使用$watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  2. MarkdownPad2.5 注册码

    邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6b ...

  3. 关于开放式CNC系统实时软件控制系统的一些简单分析

    随笔: 黄杰U201310771 首先,我们一起了解或复习两个概念:开放式CNC和开放式CNC体系结构.按照工EEE规定:一个开放式的系统必须具备不同应用程序能很好地运行于不同供应商提供的不同平台之上 ...

  4. [转]python 常用类库!

    Python学习 On this page... (hide) 1. 基本安装 2. Python文档 2.1 推荐资源站点 2.2 其他参考资料 2.3 代码示例 3. 常用工具 3.1 Pytho ...

  5. 关于SimpleAdapter和ListView结合使用,实现列表视图的笔记

    使用ListView需要为其添加适配器: 适配器有两种:1.ArrayAdapter  --用于单独文字显示 2.SimpleAdapter --用于文字和图片显示 这里主要记录SimpleAdapt ...

  6. 去除html的&nbsp;标签

    // 去除html的 标签 String str = "  2016-09-02"; if (str.indexOf("\u00A0") != -1) { st ...

  7. 如何方便的保存WinForm窗体控件的位置大小等等配置信息

    由于分辨率.屏幕主题.字体大小的不同,窗体显示效果在不同机器上不尽相同.窗体的弹性设计并不能满足多样的需求.为保证在各种情况下,能有满意的效果.窗体的多样显示方式能改变,并且保存.载入配置,显得很重要 ...

  8. adb connect 出现timeout的处理方式

    默认的timeout是5000ms毫秒,如果是断点调试的时候,经常会出现timeout, 所以修改这个值就不会出现timeout了, Eclipse下的设置位置: Window->Prefere ...

  9. 转:大神提出来的java服务器方面面试问题(当作自己的学习目标平时得多注意)

    因为一些个人原因,陆陆续续参加了一些校招补招.社招的笔试和面试(BAT),也包括一些国外公司(Spotify, Google, Ericsson),最后有幸被网易收入麾下,拿到了S.下面罗列一些我复习 ...

  10. [leetcode]leetcode初体验

    这几天把之前的设计模式回顾了一遍,整理了一点以前的项目.同学说,打算刷leetcode题目,也勾起了我的兴趣,索性也刷一些题目,再提高一些内功.刚开始进去,leetcode随机分配的题目,直接也就做了 ...