【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 ...
随机推荐
- [BZOJ1552][Cerc2007]robotic sort
[BZOJ1552][Cerc2007]robotic sort 试题描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数 ...
- Linux下的压缩和解压缩命令——bzip2/bunzip2
bzip2命令 bzip2命令用于创建和管理(包括解压缩)".bz2"格式的压缩包. 我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linux bzi ...
- ADT for Eclipse无法升级到23.0的解决方法(确保您的网络能够访问google的地址)
进行以下步骤时,请确保您的网络能够访问google的地址,因为有可能是无法访问google地址导致无法升级,该文不是为了解决这个问题!!! 最近一次的升级,ADT无法从ADT 22.X升级到23.0. ...
- 【python】发送post请求
1. json格式的post请求 关键部分加粗显示了,主要是post数据的编码方式以及请求头的Content-type #coding=utf8 import json import gzip imp ...
- Cocos2dx
初玩Cocos2dx,多多包涵. 感觉版本之间的差异比较大,相对前面的版本来说,3.X更容易上手,更方便了. 一.安装python.我的python-2.7.3.配置环境变量 系统变量里:在Path里 ...
- 源码安装php
php安装扩展源yum install epel-releaseyum updateyum install libmcrypt libmcrypt-devel mcrypt mhash -yyum i ...
- linux下误删mysql的root用户,解决方法
开始对liunx界面不熟悉,可能由于不小心,把root误删了,怎么办? 1. # killall mysqld 干掉所有mysql进程 2. # mysqld_safe --skip-grant ...
- ArrayList、Vector、LinkedList源码
List接口的一些列实现中,最常用最重要的就是这三个:ArrayList.Vector.LinkedList.这里我就基于JDK1.7来看一下源码. public class ArrayList< ...
- SVN需要忽略的文件类型
自己在用的,有问题的话欢迎指正,直接复制粘贴即可.(一般人我都不告诉他) *.lo,*.la,*.al,*.so,*.so.[0-9]*,*.pyc,*.pyo,*.rej,.*.swp,.DS_St ...
- Tensorflow 处理libsvm格式数据生成TFRecord (parse libsvm data to TFRecord)
#写libsvm格式 数据 write libsvm #!/usr/bin/env python #coding=gbk # ================================= ...