一、pox.xml

  <dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>

二、Java代码,Jedis工具类

 package om.xbq.redis;

 import java.util.List;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* Jedis工具类
* @author xbq
* @created:2017-4-19
*/
public class JedisUtil { private JedisPool pool;
private static String URL = "192.168.242.130";
private static int PORT = 6379;
private static String PASSWORD = "xbq123"; // ThreadLocal,给每个线程 都弄一份 自己的资源
private final static ThreadLocal<JedisPool> threadPool = new ThreadLocal<JedisPool>();
private final static ThreadLocal<Jedis> threadJedis = new ThreadLocal<Jedis>(); private final static int MAX_TOTAL = 100; // 最大分配实例
private final static int MAX_IDLE = 50; // 最大空闲数
private final static int MAX_WAIT_MILLIS = -1; // 最大等待数 /**
* 获取 jedis池
* @return
*/
public JedisPool getPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取,如果赋值为-1,则表示不限制;
// 如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
jedisPoolConfig.setMaxTotal(MAX_TOTAL);
// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例
jedisPoolConfig.setMaxIdle(MAX_IDLE);
// 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException
jedisPoolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS); final int timeout = 60 * 1000;
pool = new JedisPool(jedisPoolConfig, URL, PORT, timeout); return pool;
} /**
* 在jedis池中 获取 jedis
* @return
*/
private Jedis common(){
// 从 threadPool中取出 jedis连接池
pool = threadPool.get();
// 为空,则重新产生 jedis连接池
if(pool == null){
pool = this.getPool();
// 将jedis连接池维护到threadPool中
threadPool.set(pool);
}
// 在threadJedis中获取jedis实例
Jedis jedis = threadJedis.get();
// 为空,则在jedis连接池中取出一个
if(jedis == null){
jedis = pool.getResource();
// 验证密码
jedis.auth(PASSWORD);
// 将jedis实例维护到threadJedis中
threadJedis.set(jedis);
}
return jedis;
} /**
* 释放资源
*/
public void closeAll(){
Jedis jedis = threadJedis.get();
if(jedis != null){
threadJedis.set(null);
JedisPool pool = threadPool.get();
if(pool != null){
// 释放连接,归还给连接池
pool.returnResource(jedis);
}
}
} /**
* 判断key是否存在
* @param key
* @return
*/
public boolean existsKey(String key){
Jedis jedis = this.common();
return jedis.exists(key);
} /**
* 删除
* @param key
* @return
*/
public Long delValue(String key){
Jedis jedis = this.common();
return jedis.del(key);
} // ----------------------------对String类型的操作-----------------------------------------
/**
* 增加 修改
* @param key
* @param value
*/
public String setValue(String key, String value) {
Jedis jedis = this.common();
return jedis.set(key, value);
} /**
* 查询
* @param key
* @return
*/
public String getValue(String key){
Jedis jedis = this.common();
return jedis.get(key);
} /**
* 追加数据
* @param key
* @param value
*/
public void appendValue(String key, String value){
Jedis jedis = this.common();
jedis.append(key, value);
} /**
* 测试 String
*/
@Test
public void testString(){
if(this.existsKey("name")){
System.out.println("这一个key存在了!");
this.appendValue("name", "xbq6666"); String name = this.getValue("name");
System.out.println("name===" + name); long flag = this.delValue("name");
System.out.println(flag); }else {
this.setValue("name", "javaCoder");
String name = this.getValue("name");
System.out.println("name===" + name);
}
} // ----------------------------对List类型的操作------------------------------------------
/**
* 保存到链表
* @param key
* @param keys
* @return
*/
public long lpush(String key, String ...keys){
Jedis jedis = this.common();
return jedis.lpush(key, keys);
} /**
* 取出链表中的全部元素
* @param key
* @return
*/
public List<String> lrange(String key) {
Jedis jedis = this.common();
return jedis.lrange(key, 0, -1);
} /**
* 查询出链表中的元素个数
* @param key
* @return
*/
public long llen(String key){
Jedis jedis = this.common();
return jedis.llen(key);
} /**
* 取出链表中的头部元素
* @param key
* @return
*/
public String lpop(String key){
Jedis jedis = this.common();
return jedis.lpop(key);
} // ----------------------------对Hash类型的操作------------------------------------------
/**
* 添加
* @param key
* @param field
* @param value
* @return
*/
public long hset(String key, String field, String value) {
Jedis jedis = this.common();
return jedis.hset(key, field, value);
} /**
* 查询
* @param key
* @param field
* @return
*/
public String hget(String key, String field){
Jedis jedis = this.common();
return jedis.hget(key, field);
} /**
* 判断 key 中的field 是否存在
* @param key
* @param field
* @return
*/
public boolean hexists(String key, String field){
Jedis jedis = this.common();
return jedis.hexists(key, field);
} /**
* 删除
* @param key
* @param fields
* @return
*/
public long hdel(String key, String ...fields){
Jedis jedis = this.common();
return jedis.hdel(key, fields);
} // ----------------------------对Set类型的操作--------------------------------------------
/**
* 添加元素
* @param key
* @param members
* @return
*/
public long sadd(String key, String ...members){
Jedis jedis = this.common();
return jedis.sadd(key, members);
} /**
* 查询出set中的所有元素
* @param key
* @return
*/
public Set<String> sMember(String key){
Jedis jedis = this.common();
return jedis.smembers(key);
} /**
* 查询出 set中元素的个数
* @param key
* @return
*/
public long scard(String key){
Jedis jedis = this.common();
return jedis.scard(key);
} // ----------------------------对ZSet类型的操作--------------------------------------------
/**
* 在zset中添加元素
* @param key
* @param score
* @param member
* @return
*/
public long zadd(String key, double score ,String member){
Jedis jedis = this.common();
return jedis.zadd(key, score, member);
} /**
* 查询所有元素
* @param key
* @return
*/
public Set<String> zrange(String key){
Jedis jedis = this.common();
return jedis.zrange(key, 0, -1);
} /**
* 查询zset中的元素个数
* @param key
* @return
*/
public long zcard(String key){
Jedis jedis = this.common();
return jedis.zcard(key);
} /**
* 删除zset中的一个 或者多个元素
* @param key
* @param members
* @return
*/
public long zrem(String key, String ...members){
Jedis jedis = this.common();
return jedis.zrem(key, members);
}
}

