Redis JavaAPI、连接池、Cluster模式
IDEA用Java连接Redis
1、新建Redis的Maven项目,并导入相关依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.0.1</version>
</dependency>
2、使用Java代码连接Redis 6379
- 1、建立连接
- 2、测试连通性
- 3、关闭Redis
package com.liangzai;
import redis.clients.jedis.Jedis;
public class RedisDemo1 {
/*
通过java代码操作Redis
*/
public static void main(String[] args) {
//1、建立连接
Jedis jedis = new Jedis("master", 6379);
//2、测试连通性
System.out.println(jedis.ping());
//关闭Redis连接
jedis.close();
}
}
运行结果:
上面三个红色的是Maven依赖缺包,无需理会,并不影响代码的运行
用java代码使用Redis的set、get
package com.liangzai;
import redis.clients.jedis.Jedis;
public class RedisDemo1 {
/*
通过java代码操作Redis
*/
public static void main(String[] args) {
//1、建立连接
Jedis jedis = new Jedis("master", 6379);
//2、测试连通性
System.out.println(jedis.ping());
String setk4 = jedis.set("k4", String.valueOf(4));
System.out.println(setk4);
String getk4 = jedis.get("k4");
System.out.println(getk4);
//关闭Redis连接
jedis.close();
}
}
运行结果:
PONG
OK
4
在我们实际使用Java代码操作Redis的时候set的值是不用返回的
用java代码操作Redis的String增、删、改、查
首先加入JUnit依赖,方便我们用注解测试增、删、改、查的功能
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
</dependency>
package com.liangzai;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.args.BitOP;
public class RedisString {
Jedis jedis;
@Before
//会在执行@Test修饰的方法之前执行
//建立连接
public void init() {
jedis = new Jedis("master", 6379);
}
@Test
//增加一个String类型的value
public void set() {
jedis.set("j1", "v1");
jedis.set("j2", "v2");
jedis.set("j3", "v3");
}
@Test
//删除一个k-v
public void DEL() {
jedis.del("j1");
}
@Test
//根据k获取v
public void GET() {
System.out.println(jedis.get("j1"));
System.out.println(jedis.get("j2"));
System.out.println(jedis.get("j3"));
}
@Test
//创建一个位图
public void SETBIT() {
jedis.setbit("b1", 1, true);
jedis.setbit("b1", 3, true);
}
@Test
//获取位图
public void GETBIT() {
System.out.println("b1");
}
@Test
//位图的操作
public void BITOPT() {
jedis.bitop(BitOP.AND, "b3", "b1", "b2");
jedis.bitop(BitOP.OR, "b4", "b1", "b2");
jedis.bitop(BitOP.NOT, "b5", "b1");
jedis.bitop(BitOP.XOR, "b6", "b1", "b2");
System.out.println(jedis.get("b3"));
System.out.println(jedis.get("b4"));
System.out.println(jedis.get("b5"));
System.out.println(jedis.get("b6"));
}
@After
//表示@Test方法执行完成之后执行
public void closed() {
jedis.close();
}
}
每个方法上都有一个绿色的三角,点击即可测试当前方法
用java代码操作Redis的List增、删、改、查
package com.liangzai;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
public class RedisList {
Jedis jedis;
@Before
//会在执行@Test修饰的方法之前执行
public void init() {
jedis = new Jedis("master", 6379);
}
@Test
// 创建一个List
public void PUSH() {
jedis.lpush("list1", "1");
jedis.lpush("list1", "2");
jedis.rpush("list1", "3");
jedis.rpush("list1", "4");
jedis.rpush("list1", "5");
}
@Test
// 修改List中的元素
public void LSET() {
jedis.lset("list1", 4, "5.5");
}
@Test
// 获取List中的所有元素
public void LRANGE() {
List<String> l = jedis.lrange("list1", 0, -1);
for (String s : l) {
System.out.println(s);
}
}
}
用java代码操作Redis的Hash
package com.liangzai;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class RedisHash {
Jedis jedis;
@Before
// 会在执行@Test修饰的方法之前执行
public void init() {
jedis = new Jedis("master", 6379);
}
@Test
// 创建一个Hash散列
public void HSET() {
jedis.hset("hash1", "id", "1");
jedis.hset("hash1", "name", "张三");
jedis.hset("hash1", "age", "18");
jedis.hset("hash1", "gender", "男");
jedis.hset("hash1", "clazz", "文科四班");
}
@Test
// 获取Hash所有的key
public void HKEYS() {
Set<String> s = jedis.hkeys("hash1");
for (String s1 : s) {
System.out.println(s1);
}
}
@Test
// 获取Hash所有的Value
public void HVALS() {
List<String> l = jedis.hvals("hash1");
for (String s : l) {
System.out.println(s);
}
}
@Test
// 获取Hash所有的K-V
public void HGETALL() {
Map<String, String> m = jedis.hgetAll("hash1");
for (Map.Entry<String, String> kv : m.entrySet()) {
System.out.println(kv.getKey());
System.out.println(kv.getValue());
}
}
@Test
// 指定Field获取Value
public void HGET() {
System.out.println(jedis.hget("hash1", "name"));
}
@Test
// 根据Field删除Value
public void HDEL() {
jedis.hdel("hash1", "gender");
}
@Test
// 删除整个Hash散列
public void DEL() {
jedis.del("hash1");
}
@After
// 表示在@Test方法执行完成之后执行
public void closed() {
jedis.close();
}
}
用java代码操作Redis的Set
package com.liangzai;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Set;
public class RedisSet {
Jedis jedis;
@Before
// 会在执行@Test修饰的方法之前执行
public void init() {
jedis = new Jedis("master", 6379);
}
@Test
// 创建Set
public void SADD() {
jedis.sadd("s1", "1", "2", "2", "2", "3", "4", "5", "6");
jedis.sadd("s2", "5", "6", "7", "8", "9");
}
@Test
// 移除元素
public void SREM() {
jedis.srem("s1", "1");
jedis.srem("s1", "4");
}
@Test
// 弹出一个元素,位置不确定
public void SPOP() {
String s1 = jedis.spop("s1");
System.out.println(s1);
}
@Test
// 获取所有的元素
public void SMEMBERS() {
Set<String> s1 = jedis.smembers("s1");
for (String s : s1) {
System.out.println(s);
}
}
@Test
// 集合常见的操作
public void SETOP() {
// 交集
System.out.println(jedis.sinter("s1", "s2"));
// 并集
System.out.println(jedis.sunion("s1", "s2"));
// 差集
System.out.println(jedis.sdiff("s1", "s2"));
}
@After
// 表示在@Test方法执行完成之后执行
public void closed() {
jedis.close();
}
}
用java代码操作Redis的有序集合SortedSet
package com.liangzai;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.ZParams;
import redis.clients.jedis.resps.Tuple;
import java.util.Set;
public class RedisSortedSet {
Jedis jedis;
@Before
// 会在执行@Test修饰的方法之前执行
public void init() {
jedis = new Jedis("master", 6379);
}
@Test
// 创建一个有序集合
public void ZADD() {
// zs1 表示水果一月份的销量
jedis.zadd("zs1", 10, "西瓜");
jedis.zadd("zs1", 10, "西瓜");
jedis.zadd("zs1", 7, "香蕉");
jedis.zadd("zs1", 7, "香蕉");
jedis.zadd("zs1", 7, "香蕉");
jedis.zadd("zs1", 5, "芒果");
jedis.zadd("zs1", 5, "芒果");
jedis.zadd("zs1", 8, "草莓");
// zs2 表示水果二月份的销量
jedis.zadd("zs2", 9, "哈密瓜");
jedis.zadd("zs2", 6, "西瓜");
jedis.zadd("zs2", 8, "香蕉");
jedis.zadd("zs2", 3, "香蕉");
jedis.zadd("zs2", 5, "香蕉");
jedis.zadd("zs2", 6, "甘蔗");
jedis.zadd("zs2", 7, "芒果");
jedis.zadd("zs2", 8, "草莓");
}
@Test
// 查看水果的累计销量
public void TwoMonthSUM() {
Set<Tuple> s = jedis.zunionWithScores(new ZParams().aggregate(ZParams.Aggregate.SUM), "zs1", "zs2");
System.out.println(s);
}
@After
// 表示在@Test方法执行完成之后执行
public void closed() {
jedis.close();
}
}
用java代码操作Redis的去重HyperLogLog
package com.liangzai;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisHyperLogLog {
Jedis jedis;
@Before
// 会在执行@Test修饰的方法之前执行
public void init() {
jedis = new Jedis("master", 6379);
}
@Test
public void PFADD() {
jedis.pfadd("hll1", "1", "1", "2", "3", "4", "4", "5");
jedis.pfadd("hll2", "1", "3", "4", "7", "4", "8", "5");
}
@Test
// 求一组数据(可能重复)的基数
public void PFCOUNT() {
System.out.println(jedis.pfcount("hll1"));
System.out.println(jedis.pfcount("hll2"));
}
@Test
// 合并两个HyperLogLog
public void PFMERGE() {
jedis.pfmerge("hll3", "hll1", "hll2");
System.out.println(jedis.pfcount("hll3"));
}
@After
// 表示在@Test方法执行完成之后执行
public void closed() {
jedis.close();
}
}
用java代码操作Redis的连接池ConnectionPool
package com.liangzai;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisConnectionPool {
// Redis连接池
public static void main(String[] args) {
// 使用默认的配置创建Redis连接池
JedisPool jedisPool = new JedisPool("master", 6379);
// 从连接池中取出一个连接
Jedis jedis = jedisPool.getResource();
// 使用连接进行操作
System.out.println(jedis.lrange("list1", 0, -1));
// 关闭连接
jedis.close();
// 关闭连接池
jedisPool.close();
}
}
用java代码操作Redis的集群
用java代码操作Redis的集群ClusterConn
package com.liangzai;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import java.util.Map;
public class RedisClusterConn {
public static void main(String[] args) {
// 使用JedisCluster与集群进行通信建立连接
JedisCluster cluster = new JedisCluster(new HostAndPort("master", 6381));
cluster.set("cs1", "vv1");
System.out.println(cluster.get("cs1"));
cluster.hset("chs1", "f1", "v1");
cluster.hset("chs1", "f2", "v1");
cluster.hset("chs1", "f3", "v1");
Map<String, String> map = cluster.hgetAll("chs1");
for (Map.Entry<String, String> kv : map.entrySet()) {
System.out.println(kv.getKey());
System.out.println(kv.getValue());
}
cluster.close();
}
}
到底啦!靓仔的文章对你有帮助的话给波关注吧!╰(°▽°)╯