【SpringBoot】SpringBoot整合Redis 使用Redis

SpringBoot整合Redis


使用Redis數據庫

Redis簡介

Redis(官網地址:https://redis.io/)是一個非關係型的高性能緩存數據庫,使用ANSI C語言開發,是一種Key-Value模式的數據庫,以Key-Value的形式存儲數據,支持多種value類型,如string(字符串)、list(鏈表)、set(集合)、zset(sorted set,有序集合)和hash(哈希類型)。

Redis支持多種開發語言,如Java、C/C++、C#、PHP、JavaScript、Perl、Objective-C、Python、Ruby、Erlang等。同時,Redis還支持數據的持久化,不只可以將數據存儲在內存中,還可以將數據存儲到硬盤內,不需要擔心數據的丟失。在性能方面,Redis官方(官網地址:https://redis.io/)提供了這樣的數據:讀的速度是110 000次/s,寫的速度是81 000次/s,是一個真正的高性能數據庫。

對於Redis來說,我們可能對它使用的更多的是緩存,畢竟它可以高效地對數據進行操作。其實它還具備很多功能,比如消息隊列、發佈、訂閱消息等。另外,它提供了持久化的方式。Spring Boot使用Redis數據庫分爲兩步:

(1)在pom文件中加入依賴

(2)在配置文件中加入配置

添加redis的起步依賴

在創建項目之前,需要啓動Redis。啓動Redis後,

在Windows 啓動 redis-server.exe redis服務端
在這裏插入圖片描述

這個項目項目,實在SpringBoot整合Spring Data JPA基礎上添加的,
在pom文件中加入Redis依賴

<!-- 配置使用redis啓動器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置redis的連接信息

application.properties

在配置文件中配置Redis信息,這裏只配置Redis服務地址和端口,嗯。

#Redis

#Redis服務器地址
spring.redis.host=127.0.0.1
spring.redis.port=6379

注入RedisTemplate測試redis操作

從redis中獲得數據 數據的形式 json字符串

判斷redis中是否存在數據

不存在數據,從數據庫拿再放到Redis數據庫

將數據在控制檯打印

存在,直接緩存拿數據 ,沒有在其他的地方拿 。

注入RedisTemplate,用於對Redis緩存進行操作。創建兩個方法:Set方法和Get方法,分別用於使用RedisTemplate進行存放數據和取出數據

package cn.liuawen;

import cn.liuawen.domain.User;
import cn.liuawen.repository.UserRepository;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;


@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Test
    public void test() throws JsonProcessingException {
        //從redis緩存中獲得指定的數據
        String userListData = redisTemplate.boundValueOps("user.findAll").get();
        //如果redis中沒有數據的話
        if(null==userListData){
            //查詢數據庫獲得數據
            List<User> all = userRepository.findAll();
            //轉換成json格式字符串
            ObjectMapper om = new ObjectMapper();
            userListData = om.writeValueAsString(all);
            //將數據存儲到redis中,下次在查詢直接從redis中獲得數據,不用在查詢數據庫
            redisTemplate.boundValueOps("user.findAll").set(userListData);
            System.out.println("===============從數據庫獲得數據===============");
        }else{
            System.out.println("===============從redis緩存中獲得數據===============");
        }

        System.out.println(userListData);

    }

}

開始redis沒有數據

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>

執行一次

===============從數據庫獲得數據===============
[{"id":1,"username":"菜雞文","password":"123"},{"id":2,"username":"柳小子","password":"123"}]

在這裏插入圖片描述

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> keys *
1) "user.findAll"
127.0.0.1:6379> get user.findAll
"[{\"id\":1,\"username\":\"\xe8\x8f\x9c\xe9\xb8\xa1\xe6\x96\x87\",\"password\":\"123\"},{\"id\":2,\"username\":\"\xe6\x9f\xb3\xe5\xb0\x8f\xe5\xad\x90\",\"password\":\"123\"}]"
127.0.0.1:6379>

redis有數據了

再執行一次test(), 從redis緩存中拿到數據了

在這裏插入圖片描述

===============從redis緩存中獲得數據===============
[{"id":1,"username":"菜雞文","password":"123"},{"id":2,"username":"柳小子","password":"123"}]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章