jedis 是 Redis 官方推薦的Java連接開發工具;使用 Java 操作 redis 中間件;在企業中用的最多的就是Jedis,Jedis提供了完整Redis命令,而Redisson有更多分布式的容器實作,
如果使用jedis操作redis,那么需要對redis基本操作命令要十分熟悉;
對redis命令不熟悉的看這里:https://blog.csdn.net/weixin_44890938/article/details/118909055?spm=1001.2014.3001.5501
匯入對應的依賴
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
</dependency>
1.連接測驗
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
public class JedisCliTest {
public synchronized static void main(String[] args) throws InterruptedException {
Jedis jedis = new Jedis("192.168.204.128", 6379);
System.out.println("查看連接狀態:" + jedis.ping());
System.out.println("切換資料庫:" + jedis.select(2));
System.out.println("新增一個key:" + jedis.set("aa", "sasa"));
System.out.println("查看資料大小:" + jedis.dbSize());
System.out.println("查看當前資料庫所有 key:" + jedis.keys("*"));
System.out.println("清空當前資料庫:" + jedis.flushDB());
System.out.println("清空所有資料庫:" + jedis.flushAll());
System.out.println("新增一個key:" + jedis.set("k", "v"));
System.out.println("新增一個key:" + jedis.set("b", "s"));
System.out.println("新增一個key:" + jedis.set("s", "aa"));
System.out.println("查看當前key是否存在:" + jedis.exists("k"));
System.out.println("查看當前key是否存在:" + jedis.exists("a"));
System.out.println("查看當前資料庫所有 key:" + jedis.keys("*"));
System.out.println("設定當前key過期時間:" + jedis.expire("s", 5));
try {
Thread.sleep(2000);
System.out.println("休眠 2S 后查看當前key剩余過期時間:" + jedis.ttl("s"));
} catch (Exception e) {
} finally {
Thread.sleep(2000);
System.out.println("再次休眠 2S 后查看當前key剩余過期時間:" + jedis.ttl("s"));
}
System.out.println("移除當前的key:" + jedis.move("b", 1));
System.out.println("查看當前資料庫所有 key:" + jedis.keys("*"));
System.out.println("查看當前key的型別:" + jedis.type("k"));
System.out.println("清空當前資料庫:" + jedis.flushDB());
jedis.disconnect();
jedis.close();
}
}
運行結果:
查看連接狀態:PONG
切換資料庫:OK
新增一個key:OK
查看資料大小:1
查看當前資料庫所有 key:[aa]
清空當前資料庫:OK
清空所有資料庫:OK
新增一個key:OK
新增一個key:OK
新增一個key:OK
查看當前key是否存在:true
查看當前key是否存在:false
查看當前資料庫所有 key:[b, s, k]
設定當前key過期時間:1
休眠 2S 后查看當前key剩余過期時間:3
再次休眠 2S 后查看當前key剩余過期時間:1
移除當前的key:1
查看當前資料庫所有 key:[s, k]
查看當前key的型別:string
清空當前資料庫:OK
Process finished with exit code 0
2. String (字串)
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
public class JedisStringTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(4);
jedis.flushDB();
System.out.println("添加一個key: " + jedis.set("k1", "aaaaa"));
System.out.println("同時新增多個值: " + jedis.mset("k2", "v2", "k3", "v3", "k4", "v4", "k5", "v5"));
System.out.println("獲取當前key的value: " + jedis.get("k3"));
System.out.println("同時獲取多個值: " + jedis.mget("k1", "k4"));
System.out.println("查看所有key: " + jedis.keys("*"));
System.out.println("追加字串,若當前key不存在,相當于新增當前key(set操作)");
System.out.println("追加字串: " + jedis.append("k1", "ssbbsb"));
System.out.println(" 查看當前key的value的長度: " + jedis.strlen("k1"));
System.out.println("追加字串: " + jedis.append("k6", "ssasdadsda"));
System.out.println("同時獲取多個值: " + jedis.mget("k1", "k6"));
jedis.flushDB();
System.out.println("-------------------------------------");
jedis.mset("k2", "v2aaa", "k1", "v1dasdad");
System.out.println(jedis.set("kk", "0"));
System.out.println("incr 自增操作相當于 i++");
System.out.println(jedis.incr("kk"));
System.out.println("decr 自減操作相當于 i--");
System.out.println(jedis.decr("kk"));
System.out.println("incrby 設定步長,相當于 i+=n");
System.out.println(jedis.incrBy("kk", 10));
System.out.println("decrby 設定步長,相當于 i-=n");
System.out.println(jedis.decrBy("kk", 5));
System.out.println("k1: " + jedis.get("k1") + " k2" + jedis.get("k2"));
System.out.println("截取字串: " + jedis.getrange("k1", 0, 3));
System.out.println("如果結束端點為負值的話,為獲取全部字串: " + jedis.getrange("k1", 0, -1));
System.out.println("替換字串: " + jedis.setrange("k2", 0, "dasd"));
System.out.println(" k2: " + jedis.get("k2"));
System.out.println("替換字串: " + jedis.setrange("k2", 0, "dasdadsadsad"));
System.out.println(" k2: " + jedis.get("k2"));
System.out.println("當前key不存在時創建: " + jedis.setnx("k", "sadada"));
System.out.println("當前key不存在時創建: " + jedis.setnx("k2", "sadada"));
System.out.println("設定過期時間: " + jedis.setex("as", 5, "dasdasda"));
System.out.println("同時處理多個,當前key不存在時創建: " + jedis.msetnx("k3", "v3", "k4", "v4"));
System.out.println("同時處理多個,當前key不存在時創建: " + jedis.msetnx("k3", "v3", "k5", "v5"));
jedis.flushDB();
System.out.println("-------------------------------------");
System.out.println("getset 先get后set " +
"1.如果當前key不存在,先回傳null,然后創建" +
"2.如果當前key存在,先回傳當前value,然后重新設定當前key的值");
System.out.println(jedis.getSet("v1", "aaaaa"));
System.out.println(jedis.getSet("v1", "bbbbb"));
System.out.println(jedis.get("v1"));
jedis.flushDB();
}
}
運行結果:
添加一個key: OK
同時新增多個值: OK
獲取當前key的value: v3
同時獲取多個值: [aaaaa, v4]
查看所有key: [k3, k4, k5, k1, k2]
追加字串,若當前key不存在,相當于新增當前key(set操作)
追加字串: 11
查看當前key的value的長度: 11
追加字串: 10
同時獲取多個值: [aaaaassbbsb, ssasdadsda]
-------------------------------------
OK
incr 自增操作相當于 i++
1
decr 自減操作相當于 i--
0
incrby 設定步長,相當于 i+=n
10
decrby 設定步長,相當于 i-=n
5
k1: v1dasdad k2v2aaa
截取字串: v1da
如果結束端點為負值的話,為獲取全部字串: v1dasdad
替換字串: 5
k2: dasda
替換字串: 12
k2: dasdadsadsad
當前key不存在時創建: 1
當前key不存在時創建: 0
設定過期時間: OK
同時處理多個,當前key不存在時創建: 1
同時處理多個,當前key不存在時創建: 0
-------------------------------------
getset 先get后set 1.如果當前key不存在,先回傳null,然后創建2.如果當前key存在,先回傳當前value,然后重新設定當前key的值
null
aaaaa
bbbbb
Process finished with exit code 0
3.List(串列)
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ListPosition;
public class JedisListTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(5);
jedis.flushDB();
System.out.println("將一個值或者多個值插入串列頭(左邊)部 k1 :" + jedis.lpush("k1", "v1", "v2", "v3"));
System.out.println("獲取串列的值(可獲取串列區間的值) k1 :" + jedis.lrange("k1", 0, -1));
System.out.println(" 將一個值或者多個值插入串列尾(右邊)部 s1 :" + jedis.rpush("s1", "a1", "a2", "a3"));
System.out.println("獲取串列的值(可獲取串列區間的值) s1 :" + jedis.lrange("s1", 0, -1));
System.out.println("移除串列的元素,從左邊開始 :" + jedis.lpop("s1"));
System.out.println("s1 :" + jedis.lrange("s1", 0, -1));
System.out.println("移除串列的元素,從右邊開始 :" + jedis.rpop("k1"));
System.out.println("k1 :" + jedis.lrange("k1", 0, -1));
System.out.println("獲取串列索引處元素 k1 0 :"+ jedis.lindex("k1", 0));
System.out.println("獲取串列索引處元素 s1 1 :" + jedis.lindex("s1", 1));
System.out.println(" 獲取串列的長度 k1 :" + jedis.llen("k1"));
System.out.println("移除指定個數的value,精確匹配,洗掉1個 :" + jedis.lrem("k1", 1, "v2"));
System.out.println("添加元素 k1 :" + jedis.lpush("k1", "v1", "v2", "v2", "v2", "v3"));
System.out.println("獲取串列的值(可獲取串列區間的值) k1 :" + jedis.lrange("k1", 0, -1));
System.out.println("移除指定個數的value,精確匹配,洗掉多個 :" + jedis.lrem("k1", 2, "v2"));
System.out.println("獲取串列的值(可獲取串列區間的值) k1 :" + jedis.lrange("k1", 0, -1));
System.out.println("截取元素區間的值 :" + jedis.ltrim("s1", 0, 1));
System.out.println("獲取串列的值(可獲取串列區間的值) s1 :" + jedis.lrange("s1", 0, -1));
jedis.flushDB();
System.out.println(jedis.lpush("li", "one", "two", "three"));
System.out.println( jedis.lrange("li", 0, -1));
System.out.println("移除串列的最后一個元素,將它移動到新的串列中 :" + jedis.rpoplpush("li", "ki"));
System.out.println( jedis.lrange("li", 0, -1));
System.out.println(jedis.lrange("ki", 0, -1));
jedis.flushDB();
System.out.println(jedis.lpush("list", "one", "two", "three"));
System.out.println( jedis.lrange("list", 0, -1));
System.out.println("將串列指定下標替換為另一個值 :" + jedis.lset("list", 1, "four"));
System.out.println( jedis.lrange("list", 0, -1));
System.out.println("將某一個具體的值插入到串列中某個元素的前面 :" + jedis.linsert("list", ListPosition.BEFORE, "three", "aaa"));
System.out.println(jedis.lrange("list", 0, -1));
System.out.println("將某一個具體的值插入到串列中某個元素的后面 :" + jedis.linsert("list", ListPosition.AFTER, "three", "ddd"));
System.out.println(jedis.lrange("list", 0, -1));
jedis.flushDB();
}
}
運行結果:
將一個值或者多個值插入串列頭(左邊)部 k1 :3
獲取串列的值(可獲取串列區間的值) k1 :[v3, v2, v1]
將一個值或者多個值插入串列尾(右邊)部 s1 :3
獲取串列的值(可獲取串列區間的值) s1 :[a1, a2, a3]
移除串列的元素,從左邊開始 :a1
s1 :[a2, a3]
移除串列的元素,從右邊開始 :v1
k1 :[v3, v2]
獲取串列索引處元素 k1 0 :v3
獲取串列索引處元素 s1 1 :a3
獲取串列的長度 k1 :2
移除指定個數的value,精確匹配,洗掉1個 :1
添加元素 k1 :6
獲取串列的值(可獲取串列區間的值) k1 :[v3, v2, v2, v2, v1, v3]
移除指定個數的value,精確匹配,洗掉多個 :2
獲取串列的值(可獲取串列區間的值) k1 :[v3, v2, v1, v3]
截取元素區間的值 :OK
獲取串列的值(可獲取串列區間的值) s1 :[a2, a3]
-------------------------------------
3
[three, two, one]
移除串列的最后一個元素,將它移動到新的串列中 :one
[three, two]
[one]
-------------------------------------
3
[three, two, one]
將串列指定下標替換為另一個值 :OK
[three, four, one]
將某一個具體的值插入到串列中某個元素的前面 :4
[aaa, three, four, one]
將某一個具體的值插入到串列中某個元素的后面 :5
[aaa, three, ddd, four, one]
Process finished with exit code 0
4.Set(集合)
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
public class JedisSetTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(6);
jedis.flushDB();
System.out.println(" 給集合中添加元素 : "+jedis.sadd("set", "aaa", "bbb", "ccc"));
System.out.println(" 查看指定集合的所有值 set : "+jedis.smembers("set"));
System.out.println(" 判斷某一個值是否在此集合中 : "+jedis.sismember("set", "aaa"));
System.out.println(" 判斷某一個值是否在此集合中 : "+jedis.sismember("set", "ddd"));
System.out.println(" 查看集合中的元素個數 : "+jedis.scard("set"));
System.out.println(" 移除集合中指定元素 : "+jedis.srem("set", "bbb"));
System.out.println(" 隨機抽選元素(個數可指定) : "+jedis.srandmember("set",2));
System.out.println(" 隨機洗掉集合中的某些元素,可指定多個 : "+jedis.spop("set", 2));
System.out.println("-------------------------------------");
jedis.flushDB();
jedis.sadd("s1","a1","b1","c1");
jedis.sadd("s2","a2","b2","c2");
System.out.println(" s1 : "+jedis.smembers("s1")+" s2 : "+jedis.smembers("s2"));
System.out.println(" 將一個指定的值移動到另一個集合中 : "+jedis.smove("s1", "s2", "a1"));
System.out.println(" s1 : "+jedis.smembers("s1")+" s2 : "+jedis.smembers("s2"));
System.out.println("-------------------------------------");
jedis.flushDB();
jedis.sadd("k1","v1","v2","v3");
jedis.sadd("k2","v2","v3","v4");
System.out.println(" k1 : "+jedis.smembers("k1")+" k2 : "+jedis.smembers("k2"));
System.out.println(" 取兩個集合的差集 : "+jedis.sdiff("k1", "k2"));
System.out.println(" 取兩個集合的交集 : "+jedis.sinter("k1", "k2"));
System.out.println(" 取兩個集合的并集 : "+jedis.sunion("k1", "k2"));
}
}
運行結果:
給集合中添加元素 : 3
查看指定集合的所有值 set : [ccc, bbb, aaa]
判斷某一個值是否在此集合中 : true
判斷某一個值是否在此集合中 : false
查看集合中的元素個數 : 3
移除集合中指定元素 : 1
隨機抽選元素(個數可指定) : [ccc, aaa]
隨機洗掉集合中的某些元素,可指定多個 : [ccc, aaa]
-------------------------------------
s1 : [c1, b1, a1] s2 : [c2, b2, a2]
將一個指定的值移動到另一個集合中 : 1
s1 : [c1, b1] s2 : [c2, b2, a1, a2]
-------------------------------------
k1 : [v3, v1, v2] k2 : [v4, v3, v2]
取兩個集合的差集 : [v1]
取兩個集合的交集 : [v3, v2]
取兩個集合的并集 : [v3, v1, v2, v4]
Process finished with exit code 0
5.Hash (哈希)
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;
public class JedisHashTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(7);
jedis.flushDB();
Map<String, String> map = new HashMap<String, String>();
map.put("k1", "v1");
map.put("k2", "v2");
map.put("k3", "v3");
System.out.println(" 新增一個或多個key-Map : "+jedis.hset("hash", map));
System.out.println(" 獲取一個key-Map : "+jedis.hget("hash", "k1"));
System.out.println(" 獲取多個key-Map : "+jedis.hmget("hash", "k1","k2"));
System.out.println(" 獲取全部key-Map : "+jedis.hgetAll("hash"));
System.out.println(" 查看當前hash的元素個數 : "+jedis.hlen("hash"));
System.out.println(" 洗掉hash指定的key欄位,對應的value也會被洗掉 : "+jedis.hdel("hash", "k2"));
System.out.println(jedis.hgetAll("hash"));
System.out.println(" 獲取當前hash的所有value : "+jedis.hvals("hash"));
System.out.println(" 獲取當前hash的所有key : "+jedis.hkeys("hash"));
System.out.println(" 判斷當前hash中指定key是否存在 : "+jedis.hexists("hash", "k1"));
System.out.println(" 判斷當前hash中指定key是否存在 : "+jedis.hexists("hash", "k2"));
System.out.println("---------------------------------");
jedis.flushDB();
Map<String,String> m = new HashMap<String, String>();
m.put("k","0");
jedis.hset("ha",m);
System.out.println(jedis.hgetAll("ha"));
System.out.println(" 設定增量 +5 : "+jedis.hincrBy("ha", "k", 5));
System.out.println(jedis.hgetAll("ha"));
System.out.println(" 設定增量 -2 : "+jedis.hincrBy("ha", "k", -2));
System.out.println(jedis.hgetAll("ha"));
System.out.println("---------------------------------");
jedis.flushDB();
jedis.hset("has", "k1", "v1");
jedis.hset("has", "k2", "v2");
System.out.println(jedis.hgetAll("has"));
System.out.println(" 判斷當前hash中是否存在此key,不存在即創建,存在創建失敗 : "+jedis.hsetnx("has", "k3", "v3"));
System.out.println(" 判斷當前hash中是否存在此key,不存在即創建,存在創建失敗 : "+jedis.hsetnx("has", "k3", "v3"));
}
}
運行結果:
新增一個或多個key-Map : 3
獲取一個key-Map : v1
獲取多個key-Map : [v1, v2]
獲取全部key-Map : {k3=v3, k1=v1, k2=v2}
查看當前hash的元素個數 : 3
洗掉hash指定的key欄位,對應的value也會被洗掉 : 1
{k3=v3, k1=v1}
獲取當前hash的所有value : [v3, v1]
獲取當前hash的所有key : [k3, k1]
判斷當前hash中指定key是否存在 : true
判斷當前hash中指定key是否存在 : false
---------------------------------
{k=0}
設定增量 +5 : 5
{k=5}
設定增量 -2 : 3
{k=3}
---------------------------------
{k1=v1, k2=v2}
判斷當前hash中是否存在此key,不存在即創建,存在創建失敗 : 1
判斷當前hash中是否存在此key,不存在即創建,存在創建失敗 : 0
Process finished with exit code 0
6.Zset (有序集合)
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
public class JedisZSetTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128",6379);
jedis.select(8);
jedis.flushDB();
jedis.zadd("zset", 100, "aaa");
jedis.zadd("zset", 120, "bbb");
System.out.println(" 添加元素 : "+jedis.zadd("zset", 150, "ccc"));
System.out.println(" 查看元素,默認從小到大 : "+jedis.zrange("zset", 0, -1));
System.out.println(" 查看元素,從大到小排序 : "+jedis.zrevrange("zset", 0, -1));
System.out.println("Double.NEGATIVE_INFINITY == 負無窮 || Double.POSITIVE_INFINITY == 正無窮");
System.out.println(" 根據當前Zset的key顯示元素 [Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY]: "+jedis.zrangeByScore("zset", Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY));
System.out.println(" 根據當前Zset的key顯示元素 [Double.NEGATIVE_INFINITY, 120]: "+jedis.zrangeByScore("zset", Double.NEGATIVE_INFINITY, 120));
System.out.println("-------------------------------------------");
jedis.flushDB();
jedis.zadd("z",89,"sadasdad");
jedis.zadd("z",105,"qwqwqs");
jedis.zadd("z",100,"sdsad");
jedis.zadd("z",132,"cdcdc");
jedis.zadd("z",77,"erwrwerw");
System.out.println(jedis.zrange("z", 0, -1));
System.out.println(" 洗掉當前Zset的指定的值 : "+jedis.zrem("z", "qwqwqs"));
System.out.println(jedis.zrange("z", 0, -1));
System.out.println(" 當前Zset中元素的個數 : "+jedis.zcard("z"));
System.out.println(" 獲取當前Zset的key在某個區間內的個數 : "+jedis.zcount("z", 50, 100));
jedis.flushDB();
}
}
運行結果:
添加元素 : 1
查看元素,默認從小到大 : [aaa, bbb, ccc]
查看元素,從大到小排序 : [ccc, bbb, aaa]
Double.NEGATIVE_INFINITY == 負無窮 || Double.POSITIVE_INFINITY == 正無窮
根據當前Zset的key顯示元素 [Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY]: [aaa, bbb, ccc]
根據當前Zset的key顯示元素 [Double.NEGATIVE_INFINITY, 120]: [aaa, bbb]
-------------------------------------------
[erwrwerw, sadasdad, sdsad, qwqwqs, cdcdc]
洗掉當前Zset的指定的值 : 1
[erwrwerw, sadasdad, sdsad, cdcdc]
當前Zset中元素的個數 : 4
獲取當前Zset的key在某個區間內的個數 : 3
Process finished with exit code 0
7.geospatial
代碼示例:
package com.beyond;
import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoUnit;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.GeoRadiusParam;
import java.util.HashMap;
import java.util.Map;
public class JedisGeospatialTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(9);
jedis.flushDB();
System.out.println(" 添加單個地理位置的坐標 : "+jedis.geoadd("city", 108.93425, 34.23053, "xian"));
Map<String, GeoCoordinate> map = new HashMap<String, GeoCoordinate>();
map.put("shangluo", new GeoCoordinate(109.94107, 33.86273));
map.put("ankang", new GeoCoordinate(109.02697, 32.6955));
map.put("hanzhong", new GeoCoordinate(107.03194, 33.06784));
map.put("tongchuan", new GeoCoordinate(109.07593, 35.06914));
System.out.println(" 添加多個地理位置的坐標 : "+jedis.geoadd("city", map));
System.out.println(" 獲取單個地理位置的坐標 : "+jedis.geopos("city","shangluo"));
System.out.println(" 獲取多個地理位置的坐標 : "+jedis.geopos("city","xian", "hanzhong"));
System.out.println(" 計算兩個位置之間的距離 : "+jedis.geodist("city", "xian", "hanzhong"));
System.out.println(" 計算兩個位置之間的距離 : "+jedis.geodist("city", "ankang", "tongchuan"));
System.out.println("-----------------------------------------------");
System.out.println(" 以108.01 33.01為坐標 查詢直線距離300km的城市 : "+jedis.georadius("city", 108.01, 33.01, 300, GeoUnit.KM));
System.out.println(" 以108.01 33.01為坐標 查詢直線距離150km的城市 : "+jedis.georadius("city", 108.01, 33.01, 150, GeoUnit.KM));
System.out.println(" 查詢直線距離300km的城市,回傳結果添加經度緯度和直線距離 : "+jedis.georadius("city", 108.01, 33.01, 300, GeoUnit.KM,
GeoRadiusParam.geoRadiusParam().withDist().withCoord()));
System.out.println(" 查詢直線距離300km的城市,回傳結果添加經度緯度和直線距離,結果只匹配二個元素 : "+jedis.georadius("city", 108.01, 33.01, 300, GeoUnit.KM,
GeoRadiusParam.geoRadiusParam().withDist().withCoord().count(2)));
System.out.println(" 找出距離指定元素的指定距離內的其他元素 : "+jedis.georadiusByMember("city", "xian", 200, GeoUnit.KM));
System.out.println(" 找出距離指定元素的指定距離內的其他元素 : "+jedis.georadiusByMember("city", "hanzhong", 200, GeoUnit.KM));
System.out.println(" geohash 回傳一個或多個位置元素的 [Geohash] 表示 : "+jedis.geohash("city", "xian", "hanzhong"));
System.out.println("-----------------------------------------------");
System.out.println(" 獲取全部元素 : "+jedis.zrange("city", 0, -1));
System.out.println(" 洗掉指定元素 : "+jedis.zrem("city", "tongchuan"));
System.out.println(" 獲取全部元素 : "+jedis.zrange("city", 0, -1));
jedis.flushDB();
}
}
運行結果:
添加單個地理位置的坐標 : 1
添加多個地理位置的坐標 : 4
獲取單個地理位置的坐標 : [(109.9410679936409,33.862730262164945)]
獲取多個地理位置的坐標 : [(108.9342525601387,34.230530975990824), (107.03193873167038,33.067839171875086)]
計算兩個位置之間的距離 : 218504.7803
計算兩個位置之間的距離 : 264050.1287
-----------------------------------------------
以108.01 33.01為坐標 查詢直線距離300km的城市 : [redis.clients.jedis.GeoRadiusResponse@306a30c7, redis.clients.jedis.GeoRadiusResponse@b81eda8, redis.clients.jedis.GeoRadiusResponse@68de145, redis.clients.jedis.GeoRadiusResponse@27fa135a, redis.clients.jedis.GeoRadiusResponse@46f7f36a]
以108.01 33.01為坐標 查詢直線距離150km的城市 : [redis.clients.jedis.GeoRadiusResponse@421faab1, redis.clients.jedis.GeoRadiusResponse@2b71fc7e]
查詢直線距離300km的城市,回傳結果添加經度緯度和直線距離 : [redis.clients.jedis.GeoRadiusResponse@1a86f2f1, redis.clients.jedis.GeoRadiusResponse@3eb07fd3, redis.clients.jedis.GeoRadiusResponse@506c589e, redis.clients.jedis.GeoRadiusResponse@69d0a921, redis.clients.jedis.GeoRadiusResponse@446cdf90]
查詢直線距離300km的城市,回傳結果添加經度緯度和直線距離,結果只匹配二個元素 : [redis.clients.jedis.GeoRadiusResponse@799f7e29, redis.clients.jedis.GeoRadiusResponse@4b85612c]
找出距離指定元素的指定距離內的其他元素 : [redis.clients.jedis.GeoRadiusResponse@277050dc, redis.clients.jedis.GeoRadiusResponse@5c29bfd, redis.clients.jedis.GeoRadiusResponse@7aec35a, redis.clients.jedis.GeoRadiusResponse@67424e82]
找出距離指定元素的指定距離內的其他元素 : [redis.clients.jedis.GeoRadiusResponse@42110406, redis.clients.jedis.GeoRadiusResponse@531d72ca]
geohash 回傳一個或多個位置元素的 [Geohash] 表示 : [wqj6wz7x210, wmuh5ef60u0]
-----------------------------------------------
獲取全部元素 : [hanzhong, ankang, xian, shangluo, tongchuan]
洗掉指定元素 : 1
獲取全部元素 : [hanzhong, ankang, xian, shangluo]
Process finished with exit code 0
8.hyperloglog
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
/**
*redis-hyperloglog 基數統計的演算法 (0.81%錯誤率),Redis 在 2.8.9 版本添加了 HyperLogLog 結構;
* 優點:占用的記憶體是固定的,2^64 不同元素的基數,只占用12kb記憶體;
*/
public class JedisHyperloglogTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(10);
jedis.flushDB();
System.out.println(" 創建第一組元素 : "+jedis.pfadd("hylog", "a", "b", "c", "d"));
System.out.println(" 統計第一組元素數量 : "+jedis.pfcount("hylog"));
System.out.println(" 創建第二組元素 : "+jedis.pfadd("hylogTwo", "c", "d", "e", "f"));
System.out.println(" 統計第二組元素數量 : "+jedis.pfcount("hylogTwo"));
System.out.println(" 合并第一組和第二組資料 : "+jedis.pfmerge("key", "hylog", "hylogTwo"));
System.out.println(" 合并后key3的元素數量 : "+jedis.pfcount("key"));
}
}
運行結果:
創建第一組元素 : 1
統計第一組元素數量 : 4
創建第二組元素 : 1
統計第二組元素數量 : 4
合并第一組和第二組資料 : OK
合并后key3的元素數量 : 6
Process finished with exit code 0
9.bitmap
代碼示例:
package com.beyond;
import redis.clients.jedis.Jedis;
/**
* bitmaps 位圖,資料結構;都是操作二進制來進行記錄,只有0和1兩個狀態;
*/
public class JedisBitmapTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(11);
jedis.flushDB();
System.out.println("舉例: user為用戶 1,2,3,4,5,6,7 代表周一到周末 false-未打卡 true-打卡");
System.out.println(" 周一 : "+jedis.setbit("user", 1, true));
System.out.println(" 周二 : "+jedis.setbit("user", 2, true));
System.out.println(" 周三 : "+jedis.setbit("user", 3, true));
System.out.println(" 周四 : "+jedis.setbit("user", 4, true));
System.out.println(" 周五 : "+jedis.setbit("user", 5, true));
System.out.println(" 周六 : "+jedis.setbit("user", 6, false));
System.out.println(" 周日 : "+jedis.setbit("user", 7, false));
System.out.println("查看某一天是否有打卡");
System.out.println(" 查看周三 : "+jedis.getbit("user", 3));
System.out.println(" 查看周六 : "+jedis.getbit("user", 6));
System.out.println("統計打卡的天數");
System.out.println(+jedis.bitcount("user"));
jedis.flushDB();
}
}
運行結果:
舉例: user為用戶 1,2,3,4,5,6,7 代表周一到周末 false-未打卡 true-打卡
周一 : false
周二 : false
周三 : false
周四 : false
周五 : false
周六 : false
周日 : false
查看某一天是否有打卡
查看周三 : true
查看周六 : false
統計打卡的天數
5
Process finished with exit code 0
10.事務
reids事務是一個單獨的隔離操作、沒有隔離級別的概念、不保證原子性;對于事務的更多講解可以去看上一篇博客 Redis 事務 詳解 ,便于更好的理解 jedis 事務;
代碼示例:
// 正常演示
public class JedisMultiTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(12);
jedis.flushDB();
Transaction multi = jedis.multi(); //開啟事務
try {
multi.set("key", "value");
multi.mset("k1", "v1","k2","v2");
multi.exec();// 執行事務
}catch (Exception e){
multi.discard(); //放棄事務
e.printStackTrace();
}finally {
System.out.println(jedis.mget("k1", "k2"));
jedis.close();
}
jedis.flushDB();
}
}
//運行結果:
[v1, v2]
Process finished with exit code 0
-----------------------------------------------------------------------------------------
// 例外示例
public class JedisMultiTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.204.128", 6379);
jedis.select(12);
jedis.flushDB();
Transaction multi = jedis.multi(); //開啟事務
try {
multi.set("key", "value");
multi.mset("k1", "v1","k2","v2");
String a = null; a.equals("aaa"); // 代碼拋出例外,事務執行失敗!
multi.exec();// 執行事務
}catch (Exception e){
multi.discard(); //放棄事務
e.printStackTrace();
}finally {
System.out.println(jedis.mget("k1", "k2"));
jedis.close();
}
jedis.flushDB();
}
}
//運行結果:
java.lang.NullPointerException
at com.beyond.JedisMultiTest.main(JedisMultiTest.java:19)
[null, null]
Process finished with exit code 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290856.html
標籤:其他
