Jedis使用
Jedis是java调用Redis的接口。
一。Maven中的jedis依赖包
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
二。配置redis.properties.xml
# *************** jedis connection parameters setting ************** #
# redis server ip #
redis.ip=127.0.0.1
# redis server port #
redis.port=6379
# password
redis.password=redis123 # *************** jedis pool parameters setting ************** #
# jedis's max connected objects #
redis.pool.maxTotal=1000
# jedis's max saved idel objects #
redis.pool.maxIdle=10
# jedis's max waiting time when no object returnd #
redis.pool.maxWaitMillis=5000
# whether test when jedis is calling borrowObject() #
redis.pool.testOnBorrow=true
# whether test when jedis is calling returnObject() #
redis.pool.testOnReturn=true
三。编写JAVA类获取Jedis连接池
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; import java.io.IOException;
import java.util.Properties; /**
* Created by XA on 2017/11/6.
*/
public class MyJedisPool { private volatile static JedisPool pool;
private static Jedis jedis; private static JedisPool getJedisPool() {
if(pool==null) {
synchronized (MyJedisPool.class) {
if(pool==null) {
try{
Properties props = new Properties();
props.load(MyJedisPool.class.getClassLoader().getResourceAsStream("config/redis.properties"));
// create jedis pool instance
JedisPoolConfig config = new JedisPoolConfig();
// set property items of jedis pool
config.setMaxTotal(Integer.valueOf(props.getProperty("redis.pool.maxTotal")));
config.setMaxIdle(Integer.valueOf(props.getProperty("redis.pool.maxIdle")));
config.setMaxWaitMillis(Integer.valueOf(props.getProperty("redis.pool.maxWaitMillis")));
config.setTestOnBorrow(Boolean.valueOf(props.getProperty("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(props.getProperty("redis.pool.testOnReturn")));
// instance
pool = new JedisPool(config, props.getProperty("redis.ip"), Integer.valueOf(props.getProperty("redis.port")), 5000, props.getProperty("redis.password")); }catch (IOException e) {
e.printStackTrace();
}
}
}
}
return pool;
} // get jedis
public static Jedis getJedis() {
return getJedisPool().getResource();
} // recycle jedis
public synchronized static void recycleJedis(Jedis jedis) {
if(jedis!=null) {
jedis.close();
}
}
}
四。使用jedis的常用示例
public static void main(String[] args){
try{
Jedis jedis = MyJedisPool.getJedis();
Set<String> keys = jedis.keys("*");
System.out.println(keys.size());
}catch (Exception e) {
e.printStackTrace();
}finally {
MyJedisPool.recycleJedis(jedis);
} }
注意:1. 不要忘记调用recycleJedis()回收jedis示例
2. 实际调用recycleJedis()后发现,jedis仍然有效。原因暂时未知。
五。使用反射和泛型封装jedis的申请和回收
@SuppressWarnings("unchecked")
public static <T> T invokeJedisMethod(String methodName, Object[] args) {
Jedis jedis = MyJedisPool.getJedis(); T returnObject = null;
try {
Class[] argsTypes = new Class[args.length];
for (int i = 0; i < args.length; i++) {
Class argClazz = args[i].getClass();
if (argClazz.equals(HashMap.class)) {
argsTypes[i] = Map.class;
} else {
argsTypes[i] = argClazz;
} }
Method method = jedis.getClass().getDeclaredMethod(methodName, argsTypes); returnObject = (T) method.invoke(jedis, args);
} catch (Exception e) {
System.out.print(e.getStackTrace()[1].getClassName() + " --> " +
e.getStackTrace()[1].getMethodName() + " --> " +
e.getClass().getName() + "\n");
e.printStackTrace();
} finally {
MyJedisPool.recycleJedis(jedis);
}
return returnObject;
}
运行测试:
import org.junit.Assert;
import org.junit.Test;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set; public class JedisServiceTest { public enum CommonAPI {
// keys
keys("keys", 1), del("del", 20), exists("exists", 22),
// hash
hget("hget", 2), hgetAll("hgetAll", 3), hset("hset", 4), hmset("hmset", 5), hlen("hlen", 6), hexists("hexists", 7), hdel("hdel", 8), hkeys("hkeys", 9), hmget("hmget", 23),
// zsort
zadd("zadd", 10), zrem("zrem", 11), zrange("zrange", 12), zcard("zcard", 13), zcount("zcount", 14),
// list
linsert("linsert", 15), llen("llen", 16), lpop("lpop", 17), lpush("lpush", 18), lrange("lrange", 19),
// sub-pub
subscribe("subscribe", 21); private String name;
private int index; CommonAPI(String name, int index) {
this.name = name;
this.index = index;
} public String getName() {
return name;
}
} /**
* 事务回滚无效,redis并不支持可回滚的事务
*/
@Test
@Transactional
@Rollback
public void invokeJedisMethod() { //
JedisService.invokeJedisMethod(JedisService.CommonAPI.hset.getName(), new Object[]{"key1", "hkey1", "value1"});
Assert.assertTrue(JedisService.invokeJedisMethod(JedisService.CommonAPI.exists.getName(), "key1"));
Set<String> keys = JedisService.invokeJedisMethod(JedisService.CommonAPI.keys.getName(), "key1");
Assert.assertTrue(keys.contains("key1")); Assert.assertTrue(JedisService.invokeJedisMethod(JedisService.CommonAPI.hexists.getName(), new Object[] {"key1", "hkey1"}));
Set<String> hkeys = JedisService.invokeJedisMethod(JedisService.CommonAPI.hkeys.getName(), "key1");
Assert.assertTrue(hkeys.contains("hkey1")); Assert.assertEquals(JedisService.invokeJedisMethod(JedisService.CommonAPI.hget.getName(), new Object[] {"key1", "hkey1"}), "value1"); JedisService.invokeJedisMethod(JedisService.CommonAPI.hdel.getName(), new Object[] {"key1", new String[]{"hkey1"}});
Assert.assertFalse(JedisService.invokeJedisMethod(JedisService.CommonAPI.hexists.getName(), new Object[] {"key1", "hkey1"})); JedisService.invokeJedisMethod(JedisService.CommonAPI.del.getName(), "key1");
Assert.assertFalse(JedisService.invokeJedisMethod(JedisService.CommonAPI.exists.getName(), "key1")); //
Map<String, String> map = new HashMap<String, String>();
map.put("hkey1", "hvalue1");map.put("hkey2", "hvalue2");
JedisService.invokeJedisMethod(JedisService.CommonAPI.hmset.getName(), new Object[] {"key2", map});
Assert.assertTrue(JedisService.invokeJedisMethod(JedisService.CommonAPI.exists.getName(), "key2"));
Assert.assertTrue(JedisService.invokeJedisMethod(JedisService.CommonAPI.hexists.getName(), new Object[] {"key2", "hkey2"}));
Assert.assertEquals(JedisService.invokeJedisMethod(JedisService.CommonAPI.hget.getName(), new Object[] {"key2", "hkey2"}), "hvalue2");
Assert.assertEquals((long)JedisService.invokeJedisMethod(JedisService.CommonAPI.hlen.getName(), "key2"), map.size()); Map<String, String> res = JedisService.invokeJedisMethod(JedisService.CommonAPI.hgetAll.getName(), "key2");
Assert.assertEquals(res.size(), map.size()); List<String> hvalues = JedisService.invokeJedisMethod(JedisService.CommonAPI.hmget.getName(), new Object[] {"key2", map.keySet().toArray(new String[map.size()])});
Assert.assertEquals(hvalues.size(), 2);
Assert.assertTrue(hvalues.contains("hvalue1"));
Assert.assertTrue(hvalues.contains("hvalue2")); JedisService.invokeJedisMethod(JedisService.CommonAPI.del.getName(), "key2");
Assert.assertFalse(JedisService.invokeJedisMethod(JedisService.CommonAPI.exists.getName(), "key2")); } }
测试全部通过。
Jedis使用的更多相关文章
- Jedis的使用
Redis是常用的key-value存储服务器,Java使用Redis有很多方法,其中官方推荐的是Jedis. 使用Jedis,首先是下载jedis-x.x.x.jar文件并导入工程,然后运行Redi ...
- redis 学习笔记(7)-cluster 客户端(jedis)代码示例
上节学习了cluster的搭建及redis-cli终端下如何操作,但是更常用的场景是在程序代码里对cluster读写,这需要redis-client对cluster模式的支持,目前spring-dat ...
- jedis支持哨兵主从配置role为slave
jedis功能强大,但是不能像nodejs一样指定从slave中读数据,使数据量读写量较大时读写分离,减少redis压力. 我们可以利用jedis中的方法封装一个类似于此的方法. github地址: ...
- Spring + Jedis集成Redis(集群redis数据库)
前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...
- (转)java redis使用之利用jedis实现redis消息队列
应用场景 最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高.连接频繁的因素,决定利用缓存做. 从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象 ...
- Jedis 使用范例
public class RedisUtil { Logger logger = LoggerFactory.getLogger(RedisUtil.class); private JedisPool ...
- 【Redis】:Jedis 使用
Redis 支持很多语言, 例如C#,RUBY,JAVA 等, Jedis是redis的java版本的客户端实现 一个简单的Jedis使用 依赖第三方包jedis-2.7.2.jar commons- ...
- 用Jedis连接Redis
jedis中的方法名,和Redis的命令几乎一样 1.jar包,作为测试只需要一个jar 2.代码 package com; import java.util.HashMap; import java ...
- 什么是Jedis?
Jedis 是 Redis 官方首选的 Java 客户端开发包. 实例方法: 1 import redis.clients.jedis.* 1 2 3 Jedis jedis = new Jedis( ...
- Java中使用Jedis操作Redis(转载)
整理 1.字符串 添加:set keyname value 查询:get keyname 拼接:append keyname value 删除:del keyname 添加多个: mset keyna ...
随机推荐
- GUI界面修饰
function varargout = GUI20(varargin) % GUI20 MATLAB code for GUI20.fig % GUI20, by itself, creates a ...
- JustOj 1036: 习题6.11 迭代法求平方根
题目描述 用迭代法求 .求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001. 输出保留3位小数 输入 X 输出 X的平方根 样例输 ...
- Symfony2学习笔记之事件分配器
----EventDispatcher组件使用 简介: 面向对象编程已经在确保代码的可扩展性方面走过了很长一段路.它是通过创建一些责任明确的类,让它们之间变得更加灵活,开发者可以通过继承这 ...
- Step2:SQL Server 复制事务发布
一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到 ...
- EditPlus配置GTK
--GCC GTK Compile-- 命令:D:\GCC\MinGW_RP_Green\bin\gcc.exe 参数:$(FileName) -w -o $(FileNameNoExt).exe - ...
- mysql 查询重复值
SELECT `code`,count(`code`) as count FROM `yt_coupon` GROUP BY `code` HAVING count(`code`) > ...
- selenium 模拟手机
import time from selenium import webdriver mobileEmulation = {'deviceName': 'Galaxy S5'} options = w ...
- No module named scrapy 成功安装scrapy,却无法import的解决方法
今天本来准备写一个Python的爬虫,然而使用pip安装了Scrapy之后,却无论如何也无法import,显示的结果总是ImportError: No module named Scrapy.网上查阅 ...
- SaaS公司融资的「22条军规 」(转)
编者按:本文是SaaS教父Jason Lemkin的一篇分享.他在文章中分享了他不投资一家公司的22条理由,希望对打算融资和正在融资的你有所启发. 为何有的早期创业公司能成功融资,而有的公司融资却屡遭 ...
- 监控mysql状态脚本
监控mysql状态, 发现宕后, 自动重启, 每秒检查一次. check.sh #!/bin/bash while [ true ]; do /bin/sleep 1 sh mysql_status. ...