在java中操作redis

Redis的客户端很多,官方推荐三种:(Jedis,lettuce,Redission)。spring data redis,在Spring Boot 项目中还提供了对应的Starter,即Spring-boot-starter-data-redis.
Jedis的maven坐标:

<dependency>
<groupld>redis.clients</groupld>
<artifactld>jedis</artifactld>
<version>2.8.0</version>
</dependency>

使用Jedis操作Redis的步骤:

  1. 获取连接
  2. 执行操作
  3. 关闭连接
public void testRedis(){
//1.获取连接
Jedis jedis = new Jedis("localhost",6379);
//2.执行具体的操作
jedis.set("username","xiaoming");
//关闭连接
jedis.close();
}

使用spring Data Redis

<dependency>
<groupld>org.springframework.boot</groupld>
<artifactld>spring-boot-starter-data-redis</artifactld>
</dependency>

Spring Data Redis中提供了一个高度封装的类: RedisTemplate,针对edis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:简单K-V操作
  • SetOperations: set类型数据操作
  • ZSetOperations: zset类型数据操作
  • HashOperations:针对map类型的数据操作
  • ListOperations:针对list类型的数据操作
    spring中添加配置:
spring:
application:
name: springRedis_demo
redis:
host: localhost
port: 6379
password:
database: 0 # 默认操作0号数据库
jedis:
pool:
max-active: 8 # 最大连接数
max-wait: 1ms # 连接池最大阻塞等待时间
max-idle: 4 # 连接池中最大空闲连接
min-idle: 0 # 连接池中最小空闲连接
  • ValueOperations:简单K-V操作 对String类型的操作
ValueOperations valueOperations = redisTemplate.opsForValue();
/*设置String类型的key值*/
valueOperations.set("city","beijing");
/*根据key获取值*/
String city = (String) valueOperations.get("city");
/*设置过期时间*/
valueOperations.set("key1","value1",10l, TimeUnit.SECONDS);
/*如果没有key则设置并返回true,有key不设置并返回false*/
Boolean aBoolean = valueOperations.setIfAbsent("city", "nanjing");
System.out.println(aBoolean);
  • HashOperations:针对map类型的数据操作
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
/*存数据*/
hashOperations.put("002","name","xiaoming");
hashOperations.put("002","age","20");
hashOperations.put("002","addr","beijing");
/*取数据*/
String age = (String) hashOperations.get("002", "age");
System.out.println(age);
/*获取hash结构中的所有字段*/
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
/*获取hash结构中的所有值*/
List values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
}
  • ListOperations:针对list类型的数据操作
/*操作List类型的数据*/
public void TestList(){
ListOperations listOperations = redisTemplate.opsForList();
//存值
listOperations.leftPush("mylist","a");
listOperations.leftPushAll("mylist","b","c","d");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String s : mylist) {
System.out.println(s);
}
/*获取列表长度*/
Long mylist2 = listOperations.size("mylist");
int lSize = mylist2.intValue();
for (int i = 0; i < lSize; i++) {
/*出队列*/
String mylist1 = (String) listOperations.rightPop("mylist");
System.out.println(mylist1);
}
}
  • SetOperations: set类型数据操作
/*操作set类型数据*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("mySet","a","b","c","a");
//取值
Set<String> mySet = setOperations.members("mySet");
for (String s : mySet) {
System.out.println(s);
}
//删除成员
setOperations.remove("myset","a","b");
//取值
mySet = setOperations.members("mySet");
for (String s : mySet) {
System.out.println(s);
}
}
  • ZSetOperations: zset类型数据操作
/*操作ZSET类型的数据*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
/*存值*/
zSetOperations.add("myZSet","a",10.0);
zSetOperations.add("myZSet","b",11.0);
zSetOperations.add("myZSet","c",12.0);
zSetOperations.add("myZSet","a",13.0);
/*取值*/
Set<String> myZset = zSetOperations.range("myZSet", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
/*修改分数*/
zSetOperations.incrementScore("myZSet","b",20);
/*取值*/
myZset = zSetOperations.range("myZSet", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
/*删除成员*/
zSetOperations.remove("myZSet","a","b");
/*取值*/
myZset = zSetOperations.range("myZSet", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
}
  • 通用操作
/*操作ZSET类型的数据*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
/*存值*/
zSetOperations.add("myZSet","a",10.0);
zSetOperations.add("myZSet","b",11.0);
zSetOperations.add("myZSet","c",12.0);
zSetOperations.add("myZSet","a",13.0);
/*取值*/
Set<String> myZset = zSetOperations.range("myZSet", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
/*修改分数*/
zSetOperations.incrementScore("myZSet","b",20);
/*取值*/
myZset = zSetOperations.range("myZSet", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
/*删除成员*/
zSetOperations.remove("myZSet","a","b");
/*取值*/
myZset = zSetOperations.range("myZSet", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
}
posted @   生活的样子就该是那样  阅读(331)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示