主頁 >  其他 > jedis的操作和使用

jedis的操作和使用

2021-07-30 07:24:05 其他

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

標籤:其他

上一篇:2021-07-28 關于軟體測驗從業人員的幾個誤解

下一篇:Idea插件篇:個個都是提上效率的小幫手

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more