Spring boot整合redis方法之RedisTemplate

使用Spring boot整合redis,其本質還是使用了Spring的Spring Data Redis去處理的實現的。使用之前要保證redis安裝完成並啓動其服務端,然後在框架中需要添加spring boot中的redis和redis連接池的相應依賴,然後編寫相應的配置文件,寫一個簡單的demo,可以直接調用spring提供的redisTemplate來實現簡單的crud操作,注意對象保存是需要實現序列化,不能直接存儲,可以在對象類中實現Serializable類。
一、添加依賴
打開一個spring boot項目,這裏有兩個很要依賴,一個會spring boot中的redis依賴,另一個是redis連接池需要的依賴

	<!-- redis依賴包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

二、編寫配置文件
這裏主要就是配置redis的基本配置和連接池屬性的配置

spring:
  #redis
  redis:
    host: 127.0.0.1
    port: 6379
    database: 0
    timeout: 5000
    #連接池
    jedis:
      pool:
        max-idle: 20
        min-idle: 2
        max-wait: 3000
        max-active: 50

三、編寫一個小demo
添加一個對象到redis中,key爲String,value爲對象。
spring提供的redisTemplate,已經封裝好了一些東西,可以直接調用使用實現簡單的redis的CRUD操作。一般使用時都會講這個類做成做個工具類,方便service層的使用。

package com.example.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.logging.Logger;

@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;
    Logger log = Logger.getLogger("RedisUtils.class");
    /**
     * 讀取緩存
     */
    public Object get(final Object key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 寫入緩存
     */
    public boolean set(final Object key, Object value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 更新緩存
     */
    public boolean getAndSet(final Object key, Object value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().getAndSet(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 刪除緩存
     */
    public boolean delete(final Object key) {
        boolean result = false;
        try {
            redisTemplate.delete(key);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

編寫對象類,並序列化(因爲要存儲到redis至內容中,對象必須序列化才能存儲)。實現序列化在存儲的時候會序列化,在取出的時候會反序列化!

package com.example.model;
import lombok.Data;
import java.io.Serializable;
/*
* 對象存儲到redis中需要先序列化
* */
@Data
public class User1 implements Serializable {
    private int id;
    private String name;
    private int age;
}

service層,直接寫實現,接口就不寫了

package com.example.serviceimpl;
import com.example.model.User1;
import com.example.util.RedisUtils;
import com.example.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RedisServiceimpl implements RedisService {

    @Autowired
    private RedisUtils redisUtils;
    public void setUser(){
        User1 u = new User1();
        u.setAge(1);
        u.setId(1);
        u.setName("tom");
        redisUtils.set("user001",u);
    }
    public Object getByKey(){
        return redisUtils.get("user001");
    }
}

controller層調用

package com.example.controller;

import com.example.model.User;
import com.example.model.User1;
import com.example.service.RedisService;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
import java.util.logging.Logger;

@Controller
public class HelloController {

    Logger log = Logger.getLogger("HelloController.class");
    @Autowired
    UserService userService;
    @Autowired
    RedisService redisService;

    @GetMapping(value = "/hello")
    public String hello(){
        redisService.setUser();
        User1 u = (User1) redisService.getByKey();
        log.info(String.valueOf(u));
        return "hello";
    }
}

運行結果
在這裏插入圖片描述
這只是最簡單的一個demo,對於裏面的序列化的操作以及redis支持的五種數據類型的操作,都在學習過程中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章