@timetolive注解在mu-spring启动项目中不起作用

mmvthczy  于 2021-06-10  发布在  Redis
关注(0)|答案(0)|浏览(289)

我已经用redis在spring boot上创建了一个crud操作程序,crud操作运行良好。在这之后,我尝试了“生存时间(ttl)”功能,如果我保存一些数据,它应该在10秒后被删除,这部分不工作…我试着使用@timetolive注解,但时间一过,这些条目仍然存在。这是我的主要()-

  1. import com.vishruth.cache.ArtifactSpringRedisExample.model.User;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer;
  5. import org.springframework.cache.CacheManager;
  6. import org.springframework.cache.jcache.config.JCacheConfigurerSupport;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Primary;
  9. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  10. import org.springframework.data.redis.cache.RedisCacheManager;
  11. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  12. import org.springframework.data.redis.core.RedisTemplate;
  13. import org.springframework.data.redis.serializer.RedisSerializer;
  14. import org.springframework.data.redis.serializer.StringRedisSerializer;
  15. import java.time.Duration;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18. @SpringBootApplication
  19. public class ArtifactSpringRedisExampleApplication extends JCacheConfigurerSupport {
  20. @Bean
  21. JedisConnectionFactory jedisConnectionFactory(){
  22. return new JedisConnectionFactory();
  23. }
  24. //plugging the factory to the redis template
  25. @Bean
  26. RedisTemplate<String, User> redisTemplate(){
  27. RedisTemplate<String, User> redisTemplate =new RedisTemplate<>();
  28. redisTemplate.setConnectionFactory(jedisConnectionFactory());
  29. return redisTemplate;
  30. }
  31. // @Bean
  32. // RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() {
  33. // return (builder) -> {
  34. // Map<String, RedisCacheConfiguration> configurationMap = new HashMap<>();
  35. // configurationMap.put("cache1", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(20)));
  36. // configurationMap.put("cache2", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(2)));
  37. // builder.withInitialCacheConfigurations(configurationMap);
  38. // };
  39. // }
  40. public static void main(String[] args) {
  41. SpringApplication.run(ArtifactSpringRedisExampleApplication.class, args);
  42. }
  43. }

这是我的userrepositoryimpl-

  1. import org.redisson.api.RMapCache;
  2. import org.springframework.cache.annotation.CacheConfig;
  3. import org.springframework.cache.annotation.Cacheable;
  4. import org.springframework.data.redis.core.HashOperations;
  5. import org.springframework.data.redis.core.RedisTemplate;
  6. import org.springframework.stereotype.Repository;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.concurrent.TimeUnit;
  10. @Repository
  11. public class UserRepositoryImpl implements UserRepository {
  12. private RedisTemplate<String,User> redisTemplate;
  13. private HashOperations hashOperations;
  14. public UserRepositoryImpl(RedisTemplate<String, User> redisTemplate) {
  15. this.redisTemplate = redisTemplate;
  16. hashOperations=redisTemplate.opsForHash();
  17. }
  18. @Override
  19. // @Cacheable( cacheManager ="cache1")
  20. public void save(User user) {
  21. hashOperations.put("USER",user.getId(),user);
  22. }
  23. @Override
  24. public Map<String,User> findAll() {
  25. return hashOperations.entries("USER");
  26. }
  27. @Override
  28. public User findById(String id) {
  29. return (User) hashOperations.get("USER",id);
  30. }
  31. @Override
  32. public void update(User user) {
  33. save(user);
  34. }
  35. @Override
  36. public void delete(String id) {
  37. hashOperations.delete("USER",id);
  38. }
  39. }

这是我的userrepositoty接口-

  1. package com.vishruth.cache.ArtifactSpringRedisExample.model;
  2. import java.util.List;
  3. import java.util.Map;
  4. public interface UserRepository {
  5. void save(User user);
  6. Map<String,User> findAll();
  7. User findById(String id);
  8. void update(User user);
  9. void delete(String id);
  10. }

