通过 Spring 操作 Redis

发布于:2024-05-23 ⋅ 阅读:(99) ⋅ 点赞:(0)

要想通过 Java 操作 redis,首先要连接上 redis 服务器推荐看通过 Java 操作 redis -- 连接 redis

创建项⽬

        勾选 NoSQL 中的 Spring Data Redis 

        当然, 把 Web 中的 Spring Web 也勾选⼀下.⽅便写接进⾏后续测试.

配置 redis 服务地址

        在 application.properties 配置文件中配置参数:

#redis 服务器的地址
spring.redis.host=127.0.0.1
#redis 服务器的端口号
spring.redis.port=8888

        至于为什么是这里配置的 redis 端口是本地的 8888 端口,相信看了本文章头部推荐的博客以后就很清楚了,我们用 shh 的端口转发,将服务器上 redis 的 6379 端口映射到了本地的 8888 端口

 测试代码

package com.example.redisspringdemo.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2024-05-21
 * Time: 18:03
 */
@RestController
@RequestMapping("/RedisDemoController")
public class RedisDemoController {
    //从 spring 的 IOC 容器中获取 stringRedisTemplate 对象
    @Autowired
    //在 Spring 中通过 StringRedisTemplate 类的对象来操作 Redis
    //  在 Spring 中操作 Redis 最原始的类是 RedisTemplate,StringRedisTemplate 是它的子类
    //专门用于处理文本数据,还有一个类专门用于处理二进制数据
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 操作 Redis 中 String 类型的键值对
     * */
    @RequestMapping("/stringDemo")
    public String stringDemo(){
        //  清空 Redis 中已有的键值对避免对最终结果造成影响
        //  但 Spring 中并没有封装 flushAll 等操作,那怎么办呢?
        //RedisTemplate 留了一个后手,能够让我们执行 Jedis 原生命令
        //  这里的 RedisConnection 就代表了 Redis 连接,对标 Jedis 对象
        //通过 RedisConnection 对象就可以执行 Jedis 对象中的方法
        stringRedisTemplate.execute((RedisConnection redisConnection)->{
            //清空 redis 中的数据
            redisConnection.flushAll();
            return null;
        });

        //stringRedisTemplate.opsForValue() 得到一个专门操作 String 类型的对象
        //调用 set 方法设置键值对
        stringRedisTemplate.opsForValue().set("key1","111");
        stringRedisTemplate.opsForValue().set("key2","222");
        stringRedisTemplate.opsForValue().set("key3","333");

        //通过 get 方法通过 key 获取 value
        String key1=stringRedisTemplate.opsForValue().get("key1");
        String key2=stringRedisTemplate.opsForValue().get("key2");

        System.out.println("key1:"+key1);
        System.out.println("key2:"+key2);
        return "ok";
    }

    /**
     * 操作 Redis 中 List 类型的键值对
     * */
    @RequestMapping("/listDemo")
    public String listDemo(){
        stringRedisTemplate.execute((RedisConnection redisConnection)->{
            //清空 redis 中的数据
            redisConnection.flushAll();
            return null;
        });

        // stringRedisTemplate.opsForList() 得到一个专门操作 List 类型的对象
        // leftPush() 向列表的左边插入数据
        stringRedisTemplate.opsForList().leftPush("key","1");
        //leftPushAll()向列表的左边插入多条数据
        stringRedisTemplate.opsForList().leftPushAll("key","2","3","4");

        //range() 获取指定范围内的数据
        List<String> key=stringRedisTemplate.opsForList().range("key",0,-1);

        System.out.println(key);
        return "ok";
    }
    /**
     * 操作 Redis 中 set 类型的键值对
     * */
    @RequestMapping("/setDemo")
    public String setDemo(){
        stringRedisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });

        // stringRedisTemplate.opsForSet() 得到一个专门操作 Set 类型的对象
        //向集合中添加数据
        stringRedisTemplate.opsForSet().add("key","zhangsan","lisi","wangwu");

        //获取集合中的所有数据
        Set<String> key=stringRedisTemplate.opsForSet().members("key");
        System.out.println(key);

        //判断集合中 zhangsan 是否存在
        Boolean result1=stringRedisTemplate.opsForSet().isMember("key","zhangsan");
        System.out.println(result1);

        //获取集合中的元素个数
        Long count=stringRedisTemplate.opsForSet().size("key");
        System.out.println(count);

        stringRedisTemplate.opsForSet().remove("key","zhangsan","lisi");
        key=stringRedisTemplate.opsForSet().members("key");
        System.out.println(key);

        return "ok";
    }

    @RequestMapping("/hashDemo")
    public String hashDemo(){
        stringRedisTemplate.execute((RedisConnection redisConnection)->{
           redisConnection.flushAll();
           return null;
        });

        // stringRedisTemplate.opsForHash() 得到一个专门操作 Hash 类型的对象
        //向哈希表中添加数据
        stringRedisTemplate.opsForHash().put("key","f1","111");
        stringRedisTemplate.opsForHash().put("key","f2","222");
        stringRedisTemplate.opsForHash().put("key","f3","333");

        //获取 hash 表中的数据
        String f1=(String) stringRedisTemplate.opsForHash().get("key","f1");
        System.out.println(f1);

        //判断哈希表中的某个键值对是否存在
        Boolean exists=stringRedisTemplate.opsForHash().hasKey("key","f1");
        System.out.println(exists);

        //删除哈希表中的键值对
        stringRedisTemplate.opsForHash().delete("key","f1","f2");

        //获取哈希表中的元素个数
        Long count=stringRedisTemplate.opsForHash().size("key");
        System.out.println(count);

        return "ok";
    }

    @RequestMapping("/zsetDemo")
    public String zsetDemo(){
        //清空 redis 中的数据
        stringRedisTemplate.execute((RedisConnection redisConnection)->{
           redisConnection.flushAll();
           return null;
        });

        // stringRedisTemplate.opsForZSet() 得到一个专门操作 ZSet 类型的对象
        //添加数据到有序集合中
        stringRedisTemplate.opsForZSet().add("key","zhangsan",10);
        stringRedisTemplate.opsForZSet().add("key","lisi",20);
        stringRedisTemplate.opsForZSet().add("key","wangwu",30);

        //获取有序集合中指定范围的元素
        Set<String> members=stringRedisTemplate.opsForZSet().range("key",0,-1);
        System.out.println(members);

        //获取有序集合指定范围内的元素和分数
        Set<ZSetOperations.TypedTuple<String>> membersAndScore=stringRedisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println(membersAndScore);

        //获取有序集合中指定元素的分数
        Double score=stringRedisTemplate.opsForZSet().score("key","zhangsan");
        System.out.println(score);

        //删除有序集合中指定的元素
        stringRedisTemplate.opsForZSet().remove("key","zhangsan","lisi");

        //获取有序集合中的元素个数
        Long count=stringRedisTemplate.opsForZSet().size("key");
        System.out.println(count);

        //获取有序集合中指定元素的排名
        Long rank=stringRedisTemplate.opsForZSet().rank("key","wangwu");
        System.out.println(rank);

        return "ok";
    }

}


网站公告

今日签到

点亮在社区的每一天
去签到