SpringBoot?整合Redis?數(shù)據(jù)庫的方法
Redis簡介
Redis(官網(wǎng): https://redis.io )是一個基于內(nèi)存的日志型可持久化的緩存數(shù)據(jù)庫,保存形式為key-value格式,Redis完全免費(fèi)開源,它使用ANSI C語言編寫。與其他的key - value緩存產(chǎn)品一樣,Redis具有以下三個特點。
• Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進(jìn)行使用;
• Redis不僅支持簡單的key-value類型數(shù)據(jù),同時還提供字符串、鏈表、集合、有序集合和哈希等數(shù)據(jù)結(jié)構(gòu)的存儲;
• Redis支持?jǐn)?shù)據(jù)備份,即master-slave模式的數(shù)據(jù)備份。
在Mac系統(tǒng)上,無需下載Redis即可使用它,以下是從Redis的托管服務(wù)器下載Redis壓縮包并解壓的相關(guān)命令。
wget http://download.redis.io/releases/redis-4.0.8.tar.gz tar xzf redis-4.0.8.tar.gz cd redis-4.0.8 make
使用Redis提供的服務(wù)之前,需要先啟動Redis相關(guān)的服務(wù),在mac系統(tǒng)上啟動Redis的命令如下。
src/redis-server
然后,重新打開一個Redis客戶端,使用以下的命令來連接Redis server。
src/redis-cli redis> set foo bar OK redis> get foo "bar"
整合Redis 數(shù)據(jù)庫
使用Redis之前需要引入相關(guān)依賴,Maven方式依賴的腳本如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
之后我們把Redis的相關(guān)配置寫入yml,這里建議根據(jù)之前不同的環(huán)境寫入不同的配置,Redis默認(rèn)使用的端口是6379,通常Redis默認(rèn)使用0號數(shù)據(jù)庫,默認(rèn)共有16個數(shù)據(jù)庫:
#redis配置 redis: # 數(shù)據(jù)庫索引 database: 0 # 服務(wù)器地址 host: 127.0.0.1 # 服務(wù)器連接端口 port: 6379 # 鏈接密碼 password: # 鏈接池 pool: # 最大連接數(shù)(負(fù)值表示沒有限制) max-active: 8 # 最大阻塞等待時間(負(fù)值表示沒有限制) max-wait: 1 # 最大空閑鏈接 max-idle: 8 # 最小空閑鏈接 min-idle: 0 # 鏈接超時時間(毫秒) timeout: 0
如果是application.properties方式,部分配置如下:
spring.redis.hostName=127.0.0.1 spring.redis.port=6379 spring.redis.pool.maxActive=8 spring.redis.pool.maxWait=-1 spring.redis.pool.maxIdle=8 spring.redis.pool.minIdle=0 spring.redis.timeout=0
新建RedisConfig.java文件用來存放配置文件。
@Configuration @EnableCaching//開啟注解 public class RedisConfig extends CachingConfigurerSupport { @Bean public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) { CacheManager cacheManager = new RedisCacheManager(redisTemplate); return cacheManager; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>(); redisTemplate.setConnectionFactory(factory); return redisTemplate; } }
在service包中建立一個RedisService.java類。
public interface RedisService { public void set(String key, Object value); public Object get(String key); }
新建一個service實現(xiàn)類RedisServiceImpl.java。
@Service public class RedisServiceImpl implements RedisService { @Resource private RedisTemplate<String,Object> redisTemplate; public void set(String key, Object value) { ValueOperations<String,Object> vo = redisTemplate.opsForValue(); vo.set(key, value); } public Object get(String key) { ValueOperations<String,Object> vo = redisTemplate.opsForValue(); return vo.get(key); } }
新建Controller層代碼UserController.java
@Controller @RequestMapping(path="/user") public class UserController { @Autowired private UserService userService; @Autowired private RedisService redisService; //從redis獲取某個用戶 @RequestMapping(value = "/getuserfromredis", method = RequestMethod.GET) public @ResponseBody User getRedis(@RequestParam String key) { return (User)redisService.get(key); } //獲取所有用戶 @RequestMapping(value = "/getusers", method = RequestMethod.GET) public @ResponseBody Page<User> list(Model model, Pageable pageable){ return userService.findAll(pageable); } //添加用戶 @GetMapping(value="/adduser") public @ResponseBody String addUser(@RequestParam String dictum, @RequestParam String password, @RequestParam String username) { User user = new User(); user.setDictum(dictum); user.setPassword(password); user.setUsername(username); System.out.println(user); userService.saveUser(user); redisService.set(user.getId()+"", user); return "Saved"; } }
本文設(shè)計的實體類User.java的代碼如下,需要把對象存放在redis需要將對象序列化。
@Entity @Table(name="s_user") public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; private String username; private String password; private String dictum; @OneToMany(mappedBy = "user", fetch = FetchType. LAZY, cascade = {CascadeType. ALL}) private Set<Photo> setPhoto; //省略getter和setter @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + ", dictum=" + dictum + ", setPhoto=" + setPhoto + "]"; } }
總結(jié)
以上所述是小編給大家介紹的SpringBoot 整合Redis 數(shù)據(jù)庫的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
SpringBoot實戰(zhàn)之實現(xiàn)結(jié)果的優(yōu)雅響應(yīng)案例詳解
這篇文章主要介紹了SpringBoot實戰(zhàn)之實現(xiàn)結(jié)果的優(yōu)雅響應(yīng)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Java靜態(tài)static關(guān)鍵字原理詳解
這篇文章主要介紹了Java靜態(tài)static關(guān)鍵字原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12SpringCloud解決feign調(diào)用token丟失問題解決辦法
在feign調(diào)用中可能會遇到如下問題:同步調(diào)用中,token丟失,這種可以通過創(chuàng)建一個攔截器,將token做透傳來解決,異步調(diào)用中,token丟失,這種就無法直接透傳了,因為子線程并沒有token,這種需要先將token從父線程傳遞到子線程,再進(jìn)行透傳2024-05-05SpringCloud中的Hystrix保護(hù)機(jī)制詳解
這篇文章主要介紹了SpringCloud中的Hystrix保護(hù)機(jī)制詳解,Hystrix,英文意思是豪豬,全身是刺,看起來就不好惹,是一種保護(hù)機(jī)制,Hystrix也是Netflix公司的一款組件,需要的朋友可以參考下2023-12-12Spring IOC原理補(bǔ)充說明(循環(huán)依賴、Bean作用域等)
這篇文章主要介紹了Spring IOC原理補(bǔ)充說明(循環(huán)依賴、Bean作用域等),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08教你如何將Springboot項目成功部署到linux服務(wù)器
這篇文章主要介紹了如何將Springboot項目成功部署到linux服務(wù)器上,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12