一、Redis工程

目标:抽取项目中所有的Redis操作

1. 依赖

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.12</version>
  5. <scope>test</scope>
  6. </dependency>
  7. <!--redis starter-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-data-redis</artifactId>
  11. </dependency>
  12. <!--springboot 测试-->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-test</artifactId>
  16. <scope>test</scope>
  17. </dependency>
  18. <!--作为客户端访问 eureka注册中心 -->
  19. <dependency>
  20. <groupId>org.springframework.cloud</groupId>
  21. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  22. </dependency>
  23. <!--对外暴漏服务-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-web</artifactId>
  27. </dependency>
  28. <!--为了能使用到工具类-->
  29. <dependency>
  30. <groupId>com.yixuexi</groupId>
  31. <artifactId>atcrowdfunding05-common-util</artifactId>
  32. <version>1.0-SNAPSHOT</version>
  33. </dependency>
  34. <!--为了能使用到实体类-->
  35. <dependency>
  36. <groupId>com.yixuexi</groupId>
  37. <artifactId>atcrowdfunding09_member_entity</artifactId>
  38. <version>1.0-SNAPSHOT</version>
  39. </dependency>

2. yaml配置文件

spring:
  redis:
    host: 192.168.10.10
  application:
    name: yixuexi-crowd-redis
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1000/eureka/
server:
  port: 3000

3. 启动类

/**
 * @date: 2021/3/12   23:24
 * @author: 易学习
 */
@SpringBootApplication
public class CrowdMainClass {
    public static void main(String[] args) {
        SpringApplication.run(CrowdMainClass.class,args);
    }
}

4. 测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CrowdMainClass.class)
public class RedisTest {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Test
    public void test(){
        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name","zhangsan");
    }
}

二、暴露接口 创建接口

1.api工程依赖

<!--声明时远程调用-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<dependency>
  <groupId>com.yixuexi</groupId>
  <artifactId>atcrowdfunding05-common-util</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>com.yixuexi</groupId>
  <artifactId>atcrowdfunding09_member_entity</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

2. 创建Redis远程调用接口

未命名图片.png

/**
 * @date: 2021/3/12   23:53
 * @author: 易学习
 */
@FeignClient("yixuexi-crowd-redis")
public interface RedisRemoteService {

    /**
     * 设置key 和 vlaue
     * @param key 键
     * @param value 值
     * @return
     */
    @RequestMapping("/set/redis/key/value")
    public ResultEntity<String> setRedisKeyValueRemote(
            @RequestParam("key") String key,
            @RequestParam("value") String value
            );

    /**
     * 设置 key 和value 带时间
     * @param key 键
     * @param value 值
     * @param time 时间
     * @param timeUnit 时间单位
     * @return
     */
    @RequestMapping("set/redis/key/value/with/time/out")
    public ResultEntity<String> setRedisKeyValueWithTimeOut(
            @RequestParam("key") String key,
            @RequestParam("value") String value,
            @RequestParam("time") long time,
            @RequestParam("timeUnit")TimeUnit timeUnit
            );

    /**
     * 通过key 删除
     * @param key 键
     * @return
     */
    @RequestMapping("remove/redis/value/by/key/remote")
    public ResultEntity<String> removeRedisValueByKeyRemote(
            @RequestParam("key") String key);

    /**
     * 通过key 得到value
     * @param key 键
     * @return
     */
    @RequestMapping("get/redis/value/by/key/remote")
    public ResultEntity<String> getRedisValueByKeyRemote(
            @RequestParam("key")String key);
}

3. redis工程对其进行实现

@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /**
     * 设置key 和 vlaue
     * @param key 键
     * @param value 值
     * @return
     */
    @RequestMapping("/set/redis/key/value")
    public ResultEntity<String> setRedisKeyValueRemote(
            @RequestParam("key") String key,
            @RequestParam("value") String value
    ){
        ValueOperations<String, String> valueOperations =
                stringRedisTemplate.opsForValue();

        valueOperations.set(key, value);
        return ResultEntity.successWithoutData();
    }

    /**
     * 设置 key 和value 带时间
     * @param key 键
     * @param value 值
     * @param time 时间
     * @param timeUnit 时间单位
     * @return
     */
    @RequestMapping("set/redis/key/value/with/time/out")
    public ResultEntity<String> setRedisKeyValueWithTimeOut(
            @RequestParam("key") String key,
            @RequestParam("value") String value,
            @RequestParam("time") long time,
            @RequestParam("timeUnit") TimeUnit timeUnit
    ){
        ValueOperations<String, String> valueOperations =
                stringRedisTemplate.opsForValue();

        valueOperations.set(key, value,time, timeUnit);
        return ResultEntity.successWithoutData();
    }


    /**
     * 通过key 删除
     * @param key 键
     * @return
     */
    @RequestMapping("remove/redis/value/by/key/remote")
    public ResultEntity<String> removeRedisValueByKeyRemote(
            @RequestParam("key") String key){

        stringRedisTemplate.delete(key);
        return ResultEntity.successWithoutData();
    }


    /**
     * 通过key 得到value
     * @param key 键
     * @return
     */
    @RequestMapping("get/redis/value/by/key/remote")
    public ResultEntity<String> getRedisValueByKeyRemote(
            @RequestParam("key")String key){
        ValueOperations<String, String> valueOperations =
                stringRedisTemplate.opsForValue();
        String value = valueOperations.get(key);
        return ResultEntity.successWithData(value);
    }

}