Jedis(连接池)常见操作

Jedis的最为常见的操作。主要包括常用的列表(list)、集合(set)、有序集合(sorted set)、哈希表(hash)等数据结构,以及其他特性支持。

参考资料:http://hello-nick-xu.iteye.com/blog/search?query=Jedis

<一>. 使用list:
 可以使用列表模拟队列(queue)、堆栈(stack),并且支持双向的操作(L或者R)。
 1. 右边入队:

Java代码  

  1. jedis.rpush("userList", "James");

2. 左边出队:右边出栈(rpop),即为对堆栈的操作。

Java代码  

  1. jedis.lpop("userList");

3. 返回列表范围:从0开始,到最后一个(-1) [包含]

Java代码  

  1. List<String> userList = jedis.lrange("userList", 0, -1);

Redis的TopN操作,即使用list完成:lrange
 4. 删除:使用key

Java代码  

  1. jedis.del("userList");

5. 设置:位置1处为新值

Java代码  

  1. jedis.lset("userList", 1, "Nick Xu");

6. 返回长度:

Java代码  

  1. Long size = jedis.llen("userList");

7. 进行裁剪:包含

Java代码  

  1. jedis.ltrim("userList", 1, 2);

<二>. 使用set:和列表不同,集合中的元素是无序的,因此元素也不能重复。
 1. 添加到set:可一次添加多个

Java代码  

  1. jedis.sadd("fruit", "apple");
  2. jedis.sadd("fruit", "pear", "watermelon");
  3. jedis.sadd("fruit", "apple");

2. 遍历集合:

Java代码  

  1. Set<String> fruit = jedis.smembers("fruit");

3. 移除元素:remove

Java代码  

  1. jedis.srem("fruit", "pear");

4. 返回长度:

Java代码  

  1. Long size = jedis.scard("fruit");

5. 是否包含:

Java代码  

  1. Boolean isMember = jedis.sismember("fruit", "pear");

6. 集合的操作:包括集合的交运算(sinter)、差集(sdiff)、并集(sunion)

Java代码  

  1. jedis.sadd("food", "bread", "milk");
  2. Set<String> fruitFood = jedis.sunion("fruit", "food");

<三>. 使用sorted set:有序集合在集合的基础上,增加了一个用于排序的参数。
 1. 有序集合:根据“第二个参数”进行排序。

Java代码  

  1. jedis.zadd("user", 22, "James");

2. 再次添加:元素相同时,更新为当前的权重。

Java代码  

  1. jedis.zadd("user", 24, "James");

3. zset的范围:找到从0到-1的所有元素。

Java代码  

  1. Set<String> user = jedis.zrange("user", 0, -1);

4. 说明:我们可能还有一个疑虑,集合是怎么做到有序的呢?
   实际上,上述user的数据类型为java.util.LinkedHashSet
   
<四>. 使用hash:
 1. 存放数据:使用HashMap

Java代码  

  1. Map<String, String>  capital = new HashMap<String, String>();
  2. capital.put("shannxi", "xi‘an");
  3. ...
  4. jedis.hmset("capital", capital);

2. 获取数据:

Java代码  

  1. List<String> cities = jedis.hmget("capital", "shannxi", "shanghai");

<五>. 其他操作:
 1. 对key的操作:
  @ 对key的模糊查询:

Java代码  

  1. Set<String> keys = jedis.keys("*");
  2. Set<String> keys = jedis.keys("user.userid.*");

@ 删除key:

Java代码  

  1. jedis.del("city");

@ 是否存在:

Java代码  

  1. Boolean isExists = jedis.exists("user.userid.14101");

2. 失效时间:
  @ expire:时间为5s

Java代码  

  1. jedis.setex("user.userid.14101", 5, "James");

@ 存活时间(ttl):time to live

Java代码  

  1. Long seconds = jedis.ttl("user.userid.14101");

@ 去掉key的expire设置:不再有失效时间

Java代码  

  1. jedis.persist("user.userid.14101");

3. 自增的整型:
  @ int类型采用string类型的方式存储:

Java代码  

  1. jedis.set("amount", 100 + "");

@ 递增或递减:incr()/decr()

Java代码  

  1. jedis.incr("amount");

@ 增加或减少:incrBy()/decrBy()

Java代码  

  1. jedis.incrBy("amount", 20);

4. 数据清空:
  @ 清空当前db:

Java代码  

  1. jedis.flushDB();

@ 清空所有db:

Java代码  

  1. jedis.flushAll();

5. 事务支持:
  @ 获取事务:

Java代码  

  1. Transaction tx = jedis.multi();

@ 批量操作:tx采用和jedis一致的API接口

Java代码  

  1. for(int i = 0;i < 10;i ++) {
  2. tx.set("key" + i, "value" + i);
  3. System.out.println("--------key" + i);
  4. Thread.sleep(1000);
  5. }

@ 执行事务:针对每一个操作,返回其执行的结果,成功即为Ok

Java代码  

  1. List<Object> results = tx.exec();
时间: 2024-08-08 08:31:53

Jedis(连接池)常见操作的相关文章

jedis连接池爆满导致的服务不可用

生产环境was线程数300,jedis连接池连接数100. 在业务高峰期,查看日志发现大量could not get a resource from a pool的异常,抓取javacore文件发现was线程大量进入parked状态,查看jedis源码发现连接池底层使用common-pool实现,而common-pool其中有这样一段代码: if (p == null) { if (borrowMaxWaitMillis < 0) { p = idleObjects.takeFirst(); }

使用dbutils的PooledDB连接池,操作数据库

使用dbutils的PooledDB连接池,操作数据库. 这样就不需要每次执行sql后都关闭数据库连接,频繁的创建连接,消耗时间 如果是使用一个连接一直不关闭,多线程下运行一段时间后很容易出现OperationalError: (2006, ‘MySQL server has gone away’)这个错误. 使用PooledDB解决. # coding=utf-8 """ 使用DBUtils数据库连接池中的连接,操作数据库 OperationalError: (2006,

Java与redis交互、Jedis连接池JedisPool

Java与redis交互比较常用的是Jedis. 先导入jar包: commons-pool2-2.3.jar jedis-2.7.0.jar 基本使用: public class RedisTest1 { public static void main(String[] args) { Jedis jedis = new Jedis("localhost",6379); jedis.set("username","chichung"); jed

Jedis连接池(实际项目可用)

POM依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <slf4j.version>1.7.25</slf4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <

jedis连接池详解(Redis)

原子性(atomicity): 一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都做,要么都不做. Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关: Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作INCR实现简单计数器功能; 单机模式: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import

Jedis连接池的使用

所需jar:jedis-2.1.0.jar和commons-pool-1.5.4.jar Jedis操作步骤如下: 1->获取Jedis实例需要从JedisPool中获取: 2->用完Jedis实例需要返还给JedisPool: 3->如果Jedis在使用过程中出错,则也需要还给JedisPool: 代码如下: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.Jedis

Jedis连接池的使用(转)

http://www.cnblogs.com/linjiqin/archive/2013/06/14/3135248.html 所需jar:jedis-2.1.0.jar和commons-pool-1.5.4.jar Jedis操作步骤如下:1->获取Jedis实例需要从JedisPool中获取:2->用完Jedis实例需要返还给JedisPool:3->如果Jedis在使用过程中出错,则也需要还给JedisPool: [java] view plaincopy package com.

8月23 配置mongodb连接池 | docker 操作

一.配置mongodb连接池 属性类 import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import lombok.Getter; import lombok.Setter;

Jedis连接池

原文地址:https://www.cnblogs.com/djlindex/p/11602882.html