Java中操作Redis

目录

一、在java中操作Redis

1、Redis的Java客户端

Redis 的 Java 客户端很多,常用的几种:

Jedis

Lettuce

Spring Data Redis

Spring Data RedisSpring 的一部分,对 Redis 底层开发包进行了高度封装。

Spring 项目中,可以使用Spring Data Redis来简化操作。

2、Spring Data Redis使用方式

操作步骤:

1、导入Spring Data Redis 的maven坐标

2、配置Redis数据源

3、编写配置类,创建RedisTemplate对象

4、通过RedisTemplate对象操作Redis

Spring Data Redis的maven坐标如下:

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

配置Redis数据源:

redis数据库与mysql数据库需要同级进行配置,两种数据库互不干扰。

xml 复制代码
  redis:
    port: 6379
    host: localhost
    database: 0
    password:

编写配置类,创建RedisTemplate对象:

java 复制代码
@Configuration
@Slf4j
public class RedisTemplateConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建RedisTemplate对象");
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

通过RedisTemplate对象操作Redis

java 复制代码
package com.sky;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
public class RedisTemplateTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void testRedis(){
        System.out.println(redisTemplate);
    }
}

二、Spring Data Redis使用方式

RedisTemplate 针对大量api进行了归类封装,将同一数据类型的操作封装为对应的Operation接口,具体分类如下:

ValueOperations:string数据操作

SetOperations:set类型数据操作

ZSetOperations:zset类型数据操作

HashOperations:hash类型的数据操作

ListOperations:list类型的数据操作

1、ValueOperations使用

java 复制代码
    @Test
    public void testRedis(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("hello","world");
        valueOperations.set("hello1","world1", 60, TimeUnit.MINUTES);
        String o =(String) valueOperations.get("hello");
        System.out.println(o);
        valueOperations.setIfAbsent("hello2","world2");
    }

ValueOperations valueOperations = redisTemplate.opsForValue();获得redis操作string数据类型的对象。

java 复制代码
valueOperations.set("hello","world"); 对应 redis中的set方法和setex方法
java 复制代码
 String o =(String) valueOperations.get("hello"); 对应redis中的get方法
java 复制代码
valueOperations.setIfAbsent("hello2","world2"); 对应redis中的setnx方法

2、SetOperations使用

java 复制代码
    @Test
    public void testRedis2(){
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set1","1","2","3","4");
        Set set1 = setOperations.members("set1");
        setOperations.remove("set1","1");
        Long set11 = setOperations.size("set1");
        System.out.println(set1);
        setOperations.add("set2","4","5","6","7");
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
    }

SetOperations setOperations = redisTemplate.opsForSet();获取redis操作集合的对象。
setOperations.add("set1","1","2","3","4"); 对应 sadd key value1 value2
Set set1 = setOperations.members("set1");获取集合中所有的元素对应smembers key
Long set11 = setOperations.size("set1");获取集合的大小与scard key对应
Set intersect = setOperations.intersect("set1", "set2");获取集合之间的交集与sinter key1 key2
Set union = setOperations.union("set1", "set2");获取集合之间的并集与sunion key1 key2对应
setOperations.remove("set1","1");删除集合中的某一个数值与srem key value对应

3、ZSetOperations使用

css 复制代码
    @Test
    public void testRedis3(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset1","1",1);
        zSetOperations.add("zset1","2",2);
        zSetOperations.add("zset1","3",3);
        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);
        zSetOperations.remove("zset1","1");
        zSetOperations.incrementScore("zset1","2",4);
    }

ZSetOperations zSetOperations = redisTemplate.opsForZSet();获取redis操作有序集合的对象。
zSetOperations.add("zset1","1",1);有序集合添加数值以及分数与zadd key score value对应。
Set zset1 = zSetOperations.range("zset1", 0, -1);获取有序集合中的数值,与zrange key start end
zSetOperations.remove("zset1","1"); 有序数组删除操作,与zrem key value对应
zSetOperations.incrementScore("zset1","2",4);为有序数组中某个值添加分数,与zincreby key score value对应。

4、HashOperations使用

java 复制代码
    @Test
    public void testRedis4(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("hash1","name","zhangsan");
        hashOperations.put("hash1","age",18);
        String o = (String)hashOperations.get("hash1", "name");
        Long hash1 = hashOperations.size("hash1");
        System.out.println(o);
        hashOperations.delete("hash1","name");
        hashOperations.keys("hash1");
        hashOperations.values("hash1");
    }

HashOperations hashOperations = redisTemplate.opsForHash();是获取redis操作哈希的对象。
hashOperations.put("hash1","name","zhangsan");添加哈希值与hset key filed value对应

String o = (String)hashOperations.get("hash1", "name");获取哈希中的值与hget key filed对应
hashOperations.delete("hash1","name");删除哈希中对应的值与hdel key filed对应
hashOperations.keys("hash1");获取哈希中所有的键与hkeys key对应
hashOperations.values("hash1");获取哈希中所有的值与hvals key对应

5、ListOperations使用

java 复制代码
    @Test
    public void testRedis5(){
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPush("list1","1");
        listOperations.leftPush("list1","2");
        listOperations.leftPush("list1","3");
        listOperations.rightPop("list1");
        List list1 = listOperations.range("list1", 0, -1);
        System.out.println(list1);
        listOperations.remove("list1",1,"2");
        listOperations.leftPush("list1","4");
        Long list11 = listOperations.size("list1");
        System.out.println(list11);
    }

ListOperations listOperations = redisTemplate.opsForList();获取redis操作list列表的对象。
listOperations.leftPush("list1","1");添加列表值与 lpush key value对应。
listOperations.rightPop("list1");删除第一个添加的值与rpop key
Long list11 = listOperations.size("list1");获取列表的大小与llen key对应

相关推荐
咩咩啃树皮8 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
灯澜忆梦8 小时前
GO_并发编程---定时器
开发语言·后端·golang
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
-银雾鸢尾-8 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-9 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415912 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化