当前位置: 首页 > news >正文

Redis ⑨-Jedis | Spring Redis

在这里插入图片描述

Jedis

通过 Jedis 可以连接 Redis 服务器。

通过 Maven 引入 Jedis 依赖。

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.2.0</version>
</dependency>

连接 Redis 服务器。

这里设置了 ssh 端口转发,将本地的 8888 端口转发到远程的 6379 端口。

还需修改 Redis 的配置文件:

  1. 将 bind 的地址改为 0.0.0.0
  2. 将 protected-mode 改为 no
public class RedisCon {public static void main(String[] args) {try (JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");Jedis jedis = jedisPool.getResource()) {String pong = jedis.ping(); // 测试连接System.out.println(pong);}}
}

通用命令

GET、SET

private static void getAndSet(Jedis jedis) {jedis.flushAll(); // TODO 清除所有键避免影响操作jedis.set("k1", "111");System.out.println(jedis.get("k1"));SetParams params = new SetParams(); // ? 设置额外参数params.ex(1);params.nx();jedis.set("k2", "222", params); // ? 相当于设置了 1s 过期时间和添加方式为 NX
//        Thread.sleep(2000);System.out.println(jedis.get("k2"));
}

输出:

111
222 | null

EXISTS、DEL

private static void existsAndDel(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");jedis.set("k2", "111");long trueExists = jedis.exists("k1", "k2"); // ? 这里的参数为变长参数System.out.println(trueExists);long successDel = jedis.del("k2", "k3");System.out.println(successDel);
}

输出:

2
1

KEYS

private static void keys(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");jedis.set("k2", "111");jedis.set("k3", "111");jedis.set("k4", "111");Set<String> keys = jedis.keys("*");System.out.println(keys);
}

输出:

[k1, k2, k3, k4]

EXPIRE、TTL

private static void expiresAndTTL(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");jedis.expire("k1", 10);long time = jedis.ttl("k1");System.out.println(time);
}

输出:

10

type

private static void type(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");System.out.println("type:" + jedis.type("k1"));jedis.lpush("k2", "111");System.out.println("type:" + jedis.type("k2"));jedis.hset("k3", "f1", "v1");System.out.println("type:" + jedis.type("k3"));jedis.sadd("k4", "111");System.out.println("type:" + jedis.type("k4"));jedis.zadd("k5", 30, "m1");System.out.println("type:" + jedis.type("k5"));
}

输出:

type:string
type:list
type:hash
type:set
type:zset

string 类型

MSET、MGET

private static void msetAndMget(Jedis jedis) {jedis.flushAll();jedis.mset("k1", "111", "k2", "222", "k3", "你好");List<String> mgetRes = jedis.mget("k1", "k2", "k3", "k4");System.out.println(mgetRes);
}

输出:

[111, 222, 你好, null]

SETRANGE、GETRANGE

private static void setrangeAndGetrange(Jedis jedis) {jedis.flushAll();jedis.set("k1", "hello world");String getrangeRes = jedis.getrange("k1", 6, 10);System.out.println(getrangeRes);jedis.setrange("k1", 6, "redis");System.out.println(jedis.getrange("k1", 0, -1));
}

输出:

world
hello redis

APPEND

private static void append(Jedis jedis) {jedis.flushAll();jedis.set("k1", "It's MyGO");long appendRes = jedis.append("k1", "!!!!!");System.out.println(appendRes);System.out.println(jedis.get("k1"));
}

输出:

10
It's MyGO!!!!!

INCR、DECR

private static void incrAndDecr(Jedis jedis) {jedis.flushAll();jedis.set("k1", "100");long incrRes = jedis.incr("k1");System.out.println(incrRes);jedis.set("k2", "100");long decrRes = jedis.decr("k2");System.out.println(decrRes);
}

输出:

101
99

list 类型

LPUSH、LRANGE

private static void lpushAndLrange(Jedis jedis) {jedis.flushAll();jedis.lpush("k1", "111", "222", "333");List<String> lrangeRes = jedis.lrange("k1", 0, -1);System.out.println(lrangeRes);
}

输出:

[333, 222, 111]

RPUSH

private static void rpush(Jedis jedis) {jedis.flushAll();jedis.rpush("k1", "111", "222", "333");List<String> lrangeRes = jedis.lrange("k1", 0, -1);System.out.println(lrangeRes);
}

输出:

[111, 222, 333]

LPOP、RPOP

private static void lpopAndRpop(Jedis jedis) {jedis.flushAll();jedis.rpush("k1", "111", "222", "333");String res = jedis.lpop("k1");System.out.println(res);res = jedis.lpop("k1");System.out.println(res);res = jedis.lpop("k1");System.out.println(res);res = jedis.lpop("k1");System.out.println(res);jedis.rpush("k1", "111", "222", "333");res = jedis.rpop("k1");System.out.println(res);res = jedis.rpop("k1");System.out.println(res);res = jedis.rpop("k1");System.out.println(res);res = jedis.rpop("k1");System.out.println(res);
}

输出:

333
222
111
null
333
222
111

BLPOP、LLEN

private static void blpopAndLlen(Jedis jedis) {jedis.flushAll();List<String> blpopRes = jedis.blpop(100, "k1");System.out.println("key:" + blpopRes.get(0));System.out.println("val:" + blpopRes.get(1));long len = jedis.llen("k1");System.out.println(len);
}

输出:

key:k1
val:111
2

set 类型

SADD、SMEMBERS、SCARD

private static void saddAndSmembersAndScard(Jedis jedis) {jedis.flushAll();jedis.sadd("k1", "111", "222", "333");Set<String> smembersRes = jedis.smembers("k1");System.out.println(smembersRes);long len = jedis.scard("k1");System.out.println(len);
}

输出:

[111, 222, 333]
3

SISMEMBER、SPOP

private static void sismemberAndSpop(Jedis jedis) {jedis.flushAll();jedis.sadd("k1", "111", "222", "333");boolean sismemberRes = jedis.sismember("k1", "111");System.out.println(sismemberRes);String spopRes = jedis.spop("k1");System.out.println(spopRes);spopRes = jedis.spop("k1");System.out.println(spopRes);spopRes = jedis.spop("k1");System.out.println(spopRes);spopRes = jedis.spop("k1");System.out.println(spopRes);
}

输出:

true
111
222
333
null

SINTER、SINNTERSTORE

private static void sinterAndSinterstore(Jedis jedis) {jedis.flushAll();jedis.sadd("k1", "111", "222", "333");jedis.sadd("k2", "111", "222", "444");Set<String> sinterRes = jedis.sinter("k1", "k2");System.out.println(sinterRes);jedis.sinterstore("k3","k1", "k2");Set<String> res = jedis.smembers("k3");System.out.println(res);
}

输出:

[111, 222]
[111, 222]

hash 类型

HSET、HGET

private static void hsetAndHget(Jedis jedis) {jedis.flushAll();jedis.hset("k1", "f1", "111");Map<String, String> fv = Map.of("f2", "222", "f3", "333");jedis.hset("k1", fv);String hgetRes = jedis.hget("k1", "f2");System.out.println(hgetRes);
}

输出:

222

HEXISTS、HDEL

private static void hexistsAndHdel(Jedis jedis) {jedis.flushAll();Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");jedis.hset("k1", fv);boolean hexistsRes = jedis.hexists("k1", "f1");System.out.println(hexistsRes);long hdelRes = jedis.hdel("k1", "f1", "f2", "f3", "f4");System.out.println(hdelRes);
}

输出:

true
3

HKEYS、HVALS

private static void hkeysAndHvals(Jedis jedis) {jedis.flushAll();Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");jedis.hset("k1", fv);Set<String> hkeysRes = jedis.hkeys("k1");System.out.println(hkeysRes);List<String> hvalsRes = jedis.hvals("k1");System.out.println(hvalsRes);
}

输出:

[f1, f2, f3]
[111, 222, 333]

HMSET、HMGET

private static void hmsetAndHmget(Jedis jedis) {jedis.flushAll();Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");jedis.hmset("k1", fv);List<String> hmgetRes = jedis.hmget("k1", "f1", "f2", "f3", "f4");System.out.println(hmgetRes);
}

输出:

[111, 222, 333, null]

Zset 类型

ZADD、ZRANGE

private static void zaddAndZrange(Jedis jedis) {jedis.flushAll();jedis.zadd("k1", 10.0, "zhangsan");Map<String, Double> ms = Map.of("lishi", 20.0, "wangwu", 30.0);jedis.zadd("k1", ms);List<String> zrangeRes = jedis.zrange("k1", 0, -1);System.out.println(zrangeRes);List<Tuple> membersWithScores = jedis.zrangeWithScores("k1", 0, -1);System.out.println(membersWithScores);System.out.println(membersWithScores.get(0).getElement());System.out.println(membersWithScores.get(0).getScore());
}

输出:

[zhangsan, lishi, wangwu]
[[zhangsan,10.0], [lishi,20.0], [wangwu,30.0]]
zhangsan
10.0

ZCARD、ZREM

private static void zcardAndZrem(Jedis jedis) {jedis.flushAll();Map<String, Double> ms = Map.of("zhangsan", 10.0, "lishi", 20.0, "wangwu", 30.0);jedis.zadd("k1", ms);long zcardRes = jedis.zcard("k1");System.out.println(zcardRes);long zremRes = jedis.zrem("k1", "zhangsan", "lishi", "zhaoliu");System.out.println(zremRes);
}

输出:

3
2

ZSCORE、ZRANK

private static void zscoreAndZrank(Jedis jedis) {jedis.flushAll();Map<String, Double> ms = Map.of("zhangsan", 10.0, "lishi", 20.0, "wangwu", 30.0);jedis.zadd("k1", ms);Double zscoreRes = jedis.zscore("k1", "zhangsan");System.out.println(zscoreRes);Long zrankRes = jedis.zrank("k1", "lishi");System.out.println(zrankRes);
}

输出:

10.0
1

Spring Boot 集成 Redis

在创建 spring-boot 项目时,选择 Redis 依赖。
在这里插入图片描述
在 application.yml 中配置 Redis 连接信息。

这里配置了端口转发,正常输入服务器的公网 IP 地址和 6379 端口即可。

spring:data:redis:port: 8888host: 127.0.0.1

string 类型

@RestController
public class StringController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/string")public String string() {// TODO 先清除数据库redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForValue().set("k1", "111");Map<String, String> kv = Map.of("k2", "222", "k3", "333");redisTemplate.opsForValue().multiSet(kv);return redisTemplate.opsForValue().get("k1");}
}

输出:

111

list 类型

@RestController
public class ListController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/list")public List<String> list() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForList().leftPush("k1", "111");redisTemplate.opsForList().leftPushAll("k1", "222", "333", "444");redisTemplate.opsForList().leftPop("k1");return redisTemplate.opsForList().range("k1", 0, -1);}
}

