【Redis】:Jedis 使用
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 使用的更多相关文章
- Redis实战之Redis + Jedis
用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...
- Redis实战之征服 Redis + Jedis + Spring (一)
Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: Redis实战 Re ...
- Redis实战之征服 Redis + Jedis + Spring (二)
不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?! 或许,是我的理解不对,没有真正的理解哈希表. 相关链接: Redis实战 Redis实 ...
- Redis实战之征服 Redis + Jedis + Spring (三)
一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 通过spring-data-redis完 ...
- 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...
- 征服 Redis + Jedis + Spring (三)—— 列表操作【转】
一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 相关链接: 征服 Redis 征服 Re ...
- Redis实战之Redis + Jedis[转]
http://blog.csdn.net/it_man/article/details/9730605 2013-08-03 11:01 1786人阅读 评论(0) 收藏 举报 目录(?)[-] ...
- springboot配置redis+jedis,支持基础redis,并实现jedis GEO地图功能
Springboot配置redis+jedis,已在项目中测试并成功运行,支持基础redis操作,并通过jedis做了redis GEO地图的java实现,GEO支持存储地理位置信息来实现诸如附近的人 ...
- [redis] Jedis 与 ShardedJedis 设计
Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...
- springMVC+ mongdb + redis +Jedis 环境搭建
环境信息: JDK1.7 : Eclipse 4.4.1 ; mongdb + mongVUE:mongDB的安装 redis的下载和安装:window下安装redis maven3.0.5 新建ma ...
随机推荐
- 面向对象Part4
---------------------------------------------------------------------------------------------------- ...
- magento后台使用POST表单时,要使用必要参数form_key才能正常通讯
<form action="<?php echo $this->getSaveUrl() ?>" method="POST" encty ...
- Requests 乱码
当使用Requests请求网页时,出现下面图片中的一些乱码,我就一脸蒙逼. 程序是这样的. def getLinks(articleUrl): headers = { "Uset-Agent ...
- Devils never rest
一个人 练习一个人 书名 看到就被吸引了,然后亚马逊下手 作者很文艺,我很喜欢作者内心的那份宁静. 我一个人吃饭 旅行 到处走走停停 也一个人看书 写信 自己对话谈心 依然是心内一片寂静,总是不由自主 ...
- Flex中的initialize,creationComplete和applicationComp
转自:http://blog.csdn.net/sjz168/article/details/7244374 1.Application标签中有三个事件initialize,creationCompl ...
- mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap
这个错误基本都是mapper.xml有重复生成的代码
- PHP两种基础的算法:冒泡、快速排序法》》》望能够帮助到大家
首先扯个淡@@@@@@@@@ 算法是程序的核心,一个程序的好坏关键是这个程序算法的优劣. 冒泡排序法 原理:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的 ...
- python 的 集合,字典,元组,列表
元组 tuple a = (1,2,3) 元组不能修改 可权嵌套列表 如 (1,2,3,[1,2,3]) 里面的列表可修改 一般不这样用 列表list a = [1,2,3] 集合set a ...
- AngularJs学习
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- C++ Tips and Tricks
整理了下在C++工程代码中遇到的技巧与建议. 0x00 巧用宏定义. 经常看见程序员用 enum 值,打印调试信息的时候又想打印数字对应的字符意思.见过有人写这样的代码 if(today == MON ...