javascript
和get redis_SpringBoot整合Redis,你get了吗?
Our-task介紹
本篇博客是我github上our-task:一個完整的清單管理系統的配套教程文檔,這是SpringBoot+Vue開發的前后端分離清單管理工具,仿滴答清單。目前已部署在阿里云ECS上,可進行在線預覽,隨意使用(附詳細教程),大家感興趣的話,歡迎給個star!
阿里云預覽地址
Redis的安裝與配置
Windows下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-starter-test</artifactId><scope>test</scope></dependency><!--redis依賴配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> </dependencies>yml文件配置
yml文件中主要是關于Redis的配置,其中鍵的設置格式為:數據庫名:表名:id,更多Redis了解,請大家參考這篇文章。
Redis各種鍵的典型使用場景,不清楚的都來看一下
# DataSource Config spring:redis:# Redis服務器地址host: localhost# Redis數據庫索引(默認為0)database: 0# Redis服務器連接端口port: 6379# Redis服務器連接密碼(默認為空)password:jedis:pool:# 連接池最大連接數(使用負值表示沒有限制)max-active: 8# 連接池最大阻塞等待時間(使用負值表示沒有限制)max-wait: -1ms# 連接池中的最大空閑連接max-idle: 8# 連接池中的最小空閑連接min-idle: 0# 連接超時時間(毫秒)timeout: 3000ms ? # 自定義redis key redis:database: "study"key:user: "user"expire:common: 86400 # 24小時實體類
新建entity包,在該包下新建User類,用作該Demo的操作實體。考慮到一些小白可能還不了解Lombok,我就直接使用Setter/Getter。
package com.example.demo.entity; ? /*** @program: SpringBoot-Redis-Demo* @description: 用戶類* @author: water76016* @create: 2020-12-29 09:22**/ public class User {Integer id;String username;String password; ?public User(Integer id, String username, String password) {this.id = id;this.username = username;this.password = password;} ?@Overridepublic String toString() {return "User{" +"username='" + username + ''' +", password='" + password + ''' +'}';} ?public Integer getId() {return id;} ?public void setId(Integer id) {this.id = id;} ?public String getUsername() {return username;} ?public void setUsername(String username) {this.username = username;} ?public String getPassword() {return password;} ?public void setPassword(String password) {this.password = password;} }Service服務接口
服務接口一共有兩個:一個是UserService,一個是RedisService。UserService提供了針對User實體的服務,RedisService提供操作Reids的服務接口。
package com.example.demo.service; ? import com.example.demo.entity.User; ? public interface UserService {/*** 對用戶打招呼,返回user的toString()方法* @param user* @return*/public String helloUser(User user); } package com.example.demo.service; ? import java.util.List; import java.util.Map; import java.util.Set; ? ? /*** @program: our-task* @description: redis操作服務類* @author: water76016* @create: 2020-09-24 16:45**/ public interface RedisService { ?/*** 保存屬性** @param key the key* @param value the value* @param time the time*/void set(String key, Object value, long time); ?/*** 保存屬性** @param key 鍵* @param value 值*/void set(String key, Object value); ?/*** 獲取屬性** @param key the key* @return the object*/Object get(String key); ?/*** 刪除屬性** @param key the key* @return the boolean*/Boolean del(String key); ?/*** 批量刪除屬性** @param keys the keys* @return the long*/Long del(List<String> keys); ?/*** 設置過期時間** @param key the key* @param time the time* @return the boolean*/Boolean expire(String key, long time); ?/*** 獲取過期時間** @param key the key* @return the expire*/Long getExpire(String key); ?/*** 判斷是否有該屬性** @param key the key* @return the boolean*/Boolean hasKey(String key); ?/*** 按delta遞增** @param key the key* @param delta the delta* @return the long*/Long incr(String key, long delta); ?/*** 按delta遞減** @param key the key* @param delta the delta* @return the long*/Long decr(String key, long delta); ?/*** 獲取Hash結構中的屬性** @param key the key* @param hashKey the hash key* @return the object*/Object hGet(String key, String hashKey); ?/*** 向Hash結構中放入一個屬性** @param key the key* @param hashKey the hash key* @param value the value* @param time the time* @return the boolean*/Boolean hSet(String key, String hashKey, Object value, long time); ?/*** 向Hash結構中放入一個屬性** @param key the key* @param hashKey the hash key* @param value the value*/void hSet(String key, String hashKey, Object value); ?/*** 直接獲取整個Hash結構** @param key the key* @return the map*/Map<Object, Object> hGetAll(String key); ?/*** 直接設置整個Hash結構** @param key the key* @param map the map* @param time the time* @return the boolean*/Boolean hSetAll(String key, Map<String, Object> map, long time); ?/*** 直接設置整個Hash結構** @param key the key* @param map the map*/void hSetAll(String key, Map<String, Object> map); ?/*** 刪除Hash結構中的屬性** @param key the key* @param hashKey the hash key*/void hDel(String key, Object... hashKey); ?/*** 判斷Hash結構中是否有該屬性** @param key the key* @param hashKey the hash key* @return the boolean*/Boolean hHasKey(String key, String hashKey); ?/*** Hash結構中屬性遞增** @param key the key* @param hashKey the hash key* @param delta the delta* @return the long*/Long hIncr(String key, String hashKey, Long delta); ?/*** Hash結構中屬性遞減** @param key the key* @param hashKey the hash key* @param delta the delta* @return the long*/Long hDecr(String key, String hashKey, Long delta); ?/*** 獲取Set結構** @param key the key* @return the set*/Set<Object> sMembers(String key); ?/*** 向Set結構中添加屬性** @param key the key* @param values the values* @return the long*/Long sAdd(String key, Object... values); ?/*** 向Set結構中添加屬性** @param key the key* @param time the time* @param values the values* @return the long*/Long sAdd(String key, long time, Object... values); ?/*** 是否為Set中的屬性** @param key the key* @param value the value* @return the boolean*/Boolean sIsMember(String key, Object value); ?/*** 獲取Set結構的長度** @param key the key* @return the long*/Long sSize(String key); ?/*** 刪除Set結構中的屬性** @param key the key* @param values the values* @return the long*/Long sRemove(String key, Object... values); ?/*** 獲取List結構中的屬性** @param key the key* @param start the start* @param end the end* @return the list*/List<Object> lRange(String key, long start, long end); ?/*** 獲取List結構的長度** @param key the key* @return the long*/Long lSize(String key); ?/*** 根據索引獲取List中的屬性** @param key the key* @param index the index* @return the object*/Object lIndex(String key, long index); ?/*** 向List結構中添加屬性** @param key the key* @param value the value* @return the long*/Long lPush(String key, Object value); ?/*** 向List結構中添加屬性** @param key the key* @param value the value* @param time the time* @return the long*/Long lPush(String key, Object value, long time); ?/*** 向List結構中批量添加屬性** @param key the key* @param values the values* @return the long*/Long lPushAll(String key, Object... values); ?/*** 向List結構中批量添加屬性** @param key the key* @param time the time* @param values the values* @return the long*/Long lPushAll(String key, Long time, Object... values); ?/*** 從List結構中移除屬性** @param key the key* @param count the count* @param value the value* @return the long*/Long lRemove(String key, long count, Object value); }Service實現類
在UserService中,我們把用戶的信息存儲在Redis中。調用了RedisService的方法,同時給該鍵設置過期時間。大家在操作的時候,直接使用RedisService中的方法就可以了,這些方法還是挺全的。
package com.example.demo.service.impl; ? import com.example.demo.entity.User; import com.example.demo.service.RedisService; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; ? /*** @program: SpringBoot-Redis-Demo* @description: 用戶服務實現類* @author: water76016* @create: 2020-12-29 09:24**/ @Service public class UserServiceImpl implements UserService {@AutowiredRedisService redisService; ?@Value("${redis.database}")private String redisDatabase;@Value("${redis.key.user}")private String redisUserKey;@Value("${redis.expire.common}")private long expire;/*** 對用戶打招呼,返回user的toString()方法** @param user* @return*/@Overridepublic String helloUser(User user) {//設置鍵,鍵的格式為:數據庫名:user:用戶idString key = redisDatabase + ":" + redisUserKey + ":" + user.getId();//把用戶的toString,存在這個鍵里面redisService.set(key, user.toString());//設置鍵的過期時間redisService.expire(key, expire);return user.toString();} } package com.example.demo.service.impl; ? import com.example.demo.service.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Service; ? import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; ? /*** @program: our-task* @description: redis操作服務接口實現類* @author: water76016* @create: 2020-09-24 16:45**/ @Service public class RedisServiceImpl implements RedisService {/*** 由于沒有指定具體類型<String, Object>,用Resource注入才有效* */@Resourceprivate RedisTemplate redisTemplate; ?@Autowired(required = false)public void setRedisTemplate(RedisTemplate redisTemplate) {RedisSerializer stringSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringSerializer);redisTemplate.setValueSerializer(stringSerializer);redisTemplate.setHashKeySerializer(stringSerializer);redisTemplate.setHashValueSerializer(stringSerializer);this.redisTemplate = redisTemplate;}@Overridepublic void set(String key, Object value, long time) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} ?@Overridepublic void set(String key, Object value) { ?redisTemplate.opsForValue().set(key, value);} ?@Overridepublic Object get(String key) {return redisTemplate.opsForValue().get(key);} ?@Overridepublic Boolean del(String key) {return redisTemplate.delete(key);} ?@Overridepublic Long del(List<String> keys) {return redisTemplate.delete(keys);} ?@Overridepublic Boolean expire(String key, long time) {return redisTemplate.expire(key, time, TimeUnit.SECONDS);} ?@Overridepublic Long getExpire(String key) {return redisTemplate.getExpire(key, TimeUnit.SECONDS);} ?@Overridepublic Boolean hasKey(String key) {return redisTemplate.hasKey(key);} ?@Overridepublic Long incr(String key, long delta) {return redisTemplate.opsForValue().increment(key, delta);} ?@Overridepublic Long decr(String key, long delta) {return redisTemplate.opsForValue().increment(key, -delta);} ?@Overridepublic Object hGet(String key, String hashKey) {return redisTemplate.opsForHash().get(key, hashKey);} ?@Overridepublic Boolean hSet(String key, String hashKey, Object value, long time) {redisTemplate.opsForHash().put(key, hashKey, value);return expire(key, time);} ?@Overridepublic void hSet(String key, String hashKey, Object value) {redisTemplate.opsForHash().put(key, hashKey, value);} ?@Overridepublic Map<Object, Object> hGetAll(String key) {return redisTemplate.opsForHash().entries(key);} ?@Overridepublic Boolean hSetAll(String key, Map<String, Object> map, long time) {redisTemplate.opsForHash().putAll(key, map);return expire(key, time);} ?@Overridepublic void hSetAll(String key, Map<String, Object> map) {redisTemplate.opsForHash().putAll(key, map);} ?@Overridepublic void hDel(String key, Object... hashKey) {redisTemplate.opsForHash().delete(key, hashKey);} ?@Overridepublic Boolean hHasKey(String key, String hashKey) {return redisTemplate.opsForHash().hasKey(key, hashKey);} ?@Overridepublic Long hIncr(String key, String hashKey, Long delta) {return redisTemplate.opsForHash().increment(key, hashKey, delta);} ?@Overridepublic Long hDecr(String key, String hashKey, Long delta) {return redisTemplate.opsForHash().increment(key, hashKey, -delta);} ?@Overridepublic Set<Object> sMembers(String key) {return redisTemplate.opsForSet().members(key);} ?@Overridepublic Long sAdd(String key, Object... values) {return redisTemplate.opsForSet().add(key, values);} ?@Overridepublic Long sAdd(String key, long time, Object... values) {Long count = redisTemplate.opsForSet().add(key, values);expire(key, time);return count;} ?@Overridepublic Boolean sIsMember(String key, Object value) {return redisTemplate.opsForSet().isMember(key, value);} ?@Overridepublic Long sSize(String key) {return redisTemplate.opsForSet().size(key);} ?@Overridepublic Long sRemove(String key, Object... values) {return redisTemplate.opsForSet().remove(key, values);} ?@Overridepublic List<Object> lRange(String key, long start, long end) {return redisTemplate.opsForList().range(key, start, end);} ?@Overridepublic Long lSize(String key) {return redisTemplate.opsForList().size(key);} ?@Overridepublic Object lIndex(String key, long index) {return redisTemplate.opsForList().index(key, index);} ?@Overridepublic Long lPush(String key, Object value) {return redisTemplate.opsForList().rightPush(key, value);} ?@Overridepublic Long lPush(String key, Object value, long time) {Long index = redisTemplate.opsForList().rightPush(key, value);expire(key, time);return index;} ?@Overridepublic Long lPushAll(String key, Object... values) {return redisTemplate.opsForList().rightPushAll(key, values);} ?@Overridepublic Long lPushAll(String key, Long time, Object... values) {Long count = redisTemplate.opsForList().rightPushAll(key, values);expire(key, time);return count;} ?@Overridepublic Long lRemove(String key, long count, Object value) {return redisTemplate.opsForList().remove(key, count, value);} }UserController控制器
接下來,我們新建一個controller包,在該包下新建UserController控制類。
package com.example.demo.controller; ? import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; ? /*** @program: SpringBoot-Redis-Demo* @description:* @author: water76016* @create: 2020-12-29 09:27**/ @RestController @RequestMapping("/user") public class UserController {@AutowiredUserService userService; ?@PostMapping("/helloUser")public String helloUser(@RequestBody User user){return userService.helloUser(user);} ? }結果測試
最后,我們啟動SpringBoot程序,程序運行在8080端口,在postman中進行測試。大家按照我在postman中的輸入,就會有相應的輸出了。
另外,也來看看Redis中是否有相應的緩存結果。
Demo地址
寫了這么多,還是擔心大家使用的時候有問題,所以我把該Demo放在了Github上,大家自行下載就可以了。
SpringBoot-Redis-Demo地址
總結
以上是生活随笔為你收集整理的和get redis_SpringBoot整合Redis,你get了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Python基础七(函数)
 - 下一篇: python读写磁盘扇区数据_C++-如