SpringBoot?整合Redis?數(shù)據(jù)庫的方法
Redis簡介
Redis(官網(wǎng): https://redis.io )是一個(gè)基于內(nèi)存的日志型可持久化的緩存數(shù)據(jù)庫,保存形式為key-value格式,Redis完全免費(fèi)開源,它使用ANSI C語言編寫。與其他的key - value緩存產(chǎn)品一樣,Redis具有以下三個(gè)特點(diǎn)。
• Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用;
• Redis不僅支持簡單的key-value類型數(shù)據(jù),同時(shí)還提供字符串、鏈表、集合、有序集合和哈希等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ);
• 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ù)之前,需要先啟動(dòng)Redis相關(guān)的服務(wù),在mac系統(tǒng)上啟動(dòng)Redis的命令如下。
src/redis-server

然后,重新打開一個(gè)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號(hào)數(shù)據(jù)庫,默認(rèn)共有16個(gè)數(shù)據(jù)庫:
#redis配置 redis: # 數(shù)據(jù)庫索引 database: 0 # 服務(wù)器地址 host: 127.0.0.1 # 服務(wù)器連接端口 port: 6379 # 鏈接密碼 password: # 鏈接池 pool: # 最大連接數(shù)(負(fù)值表示沒有限制) max-active: 8 # 最大阻塞等待時(shí)間(負(fù)值表示沒有限制) max-wait: 1 # 最大空閑鏈接 max-idle: 8 # 最小空閑鏈接 min-idle: 0 # 鏈接超時(shí)時(shí)間(毫秒) 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包中建立一個(gè)RedisService.java類。
public interface RedisService {
public void set(String key, Object value);
public Object get(String key);
}新建一個(gè)service實(shí)現(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獲取某個(gè)用戶
@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è)計(jì)的實(shí)體類User.java的代碼如下,需要把對(duì)象存放在redis需要將對(duì)象序列化。
@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ù)庫的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
@Transactional跟@DS動(dòng)態(tài)數(shù)據(jù)源注解沖突的解決
這篇文章主要介紹了@Transactional跟@DS動(dòng)態(tài)數(shù)據(jù)源注解沖突的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
從內(nèi)存模型中了解Java final的全部細(xì)節(jié)
關(guān)于final關(guān)鍵字,它也是我們一個(gè)經(jīng)常用的關(guān)鍵字,可以修飾在類上、或者修飾在變量、方法上,以此看來定義它的一些不可變性!像我們經(jīng)常使用的String類中,它便是final來修飾的類,并且它的字符數(shù)組也是被final所修飾的。但是一些final的一些細(xì)節(jié)你真的了解過嗎2022-03-03
Java實(shí)戰(zhàn)項(xiàng)目練習(xí)之球館在線預(yù)約系統(tǒng)的實(shí)現(xiàn)
理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SpringBoot+maven+freemark+Mysql實(shí)現(xiàn)一個(gè)球館在線預(yù)約系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01
SpringBoot開發(fā)案例 分布式集群共享Session詳解
這篇文章主要介紹了SpringBoot開發(fā)案例 分布式集群共享Session詳解,在分布式系統(tǒng)中,為了提升系統(tǒng)性能,通常會(huì)對(duì)單體項(xiàng)目進(jìn)行拆分,分解成多個(gè)基于功能的微服務(wù),可能還會(huì)對(duì)單個(gè)微服務(wù)進(jìn)行水平擴(kuò)展,保證服務(wù)高可用,需要的朋友可以參考下2019-07-07
如何使用Gradle實(shí)現(xiàn)類似Maven的profiles功能
這篇文章主要介紹了如何使用Gradle實(shí)現(xiàn)類似Maven的profiles功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
Serializable接口的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了java中Serializable接口的作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
SpringBoot3.0自定stater模塊的操作流程(chatGPT提供的49種場(chǎng)景)
SpringBoot3.0發(fā)布等重磅陸消息續(xù)進(jìn)入大家的視線,而本文作者將以技術(shù)整合的角度,帶大家把最火的兩個(gè)技術(shù)整合在一起,通過本文學(xué)習(xí)你將熟悉SpringBoot3.0自定stater模塊的操作流程,并熟悉OpenAi為chatGPT提供的49種場(chǎng)景,感興趣的朋友一起看看吧2022-12-12

