Redis的Java客戶端Jedis(十三)
我的程式碼:
public class TestPing { // 連線本地的 Redis 服務 public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1",6379); System.out.println(jedis.ping()); } }
public class TestApi { @Test public void keyTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.set("k1","v1"); jedis.set("k2","v2"); jedis.set("k3","v3"); //key Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); } //key是否存在 System.out.println("jedis.exists====>" + jedis.exists("k2")); /*以秒為單位,返回給定 key 的剩餘生存時間(TTL, time to live) 返回值: 當 key 不存在時,返回 -2 。當 key 存在但沒有設定剩餘生存時間時,返回 -1 。 否則,以秒為單位,返回 key 的剩餘生存時間。*/ System.out.println(jedis.ttl("k1")); } @Test public void stringTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); System.out.println(jedis.get("k1")); jedis.set("k4", "k4_redis"); System.out.println("----------------------------------------"); jedis.mset("str1", "v1", "str2", "v2", "str3", "v3"); System.out.println(jedis.mget("str1", "str2", "str3")); } @Test public void listTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.lpush("mylist", "v1", "v2", "v3", "v4", "v5"); List<String> list = jedis.lrange("mylist", 0, -1); for (String element : list) { System.out.println(element); } } @Test public void setTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.sadd("orders", "jd001"); jedis.sadd("orders", "jd002"); jedis.sadd("orders", "jd003"); Set<String> set1 = jedis.smembers("orders"); for (Iterator iterator = set1.iterator(); iterator.hasNext(); ) { String string = (String) iterator.next(); System.out.println(string); } /*移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。 當 key 不是集合型別,返回一個錯誤。*/ jedis.srem("orders", "jd002"); System.out.println(jedis.smembers("orders").size()); } @Test public void hashTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.hset("hash1", "userName", "lisi"); System.out.println(jedis.hget("hash1", "userName")); Map<String, String> map = new HashMap<String, String>(); map.put("telphone", "13811814763"); map.put("address", "atguigu"); map.put("email", "[email protected]"); jedis.hmset("hash2", map); List<String> result = jedis.hmget("hash2", "telphone", "email"); for (String element : result) { System.out.println(element); } } @Test public void zsetTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.zadd("zset01", 60d, "v1"); jedis.zadd("zset01", 70d, "v2"); jedis.zadd("zset01", 80d, "v3"); jedis.zadd("zset01", 90d, "v4"); Set<String> s1 = jedis.zrange("zset01", 0, -1); for (Iterator iterator = s1.iterator(); iterator.hasNext(); ) { String string = (String) iterator.next(); System.out.println(string); } } @Test public void multiTest() { Jedis jedis = new Jedis("127.0.0.1", 6379); Transaction transaction = jedis.multi();//被當作一個命令進行執行 Response<String> response = transaction.get("serialNum"); transaction.set("serialNum", "s002"); response = transaction.get("serialNum"); transaction.lpush("list3", "a"); transaction.lpush("list3", "b"); transaction.lpush("list3", "c"); //執行該事物,提交 transaction.exec(); //放棄該事物,不提交 //transaction.discard(); } }
public class TestSlaveof {//主從複製,讀寫分離 public static void main(String[] args) throws InterruptedException { Jedis jedis_M = new Jedis("127.0.0.1", 6379); Jedis jedis_S = new Jedis("127.0.0.1", 6380); jedis_S.slaveof("127.0.0.1", 6379); jedis_M.set("k6", "v6"); Thread.sleep(500); System.out.println(jedis_S.get("k6")); } }
public class TestTransaction { public boolean transMethod() throws Exception{ Jedis jedis = new Jedis("127.0.0.1", 6379); int balance;// 可用餘額 int debt;// 欠額 int amtToSubtract = 10;// 實刷額度 jedis.watch("balance"); //jedis.set("balance","5");//此句不該出現,講課方便。模擬其他程式已經修改了該條目 Thread.sleep(7000); //休眠7秒 balance = Integer.parseInt(jedis.get("balance")); if (balance < amtToSubtract) { jedis.unwatch(); System.out.println("modify"); return false; } else { System.out.println("***********transaction"); Transaction transaction = jedis.multi(); transaction.decrBy("balance", amtToSubtract); transaction.incrBy("debt", amtToSubtract); transaction.exec(); balance = Integer.parseInt(jedis.get("balance")); debt = Integer.parseInt(jedis.get("debt")); System.out.println("*******" + balance); System.out.println("*******" + debt); return true; } } /** * * 通俗點講,watch命令就是標記一個鍵,如果標記了一個鍵, 在提交事務前如果該鍵被別人修改過,那事務就會失敗,這種情況通常可以在程式中 * * 重新再嘗試一次。 * * 首先標記了鍵balance,然後檢查餘額是否足夠,不足就取消標記,並不做扣減; 足夠的話,就啟動事務進行更新操作, * * 如果在此期間鍵balance被其它人修改, 那在提交事務(執行exec)時就會報錯, 程式中通常可以捕獲這類錯誤再重新執行一次,直到成功。 * */ public static void main(String[] args) throws Exception{ TestTransaction test = new TestTransaction(); boolean retValue = test.transMethod(); System.out.println("main retValue-------: " + retValue); } }
public class JedisPoolUtil { private static volatile JedisPool jedisPool = null;//被volatile修飾的變數不會被本地執行緒快取,對該變數的讀寫都是直接操作共享記憶體。 private JedisPoolUtil() { } public static JedisPool getJedisPoolInstance() { if (null == jedisPool) { synchronized (JedisPoolUtil.class) { if (null == jedisPool) { JedisPoolConfig poolConfig = new JedisPoolConfig(); //poolConfig.setMaxActive(1000); poolConfig.setMaxIdle(32); //poolConfig.setMaxWait(100 * 1000); poolConfig.setTestOnBorrow(true); jedisPool =new JedisPool(poolConfig, "127.0.0.1"); } } } return jedisPool; } public static void release(JedisPool jedisPool, Jedis jedis) { if (null != jedis) { jedisPool.returnResourceObject(jedis); } } }
public class TestPool { public static void main(String[] args) { JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance(); Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.set("k18", "v183"); System.out.println(jedis.get("k18")); } catch (Exception e) { e.printStackTrace(); } finally { JedisPoolUtil.release(jedisPool, jedis); } } }===================================================================
JedisPool的配置引數大部分是由JedisPoolConfig的對應項來賦值的。
maxActive:控制一個pool可分配多少個jedis例項,通過pool.getResource()來獲取;如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis例項,則此時pool的狀態為exhausted。
maxIdle:控制一個pool最多有多少個狀態為idle(空閒)的jedis例項;
whenExhaustedAction:表示當pool中的jedis例項都被allocated完時,pool要採取的操作;預設有三種。
WHEN_EXHAUSTED_FAIL --> 表示無jedis例項時,直接丟擲NoSuchElementException;
WHEN_EXHAUSTED_BLOCK --> 則表示阻塞住,或者達到maxWait時丟擲JedisConnectionException;
WHEN_EXHAUSTED_GROW --> 則表示新建一個jedis例項,也就說設定的maxActive無用;
maxWait:表示當borrow一個jedis例項時,最大的等待時間,如果超過等待時間,則直接拋JedisConnectionException;
testOnBorrow:獲得一個jedis例項的時候是否檢查連線可用性(ping());如果為true,則得到的jedis例項均是可用的;
testOnReturn:return 一個jedis例項給pool時,是否檢查連線可用性(ping());
testWhileIdle:如果為true,表示有一個idle object evitor執行緒對idle object進行掃描,如果validate失敗,此object會被從pool中drop掉;這一項只有在timeBetweenEvictionRunsMillis大於0時才有意義;
timeBetweenEvictionRunsMillis:表示idle object evitor兩次掃描之間要sleep的毫秒數;
numTestsPerEvictionRun:表示idle object evitor每次掃描的最多的物件數;
minEvictableIdleTimeMillis:表示一個物件至少停留在idle狀態的最短時間,然後才能被idle object evitor掃描並驅逐;這一項只有在timeBetweenEvictionRunsMillis大於0時才有意義;
softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基礎上,加入了至少minIdle個物件已經在pool裡面了。如果為-1,evicted不會根據idle time驅逐任何物件。如果minEvictableIdleTimeMillis>0,則此項設定無意義,且只有在timeBetweenEvictionRunsMillis大於0時才有意義;
lifo:borrowObject返回物件時,是採用DEFAULT_LIFO(last in first out,即類似cache的最頻繁使用佇列),如果為False,則表示FIFO佇列;
==================================================================================================================
其中JedisPoolConfig對一些引數的預設設定如下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1
相關推薦
Redis的Java客戶端Jedis(十三)
我的程式碼: public class TestPing { // 連線本地的 Redis 服務 public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1"
Redis 的 java 客戶端 jedis
Java 連線 MySql 我們有 mysql-connector ,連線 Redis 我們有 jedis。 一、引入依賴 <dependency> <groupId>redis.clients</groupId> <ar
Redis的java客戶端Jedis Client介紹(持續翻譯中)
1. 概覽 This article is an introduction to Jedis, a client library in Java for Redis – the popular in-memory data structure store that can persis
Redis 客戶端-Jedis
一、編碼實戰 1> 簡單使用 package org.jedisDomo; import redis.clients.jedis.Jedis; public class JedisDemo { public static void main(S
[筆記遷移][Redis][8]Redis的Java客戶端—Jedis
一、連通性測試 //獲取一個Redis客戶端 Jedis jedisClient = new Jedis("192.168.109.191", 6379); //正常連線將返回PONG,若未關閉防火牆
Redis叢集 Java客戶端Jedis的使用
Java客戶端Jedis 這裡只講Jedis常規用法和五種資料結構的方法(關於叢集的搭建以後再寫) 2.稍微修飾下 3.執行效果 4.相應的jar包(第一個不相容,沒用,junit4.4:@test 做測試所需) 二,redis資料型別(
redis知識盤點【陸】_客戶端Jedis
系列文章:本篇文章主要介紹一下redis的客戶端Jedis。首先明確兩點:一、redis客戶端與服務端之間的通訊協議是在TCP協議之上構建的;二、Redis制定了RESP(REdis Serializa
使用Redis的Java客戶端Jedis
前一篇文章《Redis命令指南》講解了通過命令列的方式執行Key=>的儲存操作,在實際的專案開發中,各種語言是使用Redis的客戶端庫來與Redis互動。針對Java語言,Redis官方推薦Jedis。
redis客戶端jedis基於spring搭建單節點或者叢集執行緒池連線
基於jedis執行緒池搭建單節點或叢集連線完整程式碼 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId&g
SDR(spring.data.redis)與Sentinel高可用叢集Redis客戶端Jedis配置
依賴 <dependency> <groupId>junit</groupId> <artifactId>junit<
Redis 客戶端Jedis使用---連線池
Jedis 是Redis 的Java客戶端,通過一段時間的使用,jedis基本實現redis的所有功能,並且jedis在客戶端實現redis資料分片功能,Redis本身是沒有資料分佈功能。一、下載jedis 程式碼二、專案中如何使用Jedis使用現在大家都喜歡用maven作為
redis -java客戶端jedis
接上一篇 1 key可以有過期的設定 2 Lists 列表 插入元素很快, 按索引查詢,慢 //列表是自動建立和刪除的 //從左側新增給List1 一個值 1 lpush list1 1 //從右側新增2 rpush lis
redis的客戶端jedis裡構造器中有soTimeout和connectionTimeout兩個引數,分別代表什麼
connectionTimeout:表示連線超時時間例如構造器public Jedis(String host, int port, int timeout) { super(host, port, timeout); }public static void main
redis的Java客戶端jedis池的介紹及使用
一、jedis池的介紹 相信大家都用過執行緒池或者是jdbc的連線池,使用池可以減少系統在使用所需物件時建立物件的開銷,從而提高系統性能和效率。jedis池也是如此,那麼我們該如何使用jedis池呢? 二、jedis池的使用 1.所需jar包:commons-pool.ja
Redis的Java客戶端Jedis的八種呼叫方式(事務、管道、分散式)介紹
jedis是一個著名的key-value儲存系統,而作為其官方推薦的java版客戶端jedis也非常強大和穩定,支援事務、管道及有jedis自身實現的分散式。 在這裡對jedis關於事務、管道和分散式的呼叫方式做一個簡單的介紹和對比: 一、
java客戶端Jedis操作Redis Sentinel 連線池
pom.xml配置 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis<
Redis 客戶端 Jedis、lettuce 和 Redisson 對比
Redis 支援多種語言的客戶端,下面列舉了部分 Redis 支援的客戶端語言,大家可以通過[官網](https://redis.io/clients)檢視 Redis 支援的客戶端詳情。 - C語言 - C++ - C# - Java - [Python](https://redis.io/clients
【轉載】java 客戶端鏈接不上redis解決方案 (jedis)
主機 rom number table 出現 gin 現在 start http 本文出自:http://blog.csdn.net/lulidaitian/article/details/51946169 出現問題描述: 1.Could not get a resou
Redis Cluster集群搭建後,客戶端的連接研究(Spring/Jedis)(待實踐)
turn ron 記錄 redis div println 刪除 clu name 說明:無論是否已經搭建好集群,還是使用什麽樣的客戶端去連接,都是必須把全部IP列表集成進去,然後隨機往其中一個IP寫。 這樣做的好處: 1、隨機IP寫入之後,Redis Cluster代
Redis 設計與實現(第十三章) -- 客戶端
腳本 ons listening last then red logs 可能 reply 概述 對於每個與服務器連接的客戶端,服務器都為它創建相應的redisClient的數據結構,並保持了相應的狀態。Redis Server通過一個鏈表來保存所有的客戶端連接。 本章包括: