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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