Spring的Redis客户端

如何在Spring中操作redis

在创建springboot项目的时候引入redis的依赖.

Spring的Redis客户端_第1张图片 

在配置文件里指定redis主机的地址和端口,此处我们配置了ssh隧道,所以连接的就是本机的8888端口.

Spring的Redis客户端_第2张图片

创建一个controller类,注入操作redis的对象.

Spring的Redis客户端_第3张图片

前面使用jedis,是通过jedis对象里的各种方法来操作redis的,此处的Spring则是通过StringRedisTemplate来操作redis.

最原始提供的操作redis的类是RedisTemplate.而StringRedisTemplate是RedisTemplate的子类,是专门用来处理文本数据的.

StringRedisTemplate提供的方法相对于之前jedis中的各种方法,还是存在较大差异的.和原生的命令不太一样.

Spring的Redis客户端_第4张图片

此处StringRedisTemplate把这些操作redis的方法,又按照数据类型的不同,分成了几个大类别,分门别类的来组织这些命令.相当于又做了进一步的封装,不像jedis那样能点出所有类型的方法.

在这里你要使用一个类型的命令,就必须点出专门操作此数据结构的对象来,然后在点,出现的方法就是具体的命令了.

RedisTemplate没有封装所有的redis命令,所以为了让我们能够执行redis的原生命令,提供了一个execute方法.

Spring的Redis客户端_第5张图片

相当于一个回调函数,在回调里写我们的redis命令,这个回调就会被RedisTemplate内部进行执行.

这里的RedisConnection就代表了redis连接,对标jedis对象.

Spring操作Redis命令演示

package com.example.demo;

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.Map;
import java.util.Set;

@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate redisTemplate;

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

        redisTemplate.execute((RedisConnection redisConnection)->{
            // execute 要求回调方法中必须写 return 语句. 返回个东西.
            // 这个回调返回的对象, 就会作为 execute 本身的返回值.
            redisConnection.flushAll();
            return null;
        });

        redisTemplate.opsForValue().set("key1","111");
        redisTemplate.opsForValue().set("key2","222");
        redisTemplate.opsForValue().set("key3","333");

        String value = redisTemplate.opsForValue().get("key1");
        System.out.println("value:"+value);
        String value2 = redisTemplate.opsForValue().get("key1");
        System.out.println("value2:"+value2);
        String value3 = redisTemplate.opsForValue().get("key1");
        System.out.println("value3:"+value3);
        return "OK";
    }

    @RequestMapping("/testHash")
    public String testHash(){
        redisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });
        redisTemplate.opsForHash().put("k1","f1","v1");
        redisTemplate.opsForHash().put("k1","f2","v2");
        redisTemplate.opsForHash().put("k1","f3","v3");
        Map getall =   redisTemplate.opsForHash().entries("k1");
        System.out.println(getall);
        return "ok";
    }

    @RequestMapping("/testList")
    public String testList(){
        redisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });
        redisTemplate.opsForList().leftPushAll("k1","111","222","333");
        String result =  redisTemplate.opsForList().rightPop("k1");
        System.out.println(result);
        return "ok";
    }

    @RequestMapping("/testSet")
    public String testSet(){
        redisTemplate.execute((RedisConnection redisConnection)->{
            redisConnection.flushAll();
            return null;
        });
        redisTemplate.opsForSet().add("k1","111","222","333");
        Set set =  redisTemplate.opsForSet().members("k1");
        Long length =  redisTemplate.opsForSet().size("k1");
        System.out.println("length:"+length);
        System.out.println(set);
        return "ok";
    }

    @RequestMapping("/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 members = redisTemplate.opsForZSet().range("key", 0, -1);
        System.out.println("members: " + members);

        Set> 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";
    }
}

你可能感兴趣的:(spring,redis,java)