SpringBoot開發詳解(十一) -- Redis在SpringBoot中的整合

來源:互聯網
上載者:User

各位小夥伴,好久不見。最近一直都沒有更新,因為公司的項目一直在抓進度,又是表結構更替,又是重構,還要迭代需求。感覺項目都快做爛了……所以一個公司的好壞真的和領導者有極大的關係,許多程式員真的只是三年程式員,謝三年代碼就去轉崗管理了,最後導致技術水平有限,管理水平又跟不上。好,我廢話少說,開始這次的內容,這次我們聊一下NoSql資料庫Redis在SpringBoot中的使用。 Redis在Spring Boot中的整合

Maven依賴引入:

Redis是一個基於記憶體的日誌型可持久化的快取資料庫,儲存形式為key-value格式。還不清楚的小夥伴可以先學習一下,Redis在現在的開發中可是很常用的哦。

首先,我們先在maven中引入相關依賴:

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

之後我們把Redis的相關配置寫入yml,這裡建議根據之前不同的環境寫入不同的配置,Redis預設使用的連接埠是6379,通常Redis預設使用0號資料庫,預設共有16個資料庫:

#redis配置  redis:#  資料庫索引    database: 0#    伺服器位址    host: 127.0.0.1#    伺服器串連連接埠    port: 6379#    連結密碼    password:#    連結池    pool:#    最大串連數(負值表示沒有限制)      max-active: 8#      最大阻塞等待時間(負值表示沒有限制)      max-wait: 1#      最大空閑連結      max-idle: 8#      最小空閑連結      min-idle: 0#    連結逾時時間(毫秒)    timeout: 0

此時,我們已經完成了Redis的所有配置,可以直接來使用了,我們寫一個測試案例來測試一下:

@SpringBootTest@RunWith(SpringJUnit4ClassRunner.class)public class RedisAutoTest {    @Autowired    private StringRedisTemplate stringRedisTemplate;    @Test    public void save(){        stringRedisTemplate.opsForValue().set("zzp","big z");        Assert.assertEquals("big z",stringRedisTemplate.opsForValue().get("zzp"));    }}


OK,沒有問題,同樣的我們使用rdm開啟看下是否成功存入了。

OK,也沒有任何問題。
在這個測試案例中我們使用的StringRedisTemplate,因為我們之前說過redis使用key-value格式儲存資料,這裡其實儲存的就是

public class UserInfo implements Serializable{    private static final long serialVersionUID = 1L;    private String tel;    private String nickName;    @Max(value = 999999,message = "超過最大數值")    @Min(value = 000000,message = "密碼設定不正確")    private String passWord;    public UserInfo() {    }    @Override    public String toString() {        return "UserInfo{" +                "tel='" + tel + '\'' +                ", nickName='" + nickName + '\'' +                ", passWord='" + passWord + '\'' +                '}';    }    public UserInfo(String tel, String nickName, String passWord) {        this.tel = tel;        this.nickName = nickName;        this.passWord = passWord;    }    public String getTel() {        return tel;    }    public void setTel(String tel) {        this.tel = tel;    }    public String getNickName() {        return nickName;    }    public void setNickName(String nickName) {        this.nickName = nickName;    }    public String getPassWord() {        return passWord;    }    public void setPassWord(String passWord) {        this.passWord = passWord;    }}

然後我們駛向下序列化介面:

public class RedisObjectSerializer implements RedisSerializer<Object> {    private Converter<Object,byte[]> serializer = new SerializingConverter();    private Converter<byte[],Object> deserializer = new DeserializingConverter();    static final byte[] EMPTY_ARRAY = new byte[0];    @Override    public byte[] serialize(Object o) throws SerializationException {        if(o == null){            return EMPTY_ARRAY;        }        try {            return serializer.convert(o);        }catch (Exception e){            return EMPTY_ARRAY;        }    }    @Override    public Object deserialize(byte[] bytes) throws SerializationException {        if(isEmpty(bytes)){            return null;        }        try {            return deserializer.convert(bytes);        }catch (Exception e){            throw new SerializationException("Can not deserializer",e);        }    }    private boolean isEmpty(byte[] data){        return (data == null || data.length == 0);    }}

之後我們在將RedisTemplate重新設定下,使用我們自己的序列化對象:

@Configurationpublic class RedisConfig {    @Bean    JedisConnectionFactory jedisConnectionFactory(){        return  new JedisConnectionFactory();    }    /**     * 存入對象序列化資訊     * @return     */    @Bean    public RedisTemplate<String,UserInfo> redisSerizlizerObj(){        RedisTemplate<String,UserInfo> redisTemplate = new RedisTemplate<String,UserInfo>();        redisTemplate.setConnectionFactory(jedisConnectionFactory());        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setValueSerializer(new RedisObjectSerializer());        return redisTemplate;    }}

完成該工作後,我們可以繼續寫測試案例來驗證我們的相關配置了

 @Autowired private RedisTemplate<String,UserInfo> Template; @Test public void testobjSerializer() throws InterruptedException {        UserInfo user = new UserInfo("111111","snow","112358");        Template.opsForValue().set("User:snow",user);        Assert.assertEquals(true,redisTemplate.hasKey("User:snow"));    }

測試結果一切正常,我們同樣通過rdm可以看到我們所存入的序列化對象:

但是,將每一個對象都寫一個RedisTemplate未免太過麻煩,其實我們開發中,會存入對象的toString方法。所以我將存入對象ToString方法的字碼頁給到大家,大家可以根據自己的需要來使用:

    /**     * 存入對象tostring後的資訊     * @return     */    @Bean   public RedisTemplate<String,String> redisTemplate(){        RedisTemplate<String,String> redisTemplate = new StringRedisTemplate();        redisTemplate.setConnectionFactory(jedisConnectionFactory());Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);        ObjectMapper om = new ObjectMapper();        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);        jackson2JsonRedisSerializer.setObjectMapper(om);        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);        redisTemplate.afterPropertiesSet();        return redisTemplate;    }

同樣通過測試案例來驗證可以發現,可以使用:

    @Test    public void testobj() throws InterruptedException {        UserInfo user = new UserInfo("15201803745","snow","112358");        ValueOperations<String,UserInfo> operations = redisTemplate.opsForValue();        operations.set("User:zzp",user);        Thread.sleep(1000);        operations.set("User:zzq",user);        Thread.sleep(1000);        Assert.assertEquals(true,redisTemplate.hasKey("User:zzp"));        Assert.assertEquals(true,redisTemplate.hasKey("User:zzq"));    }

Redis的使用其實遠遠不止這些,包括事物等都是可以通過Redis處理的。一般開發中我們會使用Jedis對Redis進行操作,可是由於這時介紹Redis在SpringBoot中整合的,所以就不再多言了,如果有想知道的小夥伴可以告訴我,我在來說說如何使用Jedis操作。 以上所有的代碼我已經上傳到GitHub round1-springboot 如果心急的小夥伴也可以去clone我已經完成的項目,這個項目中把一些常用功能都寫了,並且都寫注釋啦。。。也希望大家能幫我點個贊哦~~~ MySpringBoot

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.