Redis-Jedis

环境准备

  1. 创建一个maven项目

    创建项目

  2. 导入redis依赖

    1
    2
    3
    4
    5
    6
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
    </dependency>
  3. 启动redis

    启动

测试联通

使用jedis.ping():

1
2
3
4
5
6
7
/**
* 测试联通
*/
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println(jedis.ping());
}

结果:

测试联通

常用API

key(键)

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");
System.out.println(jedis.get("k2"));
Set<String> keys = jedis.keys("*");
System.out.println(keys.size());
}

结果

String(字符串)

Hash(哈希)

List(列表)

Set(集合)

Zset(sorted set:有序集合)

事务

正常执行

jedis.multi()

1
2
3
4
5
6
7
8
9
10
11
12
    public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1", 6379);
//开启事务
Transaction transaction = jedis.multi();
//入队
transaction.set("k4", "v4");
transaction.set("k5", "v5");
//执行事务
transaction.exec();
//取消事务
// transaction.discard();
}

加锁(watch有问题)

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
public class TestSW {

public boolean transMehtod(){
Jedis jedis = new Jedis("127.0.0.1", 6379);
int balance;//可用余额
int debt;//欠额
int amtToSubtract=10;//实刷额度

jedis.watch("balance");
balance = Integer.parseInt(jedis.get("balance"));
if (balance < amtToSubtract) {
jedis.unwatch();
System.out.println("失败");
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,然后检查余额是否足够,不足就取消标记,并不做扣减
* 足够的话,就启动事务进行更新操作
* 如果在此期间键banlace被其他人修改,那在提交事务(执行exec)时就会报错,
* 程序中通常可以捕获这类错误再重新执行一次,直到成功
*/
public static void main(String[] args) {
TestSW testSW = new TestSW();
boolean retValue = testSW.transMehtod();
System.out.println("main retValue.......:"+retValue);
}
}

正常执行

正常执行

主从复制

1
2
3
4
5
6
7
8
public static void main(String[] args) {
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("class", "1122");
String result = jedis_S.get("class");
System.out.println(result);
}

执行时内存过快,第一次可能得到null,这时需要重新执行一遍,才能得到正确的值

第一次执行

第二次执行之前将“class”设置为“1122vvv”,以便区分:

第二次执行

最后更新: 2020年07月18日 09:15

原始链接: http://ligangit.com/2020/07/17/Redis-Jedis/

× 请我吃糖~
打赏二维码