输出:

["333","222","111"
]

set 类型

@RestController
public class SetController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/set")public Set<String> set() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForSet().add("k1", "111", "222", "333", "444");Long size = redisTemplate.opsForSet().size("k1");System.out.println("size:" + size);Boolean isMember = redisTemplate.opsForSet().isMember("k1", "222");System.out.println("isMember:" + isMember);Long remove = redisTemplate.opsForSet().remove("k1", "444");System.out.println("remove:" + remove);return redisTemplate.opsForSet().members("k1");}
}

输出:

size:3
isMember:true
remove:1
["111","222","333"
]

hash 类型

@RestController
public class HashController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/hash")public Map<Object, Object> hash() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForHash().put("k1", "f1", "v1");Map<String, String> fv = Map.of("f2", "v2", "f3", "v3", "f4", "v4");redisTemplate.opsForHash().putAll("k1", fv);Long size = redisTemplate.opsForHash().size("k1");System.out.println("size:" + size);Boolean hasKey = redisTemplate.opsForHash().hasKey("k1", "f1");System.out.println("hasKey:" + hasKey);Long delete = redisTemplate.opsForHash().delete("k1", "f4");System.out.println("delete:" + delete);return redisTemplate.opsForHash().entries("k1");}
}

输出:

size:4
hasKey:true
delete:1
{"f1": "v1","f3": "v3","f2": "v2"
}

