前言
本节内容主要是教大家如何在Java上使用Redis,这两者成功合体之后还有个专门的名词,叫Jedis。
主要都是一些API的使用啦,没啥难度,前面的内容只要掌握了,这个问题不大。话不多说,咱们就继续往下看吧~
Jedis所需要的jar包依赖
如下就是Redis和Java的中间jar包jedis-3.1.0.jar
啦~ 导入到pom.xml
即可。记得创建Maven项目哦。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
Jedis常用操作
测试连通性
package com.marco;
import redis.clients.jedis.Jedis;
public class TestRedisPing {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.144.141", 6379);
jedis.auth("123456");
// 设置密码 如果没有密码可以不设置
jedis.auth("123456");
// 调用 ping方法
String ping = jedis.ping();
// 输出PONG
System.out.println(ping);
jedis.close();
}
}
如果联通之后控制台上会显示PONG
(嗯… PING PONG,没毛病… )
Jedis常规操作
我这里归纳总结了Jedis的五种数据类型String、List、Hash、Set以及Zset的常规操作。
String数据类型
package com.marco;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class TestRedisCommon {
public static void main(String[] args) {
// 创建连接
Jedis jedis = new Jedis("192.168.144.141", 6379);
// 设置密码 如果没有密码可以不设置
jedis.auth("123456");
//获取当前所有的keys
Set<String> keys = jedis.keys("*");
for (String key : keys) {
System.out.print(key + " ");
}
System.out.println();//换行
System.out.println("###@#############String######################");
//测试是否存在key为name
System.out.println("jedis exists ======>" + jedis.exists("name"));
//查询过期时间
System.out.println("ttl======>" + jedis.ttl("name"));
//String追加操作
System.out.println("append======>" + jedis.append("name", " zheng"));
//单个设置key-value
jedis.set("language", "reids");
//多个设置key-value
jedis.mset("age","18","address","wuhan","hobby","guitar");
//关闭流资源
jedis.close();
}
}
Hash数据类型
public class TestRedisCommon {
public static void main(String[] args) {
// 创建连接
Jedis jedis = new Jedis("192.168.144.141", 6379);
// 设置密码 如果没有密码可以不设置
jedis.auth("123456");
System.out.println("###@#############Hash######################");
//设置单个hash的key-value
jedis.hset("user:1", "name","sunnie");
//设置多个hash的key-value
Map<String, String> map = new HashMap<String, String>();
map.put("age","18");
map.put("address","chongqin");
map.put("email","75452325@qq.com");
jedis.hmset("user:1", map);
//Hash遍历
List<String> hmget = jedis.hmget("user:1", "name", "email");
hmget.forEach(s -> System.out.println(s));
//删除hash对象中的key-value
Long hdel = jedis.hdel("user:1", "email");
System.out.println("del =======>" + (hdel > 0 ? "success":"failed"));
}
}
List数据类型
public class TestRedisCommon {
public static void main(String[] args) {
// 创建连接
Jedis jedis = new Jedis("192.168.144.141", 6379);
// 设置密码 如果没有密码可以不设置
jedis.auth("123456");
System.out.println("###@#############List######################");
//left-push
jedis.lpush("telephoneList", "13526542354","15423562541");
//right-push
jedis.rpush("telephoneList", "18726532354","13623562542");
//List遍历 (0 -1 遍历所有)
List<String> lrange = jedis.lrange("telephoneList", 0, -1);
lrange.forEach(s -> System.out.println(s));
//left-pop
System.out.println("left-pop=======>" + jedis.lpop("telephoneList"));
//right-pop
System.out.println("right-pop=======>" + jedis.rpop("telephoneList"));
//获取指定索引的值
System.out.println("index of 2" + jedis.lindex("telephoneList", 1));
}
}
Set数据类型
public class TestRedisCommon {
public static void main(String[] args) {
// 创建连接
Jedis jedis = new Jedis("192.168.144.141", 6379);
// 设置密码 如果没有密码可以不设置
jedis.auth("123456");
System.out.println("###@#############Set######################");
//Set添加值
jedis.sadd("members", "marco","sunnie","spiderman","ironman");
//Set遍历
Set<String> smembers = jedis.smembers("members");
smembers.forEach(s -> System.out.println(s));
//Set移除值
Long srem = jedis.srem("members", "ironman");
System.out.println("remove set-key ironman=====" + (srem > 0 ? "success":"failed"));
//获取set的长度
System.out.println(jedis.smembers("members").size());
}
}
ZSet数据类型
public class TestRedisCommon {
public static void main(String[] args) {
// 创建连接
Jedis jedis = new Jedis("192.168.144.141", 6379);
// 设置密码 如果没有密码可以不设置
jedis.auth("123456");
System.out.println("###@#############ZSet######################");
//ZSet单个添加值
jedis.zadd("orders", 60d, "OD123123");
//ZSet批量添加值
Map<String, Double> orders = new HashMap<String, Double>();
orders.put("OD412123", 70d);
orders.put("OD123124", 80d);
jedis.zadd("orders", orders);
//Set遍历
Set<String> sorders = jedis.zrange("orders", 0, -1);
sorders.forEach(s -> System.out.println(s));
}
}
主从复制
package com.marco;
import redis.clients.jedis.Jedis;
public class TestRedisMS {
public static void main(String[] args) throws InterruptedException {
Jedis jedis_master = new Jedis("192.168.144.141", 6380);
Jedis jedis_slave = new Jedis("192.168.144.141", 6381);
//设置"port=6381"为从机,"port=6381"为主机
jedis_slave.slaveof("192.168.144.141", 6380);
//往主机中设置值
jedis_master.set("author", "Salvatore Sanfilippo");
//线程休眠
Thread.sleep(500);
//测试从机中获取主机设置的值
System.out.println("Redis Author is " + jedis_slave.get("author"));
//关闭流资源
jedis_master.close();
jedis_slave.close();
}
}
以上代码测试结果为