这是我的用户类-

  1. package com.vishruth.cache.ArtifactSpringRedisExample.model;
  2. import lombok.Data;
  3. import org.springframework.data.redis.core.RedisHash;
  4. import org.springframework.data.redis.core.TimeToLive;
  5. import java.io.Serializable;
  6. @RedisHash(timeToLive=10L)
  7. @Data
  8. public class User implements Serializable {
  9. // private static final long serialVersionUID = 6529685098267757690L;
  10. private String id;
  11. private String name;
  12. private Long salary;
  13. private Long ttl;
  14. public User(String id, String name, Long salary, Long ttl) {
  15. this.id = id;
  16. this.name = name;
  17. this.salary = salary;
  18. this.ttl = ttl;
  19. }
  20. }

这是我的控制者终点课程-

  1. package com.vishruth.cache.ArtifactSpringRedisExample;
  2. import com.vishruth.cache.ArtifactSpringRedisExample.model.User;
  3. import com.vishruth.cache.ArtifactSpringRedisExample.model.UserRepository;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import java.util.Map;
  9. @RestController
  10. @RequestMapping("/rest/user")
  11. public class UserResource {
  12. public UserResource(UserRepository userRepository) {
  13. this.userRepository = userRepository;
  14. }
  15. private UserRepository userRepository;
  16. @GetMapping("/add/{id}/{name}")
  17. public User add(@PathVariable("id") final String id,@PathVariable("name") final String name){
  18. userRepository.save(new User(id,name,20000L,1L));
  19. return userRepository.findById(id);
  20. }
  21. @GetMapping("/update/{id}/{name}")
  22. public User update(@PathVariable("id") final String id,@PathVariable("name") final String name){
  23. userRepository.update(new User(id,name,20000L,1L));
  24. return userRepository.findById(id);
  25. }
  26. @GetMapping("/all")
  27. public Map<String,User> update(){
  28. return userRepository.findAll();
  29. }
  30. @GetMapping("/deleteById/{id}")
  31. public User delete(@PathVariable("id") final String id){
  32. userRepository.delete(id);
  33. return userRepository.findById(id);
  34. }
  35. }

这是我的pom文件-

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.3.2.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.vishruth.cache</groupId>
  12. <artifactId>Artifact-Spring-Redis-Example</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>Artifact-Spring-Redis-Example</name>
  15. <description>Redis crud operation</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-data-redis</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>redis.clients</groupId>
  30. <artifactId>jedis</artifactId>
  31. </dependency>
  32. <!-- <dependency>-->
  33. <!-- <groupId>com.google.guava</groupId>-->
  34. <!-- <artifactId>guava</artifactId>-->
  35. <!-- <version>18.0</version>-->
  36. <!-- </dependency>-->
  37. <!-- <dependency>-->
  38. <!-- <groupId>org.springframework</groupId>-->
  39. <!-- <artifactId>spring-context-support</artifactId>-->
  40. <!-- <version>4.1.7.RELEASE</version>-->
  41. <!-- </dependency>-->
  42. <!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
  43. <dependency>
  44. <groupId>org.redisson</groupId>
  45. <artifactId>redisson</artifactId>
  46. <version>3.13.3</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-test</artifactId>
  51. <scope>test</scope>
  52. <exclusions>
  53. <exclusion>
  54. <groupId>org.junit.vintage</groupId>
  55. <artifactId>junit-vintage-engine</artifactId>
  56. </exclusion>
  57. </exclusions>
  58. </dependency>
  59. <dependency>
  60. <groupId>io.projectreactor</groupId>
  61. <artifactId>reactor-test</artifactId>
  62. <scope>test</scope>
  63. </dependency>
  64. <dependency>
  65. <groupId>org.projectlombok</groupId>
  66. <artifactId>lombok</artifactId>
  67. <optional>true</optional>
  68. </dependency>
  69. </dependencies>
  70. <build>
  71. <plugins>
  72. <plugin>
  73. <groupId>org.springframework.boot</groupId>
  74. <artifactId>spring-boot-maven-plugin</artifactId>
  75. </plugin>
  76. </plugins>
  77. </build>
  78. </project>

为什么@redishash(timetolive=10l)不起作用?我是SpringBoot和redis的初学者,欢迎您的帮助,谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题