zset 类型

@RestController
public class ZsetController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/zset")public Set<ZSetOperations.TypedTuple<String>> zset() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForZSet().add("k1", "zhangsan", 10.0);redisTemplate.opsForZSet().add("k1", "lishi", 20.0);redisTemplate.opsForZSet().add("k1", "wangwu", 30.0);redisTemplate.opsForZSet().add("k1", "zhaoliu", 40.0);Long remove = redisTemplate.opsForZSet().remove("k1", "wangwu");System.out.println("remove:" + remove);Long rank = redisTemplate.opsForZSet().rank("k1", "lishi");System.out.println("rank:" + rank);Long size = redisTemplate.opsForZSet().size("k1");System.out.println("size:" + size);return redisTemplate.opsForZSet().rangeWithScores("k1", 0, -1);}
}

输出:

remove:1
rank:1
size:3
[lishi=20.0, zhangsan=10.0, zhaoliu=40.0]
[{"value": "zhangsan","score": 10.0},{"value": "lishi","score": 20.0},{"value": "zhaoliu","score": 40.0}
]

相关文章:

  • ROS2学习笔记|实现订阅消息并朗读的详细步骤
  • 5月3日日记
  • 【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means
  • 生成式 AI 的未来
  • DeepSeek-Prover-V2-671B:AI在数学定理证明领域的重大突破
  • 合成事件 vs 原生事件
  • LangChain与MCP:大模型时代的工具生态之争与协同未来
  • 栈系列一>基本计算器II
  • 安卓基础(悬浮窗分级菜单和弹窗)
  • CUDA输出“hello world”
  • 基于ArduinoIDE的任意型号单片机 + GPS北斗BDS卫星定位
  • Nginx发布Vue(ElementPlus),与.NETCore对接(腾讯云)
  • 职场中的性骚扰问题
  • 解决VMware虚拟机能搜索到网页但打不开的问题
  • mcp+llm+rag
  • Go小技巧易错点100例(二十七)
  • 数组去重方法
  • ROS2学习笔记|创建工作空间并打印文件内容
  • 2025年最新嵌入式开发STM32单片机详细教程(更新中)
  • Linux 进程间通信(IPC)详解
  • 陕南多地供水形势严峻:有的已呼吁启用自备水井
  • 印巴战火LIVE|巴基斯坦多地遭印度导弹袭击,巴总理称“有权作出适当回应”
  • 苏丹宣布与阿联酋断交
  • 繁荣活跃!“五一”假期全国重点零售和餐饮企业销售额同比增长6.3%
  • 媒体:南京秦淮区卫健委回应一医院涉嫌违规提供试管婴儿服务
  • 2025五一档电影票房破7亿