Redis(五)-- Java API的更多相关文章

  1. Java API 操作Redis

    针对Redis的Java客户端有很多种,具体查看官网信息:https://redis.io/clients#java 本次测试使用Jedis API,Jedis使用方便,其api方法名称与redis命 ...

  2. 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!

    转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...

  3. Hadoop(五):HDFS的JAVA API基本操作

    HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...

  4. kafka2.9.2的伪分布式集群安装和demo(java api)测试

    目录: 一.什么是kafka? 二.kafka的官方网站在哪里? 三.在哪里下载?需要哪些组件的支持? 四.如何安装? 五.FAQ 六.扩展阅读   一.什么是kafka? kafka是LinkedI ...

  5. ubuntu12.04+kafka2.9.2+zookeeper3.4.5的伪分布式集群安装和demo(java api)测试

    博文作者:迦壹 博客地址:http://idoall.org/home.php?mod=space&uid=1&do=blog&id=547 转载声明:可以转载, 但必须以超链 ...

  6. 20145208 实验五 Java网络编程

    20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  7. 20145215实验五 Java网络编程及安全

    20145215实验五 Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20145208蔡野,我负责编写客 ...

  8. 20145220 实验五 Java网络编程

    20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  9. mybatis Java API

    既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...

随机推荐

  1. Linux下安装Python3.6和第三方库

    如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 一.安装p ...

  2. Debug文件夹是什么

    debug是一个隐藏的对象,用于进行和调试相关的工作.是系统调试文件夹,用来存放系统运行过程中调试模块的日志文件,以便管理员根据这些日志文件来发现计算机所存在的问题.其中“UserMode”文件夹下存 ...

  3. Qt学习之路3---Qt中的坐标系统

    -Qt使用统一的坐标系统定位窗口部件和位置大小 -Qt部件类提供成员函数在坐标系统中进行定位 -QWidget类提供了窗口部件所需的坐标系统成员函数 代码测试 #include "widge ...

  4. 面试-Hash是怎么实现的?

    相关资料:http://blog.csdn.net/luyuncsd123/article/details/11590861 Hash生命起源:那么,我们开始思考:有什么方式既能够具备数组的快速查询的 ...

  5. I/O限制异步操作

    CLR非异步操作读取文件的过程图 非异步操作主要是因为每次请求硬件如(硬盘,网卡等)的线程都处于阻塞状态,导致以后的请求都需要重新创建新的线程.导致线程上下文的切换频繁. 异步IO操作主要是通过每次的 ...

  6. 全栈设计模式套餐MVVM, RESTful, MVC的历史探索

    众所周知, 软件开发时遵守一个规范的设计模式非常重要, 学习行业内主流的design pattern往往能够为你节省大部分时间. 根据我2年的全栈经验, 在Web应用程序领域最流行的, 并且若干年内不 ...

  7. Entity Framework应用:管理并发

    理解并发 并发管理解决的是允许多个实体同时更新,实际上这意味着允许多个用户同时在相同的数据上执行多个数据库操作.并发是在一个数据库上管理多个操作的一种方式,同时遵守了数据库操作的ACID属性(原子性. ...

  8. PHP打印重复的东西

    <?php echo str_repeat(" ", 8)?>//连续打印8个空格

  9. Droptiles - 炫酷的 Metro 风格的层叠式 Web 面板

    介绍 Droptiles是一套Metro风格的类似Win8的Web2.0控制面板.它采用图块(tiles)建立用户体验.图块(tiles)是一些可以从外部资源中获取数据的迷你应用.点击图块(tile) ...

  10. Error -27780: Connection reset by peer: socket write error

    Problem Description: Error: "-27780: read to host failed: [10054] Connection reset by peer" ...