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. bootstrap validate 实现页面动态验证(formvalidate)

    关于基本的bootstrap validate 验证方法外面有许多博客上都有讲解,我就不在过多叙述了.大家也可以去看官网api:http://bv.doc.javake.cn/api/ 今天要说的是动 ...

  2. .NET WEB项目的调试发布相关

    最近接触了.NET WEB项目,调试的时候因为没配置好文件浪费了些时间,特此记录一下相关配置,以后备用 如果IIS的基目录指向了别处,在build以后必须要发布,其实就是把最新的程序更新到IIS的基目 ...

  3. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  4. 设计模式--外观模式Facade(结构型)

    一.外观模式 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观模式定义了一个高层接口,让子系统更容易被使用. 二.UML图 三.例子 举个编译器的例子,假设编译一个程序需要经过四个步骤: ...

  5. caffe_手写数字识别Lenet模型理解

    这两天看了Lenet的模型理解,很简单的手写数字CNN网络,90年代美国用它来识别钞票,准确率还是很高的,所以它也是一个很经典的模型.而且学习这个模型也有助于我们理解更大的网络比如Imagenet等等 ...

  6. Mac地址

    Mac地址是每张网卡的唯一标识符,也叫物理地址.硬件地址或链路地址,由网络设备制造商生产时烧在网卡的ROM中,可以修改.现在的Mac地址一般都采用6字节48bit(还有2字节16bit的Mac地址,多 ...

  7. Windows 搭建jdk、Tomcat、eclipse以及SVN、maven插件开发环境

    未经允许,不得转载 Jdk1.7安装 jdk下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装jdk之 ...

  8. 建表过程-列名&列类型&修改表B

    怎么建表? 主键 名称 重量 价格 生产日期 保质期 产地 种类                       分析:我们只要把第一行的表头建好后,这张表也就完成了.  术语:建表的过程就是声明字段过程 ...

  9. php 封装 知识点

    类由众多对象抽象出来的对象由类实例化出来的 成员变量成员方法成员属性 访问修饰符public 公有的protected 受保护的private 私有的 构造函数1.写法特殊2.执行时间特殊 面向对象的 ...

  10. js 固话正则

    var str = '82386012'; var partten = /(^(0\d{2})-(\d{8})$)|(^(0\d{3})-(\d{7})$)|(^(0\d{2})-(\d{8})-(\ ...