使用jedis操作redis常用方法

,在redis入门及在商城案例中的使用中简单介绍了下使用jedis如何操作redis,但是其实方法是跟redis的操作大部分是相对应的。

1、String类型操作
public class StringTest {

    Jedis jedis;
    @Before//该注解下的方法在@Test执行之前执行
    public void before(){
        //创建连接
        jedis = new Jedis("192.168.25.128",6379);
    }
    @After//该注解下的方法在@Test执行之后执行
    public void after(){
        //关闭连接
        jedis.close();
    }
    /*
     * 存储,获取,设置过期时间,key命令
     */
    @Test
    public void test() throws InterruptedException{
        //1.存储值
        jedis.set("name", "张三");
        //2.取值
        String name = jedis.get("name");
        System.out.println(name);
        //3.key命令:查看有效期,-1表示持久化,-2表示不存在
        Long t = jedis.ttl("name");
        System.out.println(t);
        System.out.println("-------------------");
        //4.key命令,对已经存在的key设置过期时间
        jedis.expire("name", 5);
        while(true){
            String name2 = jedis.get("name");
            System.out.println(name2);
            System.out.println("有效期为:"+jedis.ttl("name")+"秒");
            Thread.sleep(2000);
        }

    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
输出结果:
张三
-1
-------------------
张三
有效期为:5秒
张三
有效期为:3秒
张三
有效期为:1秒
null
有效期为:-2秒
1
2
3
4
5
6
7
8
9
10
11
12
    /*
     * 测试自增自减:前提,value值能解析为数字类型
     * 删除
     */
    @Test
    public void test2(){
        jedis.set("age", "18");
        String age1 = jedis.get("age");
        System.out.println("当前年龄:"+age1);

        Long age2 = jedis.decr("age");
        System.out.println("一年前年龄为:"+age2);

        Long age3 = jedis.incr("age");
        System.out.println("现在年龄又变回为:"+age3);

        //如果key不存在则忽略此操作
        Long del = jedis.del("age1");
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
输出结果:
当前年龄:18
一年前年龄为:17
现在年龄又变回为:18
1
2
3
4
    /*
     * 批量存储和获取
     */
    @Test
    public void test3(){
        jedis.mset("a1","mysql","a2","oracle","a3","sqlServer","a4",
                "redis","a5","mongodb","a6","hbase");
        List<String> list = jedis.mget("a1","a2","a3","a4","a5","a6");
        for (String s : list) {
            System.out.println(s);
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
输出结果:
mysql
oracle
sqlServer
redis
mongodb
hbase
1
2
3
4
5
6
7
    /*
     * 存储值的同时设置过期时间,判断key是否存在
     */
    @Test
    public void test4() throws InterruptedException{
        //jedis.setex(key, 过期时间, value)
        jedis.setex("life", 5, "享受美好");
        while(jedis.exists("life")){
            System.out.println(jedis.get("life"));
            Thread.sleep(2000);
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
输出结果:在输出三个“享受美好”之后便不再输出
享受美好
享受美好
享受美好
1
2
3
4
2、Hash类型操作
public class MapTest {

    Jedis jedis;
    @Before
    public void before(){
        jedis = new Jedis("192.168.25.128",6379);
    }
    @After
    public void after(){
        jedis.close();
    }

    @Test
    public void test1(){
        //1.存储值
        jedis.hset("student", "name", "小李");
        jedis.hset("student", "class", "小学生");
        jedis.hset("student", "age", "10");
        jedis.hset("student", "skill", "keng");
        //2.获取指定值  获取名字
        String name = jedis.hget("student", "name");
        System.out.println(name);
        System.out.println("----------------------");
        //3.获取存储的map
        Map<String, String> all = jedis.hgetAll("student");
        Set<Entry<String,String>> set = all.entrySet();
        Iterator<Entry<String, String>> iterator = set.iterator();
        while (iterator.hasNext()) {
            Entry<String, String> entry = iterator.next();
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+":"+value);
        }
        System.out.println("------------------------------");
        //4.获取map中全部key
        Set<String> keySet = jedis.hkeys("student");
        for (String key : keySet) {
            System.out.println(key);
        }
        System.out.println("-------------------------------");
        //5.获取map中全部values
        List<String> list = jedis.hvals("student");
        for (String value : list) {
            System.out.println(value);
        }
        System.out.println("------------------");
        //6.删除指定的值 删除map中class,name两对键值对
        Long long1 = jedis.hdel("student", "class","name");
        Set<String> set2 = jedis.hkeys("student");
        for (String key : set2) {
            System.out.println(key);
        }
        System.out.println("-------------------");
        //7.判断map是否存在
        Boolean e = jedis.hexists("student", "class");
        System.out.println("class是否存在:"+e);
        System.out.println("-----------------");
        //8.自增自减,可以指定增加减少的数值
        jedis.hincrBy("student", "age", 2);
        System.out.println(jedis.hget("student", "age"));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
输出结果:
小李
----------------------
skill:keng
name:小李
class:小学生
age:10
------------------------------
name
class
age
skill
-------------------------------
10
keng
小李
小学生
------------------
age
skill
-------------------
class是否存在:false
-----------------
2年后年龄为:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
String跟Hash是最常见的类型,在实习这段时间也都只用到这两种,所以我觉得不管怎样这两种至少应该掌握。

3、List类型操作
public class ListTest {
    Jedis jedis;
    @Before
    public void before(){
        jedis = new Jedis("192.168.25.128",6379);
    }
    @After
    public void after(){
        jedis.close();
    }

    @Test
    public void test(){
        //1.存储值(左边开始)。当成栈(子弹匣),先进先出,入栈
        jedis.lpush("scores", "100","90","80","70","60");
        //右边开始存
        jedis.rpush("scores", "50","40","30","20","10");
        //2.取值(左边开始),可以说是同时移除了该值,出栈
        String lv = jedis.lpop("scores");
        //右边开始取
        String rv= jedis.rpop("scores");
        System.out.println("左边取为:"+lv);
        System.out.println("右边取为:"+rv);
        System.out.println("--------------------");
        //3.取所有值(只有左边开始取)0 -1表示取所有位置,位置是[start,end]
        //redis命令行操作的时候已经演示过
        List<String> list = jedis.lrange("scores", 0, -1);
        for (String value : list) {
            System.out.println(value);
        }
        System.out.println("-----------");
        //4.插队,44插入到100后面,注:没有什么rinsert()方法
    jedis.linsert("scores",BinaryClient.LIST_POSITION    .AFTER, "100", "44");
        List<String> list2 = jedis.lrange("scores", 0, -1);
        for (String value : list2) {
            System.out.println(value);
        }
        List<String> list3 = jedis.lrange("scores", 0, 3);
        for (String value : list3) {
            System.out.println(value);
        }

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
输出结果:
左边取为:60
右边取为:10
--------------------
70
80
90
100
50
40
30
20
-----------
70
80
90
100
44
50
40
30
20
---------------
70
80
90
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
4、Set类型操作
public class JedisTest {
    Jedis jedis;
    @Before
    public void before(){
        jedis = new Jedis("192.168.25.128",6379);
    }
    @After
    public void after(){
        jedis.close();
    }
    /*
     * 测试添加,取值,移除,判断
     */
    @Test
    public void test1(){
        //1.存储
        jedis.sadd("names", "Tom","Jack","Harry","Lucy","laowang");
        //2.获取set中全部记录,取出来的跟存储的顺序不一样
        Set<String> members = jedis.smembers("names");
        for (String member : members) {
            System.out.println(member);
        }
        //3.移除指定数据
        jedis.srem("names","Tome","Jack");
        //4.判断某值是否为set中成员
        Boolean tom = jedis.sismember("names", "Tome");
        System.out.println("Tom在名单里吗:"+tom);
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
输出结果:
Jack
Harry
Lucy
Tom
laowang
Tom在名单里吗:false
1
2
3
4
5
6
7
/*
     * 差集,交集,并集
     */
    @Test
    public void test2(){
        jedis.sadd("set1", "a","b","c","d");
        jedis.sadd("set2", "b","c","d","e");
        //1.差集 set1中有set2中没有的
        Set<String> sdiff = jedis.sdiff("set1","set2");
        for (String d : sdiff) {
            System.out.println(d);
        }
        System.out.println("----------------");
        //2.交集
        Set<String> sinter = jedis.sinter("set1","set2");
        for (String in : sinter) {
            System.out.println(in);
        }
        System.out.println("----------------");
        //3.并集
        Set<String> sunion = jedis.sunion("set1","set2");
        for (String un : sunion) {
            System.out.println(un);
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
输出结果:
a
----------------
d
c
b
----------------
d
e
a
c
b
1
2
3
4
5
6
7
8
9
10
11
12
5、Zset(有序Set)类型操作
public class SortedSetTest {
    Jedis jedis;
    @Before
    public void before(){
        jedis = new Jedis("192.168.25.128",6379);
    }
    @After
    public void after(){
        jedis.close();
    }
    @Test
    public void test1(){
        //1.添加
        jedis.zadd("table", 1, "a");
        jedis.zadd("table", 3, "b");
        jedis.zadd("table", 2, "c");
        jedis.zadd("table", 5, "d");
        jedis.zadd("table", 4, "e");
        //2.取值 0 -1表示取所有,可以自己指定开始结束位置,跟list一样
        //默认根据分数由低到高排
        Set<String> table = jedis.zrange("table", 0, -1);
        for (String t : table) {
            System.out.println(t);
        }
        System.out.println("-----------------");
        //3.排序,由高到低排
        Set<String> table2 = jedis.zrevrange("table", 0, -1);
        for (String t : table2) {
            System.out.println(t);
        }
        System.out.println("-----------------");
        //4.修改某个值的分数
        jedis.zincrby("table", 7, "a");
        Set<String> table3 = jedis.zrevrange("table", 0, -1);
        for (String t : table3) {
            System.out.println(t);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
输出结果:
a
c
b
e
d
-----------------
d
e
b
c
a
-----------------
a
d
e
b
c
--------------------- 
作者:成都往右 
来源:CSDN 
原文:https://blog.csdn.net/qq_37334135/article/details/76593479 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值