通过Spring操作Redis

前置工作

引入依赖

配置端口

复制代码
spring:
  redis:
    host: 127.0.0.1
    port: 8888

使用StringRedisTemplate

java 复制代码
@Autowired
private StringRedisTemplate redisTemplate;

Spring通过StringRedisTemplate操作redis

StringRedisTemplate是RedisTemplate的子类,专门用来处理文本数据

相比于jedis来说,RedisTemplate根据类型分类,做了更进一步的封装,如下图所示:

而redis的全局命令并没有进行封装,需要通过execute回调方法执行。

java 复制代码
redisTemplate.execute( (RedisConnection connection) -> {
    connection.flushAll();
    return null;
});


五种数据类型的操作

java 复制代码
@RestController
public class Controller {
    /*
    Spring通过StringRedisTemplate操作redis
    StringRedisTemplate是RedisTemplate的子类,专门用来处理文本数据
    相比于jedis来说,RedisTemplate根据类型分类,做了更进一步的封装
     */
    @Autowired
    private StringRedisTemplate redisTemplate;

    @GetMapping("/testString")
    public String testString() {

        redisTemplate.execute( (RedisConnection connection) -> {
            connection.flushAll();
            //execute要求回调方法中需要写return语句,
            //返回的对象,会作为execute本身的返回值
            return null;
        });
        redisTemplate.opsForValue().set("key", "111");
        redisTemplate.opsForValue().set("key2", "222");
        redisTemplate.opsForValue().set("key3", "333");

        String value = redisTemplate.opsForValue().get("key");
        System.out.println("value:" + value);
        return "ok";
    }

    @GetMapping("/testList")
    public String testList() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForList().leftPush("key", "111");
        redisTemplate.opsForList().leftPushAll("key", "222", "333");

        String value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value:" + value);
        value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value:" + value);
        value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value:" + value);
        return "ok";
    }

    @GetMapping("/testSet")
    public String testSet() {
        redisTemplate.execute((RedisConnection connection)-> {
            connection.flushAll();
            return null;
        });

        redisTemplate.opsForSet().add("key", "111", "222", "333");
        Set<String> result = redisTemplate.opsForSet().members("key");
        System.out.println("result:" + result);

        Boolean exists = redisTemplate.opsForSet().isMember("key", "222");
        System.out.println("exists:" + exists);

        Long count = redisTemplate.opsForSet().size("key");
        System.out.println("count:" + count);

        redisTemplate.opsForSet().remove("key", "111", "222");
        result = redisTemplate.opsForSet().members("key");
        System.out.println("result:" + result);
        return "ok";
    }

    @GetMapping("/testHash")
    public String testHash() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        redisTemplate.opsForHash().put("key", "f1", "111");
        Map<String, String> fields = new HashMap<>();
        fields.put("f2", "222");
        fields.put("f3", "333");
        redisTemplate.opsForHash().putAll("key", fields);

        String value = (String) redisTemplate.opsForHash().get("key", "f1");
        System.out.println("value:" + value);

        Boolean exists = redisTemplate.opsForHash().hasKey("key", "f1");
        System.out.println("exists: " + exists);

        redisTemplate.opsForHash().delete("key", "f1", "f2");

        Long size = redisTemplate.opsForHash().size("key");
        System.out.println("size: " + size);
        return "ok";
    }

    @GetMapping("/testZSet")
    public String testZSet() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
           return null;
        });

        redisTemplate.opsForZSet().add("key", "zhangsan", 10);
        redisTemplate.opsForZSet().add("key", "lisi", 20);
        redisTemplate.opsForZSet().add("key", "wangwu", 30);

        Set<String> members = redisTemplate.opsForZSet().range("key", 0, -1);
        System.out.println("members:" + members);


        Set<ZSetOperations.TypedTuple<String>> membersWithScore =
                redisTemplate.opsForZSet().rangeWithScores("key", 0, -1);
        System.out.println("membersWithScore: " + membersWithScore);

        Double score = redisTemplate.opsForZSet().score("key", "zhangsan");
        System.out.println("score:" + score);

        redisTemplate.opsForZSet().remove("key", "zhangsan");

        Long size = redisTemplate.opsForZSet().size("key");
        System.out.println("size:" + size);

        Long rank = redisTemplate.opsForZSet().rank("key", "lisi");
        System.out.println("rank:" + rank);
        return "ok";
    }
    
}
相关推荐
皮皮林5518 小时前
使用 Java + WebSocket 实现简单实时双人协同 pk 答题
java·websocket
码小凡10 小时前
优雅!用了这两款插件,我成了整个公司代码写得最规范的码农
java·后端
掉鱼的猫11 小时前
Solon AI 五步构建 RAG 服务:2025 最新 AI + 向量数据库实战
java·redis·后端
java金融12 小时前
FactoryBean 和BeanFactory的傻傻的总是分不清?
java·后端
独立开阀者_FwtCoder12 小时前
Nginx 通过匹配 Cookie 将请求定向到特定服务器
java·vue.js·后端
名曰大神12 小时前
AEM6.5集成Redis详细步骤(附代码)
java·redis·demo·aem
带刺的坐椅12 小时前
Solon AI 五步构建 RAG 服务:2025 最新 AI + 向量数据库实战
java·redis·ai·solon·rag
东阳马生架构13 小时前
商品中心—7.自研缓存框架的技术文档
java
晴空月明15 小时前
线程安全与锁机制深度解析
java
天天摸鱼的java工程师16 小时前
你如何处理一个高并发接口的线程安全问题?说说你做过的优化措施
java·后端