當前位置:
                    首頁 >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
SpringBoot整合Redis
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                SpringBoot整合Redis
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                一、添加依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> </dependencies>二、項目的目錄結構:
?三、一個ssm_book表格
?四、配置文件application.yml
server:servlet:context-path: /redisport: 8080spring:redis:host: 127.0.0.1port: 6379jedis:pool:max-active: 8max-wait: -1max-idle: 8min-idle: 0timeout: 1200datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mvc?serverTimezone=UTCusername: rootpassword: 123456mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl五、配置redistemplate序列化
@Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport {/*選擇redis作為默認緩存工具*/@Beanpublic CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1));//設置緩存有效期1小時return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)).cacheDefaults(redisCacheConfiguration).build();}@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);//配置連接工廠//使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值(默認使用JDK的序列化方式)Jackson2JsonRedisSerializer jsonSerial = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();//指定要序列化的域、field、get和set,以及修飾符范圍,ANY是都有(包括private和public)om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//指定序列化輸入的類型,類必須是非final修飾的,final修飾符的(比如String、Integer等會拋出異常)om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);jsonSerial.setObjectMapper(om);//值采用json序列化template.setValueSerializer(jsonSerial);//使用StringRedisSerializer來序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());//設置hash、key和value序列化模式template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(jsonSerial);template.afterPropertiesSet();return template;}//對hash類型的數據操作@Beanpublic HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForHash();}//對redis字符串類型數據操作@Beanpublic ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForValue();}//對鏈表類型的數據操作@Beanpublic ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForList();}//對無序集合類型的數據操作@Beanpublic SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForSet();}//對有序集合類型的數據操作@Beanpublic ZSetOperations<String, Object> zSetOperations(RedisTemplate redisTemplate) {return redisTemplate.opsForZSet();} }六、創建實體類Book
@Data @ToString @TableName(value = "ssm_book") public class Book implements Serializable {@TableId(value = "book_id",type = IdType.AUTO)private Integer bookId;@TableField(value = "book_name")private String bookName;@TableField(value = "book_author")private String bookAuthor;@TableField(value = "book_date")private Date bookDate;@TableField(value = "book_price")private Double bookPrice; }七、創建BookMapper
@Mapper public interface BookMapper extends BaseMapper<Book> { }八、創建BookService
@Service public class BookService {@Autowiredprivate BookMapper bookMapper;@Autowiredprivate RedisTemplate redisTemplate;public List<Book> findAll(){while(redisTemplate.opsForList().size("books")>0){redisTemplate.opsForList().leftPop("books");}redisTemplate.opsForList().rightPushAll("books",bookMapper.selectList(null));return bookMapper.selectList(null);}//獲取book策略:先從緩存中獲取book,沒有則在數據庫中獲取,再將數據寫入緩存public Book findBookById(int id){String key = "book_"+id;ValueOperations<String,Book> operations = redisTemplate.opsForValue();//判斷redis中是否有鍵為key的緩存boolean hasKey = redisTemplate.hasKey(key);if(hasKey){Book book = operations.get(key);System.out.println("從緩存中獲得數據:"+book.getBookName());System.out.println("-----------------------------------");return book;}else{Book book = bookMapper.selectById(id);System.out.println("從數據庫中獲得數據:"+book.getBookName());System.out.println("-----------------------------------");//寫入緩存operations.set(key,book,5, TimeUnit.HOURS);return book;}}//更新圖書策略:先更新數據表,成功之后,刪除原來的緩存,再更新緩存public int updateBook(Book book){ValueOperations<String,Object> operations = redisTemplate.opsForValue();QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("book_id",book.getBookId());int result = bookMapper.update(book,queryWrapper);if(result !=0 ){String key = "book_"+book.getBookId();boolean haskey = redisTemplate.hasKey(key);if(haskey){redisTemplate.delete(key);System.out.println("刪除緩存中的key------------> "+key);}//再將更新后的數據加入緩存Book newbook = bookMapper.selectById(book.getBookId());if(newbook != null){operations.set(key,newbook,3,TimeUnit.HOURS);}}return result;}//刪除圖書策略:刪除數據表中的數據,然后刪除緩存public int deleteBookById(int id){int result = bookMapper.deleteById(id); //刪除數據庫中記錄String key = "book_"+id;if(result != 0){boolean hasKey = redisTemplate.hasKey(key); //查詢緩存是否存在對應的idif(hasKey){redisTemplate.delete(key);//刪除緩存中的數據System.out.println("刪除了緩存中的key:"+key);}}return result;} }九、測試
@SpringBootTest class RedisdemoApplicationTests {@Autowiredprivate BookService bookService;@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void all(){List<Book> bookList = redisTemplate.opsForList().range("books",0,-1);System.out.println("緩存中數據:"+bookList.size());if(bookList.size()==0){System.out.println("=========緩存中沒有數據,直接到數據庫中查詢==========");bookList = bookService.findAll();}else{System.out.println("==============緩存中有數據了==============");bookList.forEach(book -> System.out.println(book));}}@Testpublic void selectById(){Book book = bookService.findBookById(52);System.out.println(book);}@Testpublic void update(){Book book = bookService.findBookById(57);book.setBookName("讀城記");book.setBookAuthor("易中天");book.setBookDate(new Date());book.setBookPrice(889.5);bookService.updateBook(book);}@Testpublic void del(){bookService.deleteBookById(13);} }總結
以上是生活随笔為你收集整理的SpringBoot整合Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 视频消重软件大全 视频md5修改器哪个好
- 下一篇: gRPC编码初探(java)
