Springboot中Redis的使用

什麼是NoSQL

爲了解決高併發、高可擴展、高可用、大數據存儲問題而產生的數據庫解決方案,就是NoSQL數據庫。

NoSQL,泛指非關係型的數據庫,NoSQL即Not-Only SQL,它可以作爲關係型數據庫的良好補充。Redis是NoSQL中的一種。

什麼是redis

Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫。它通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前爲止Redis支持的鍵值數據類型如 字符串類型、散列類型、列表類型、集合類型、有序集合類型

redis有什麼用

緩存(數據查詢、短連接、新聞內容、商品內容等等)(最多使用)

分佈式集羣架構中的session分離

聊天室的在線好友列表

任務隊列(秒殺、搶購、12306等等)

應用排行榜

網站訪問統計

數據過期處理(可以精確到毫秒)

redis使用入門

1、下載

當前爲Mac環境

官網下載安裝包

或使用命令下載並解壓

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz

2、編譯

$ cd redis-5.0.5
$ make

3、啓動

$ src/redis-server

4、使用

通過redis自帶的客戶端來使用redis命令

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

springboot集成redis

1、添加依賴pom.xml

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

2、設置屬性application.properties

#Redis數據庫索引(默認爲0)
spring.redis.database=0
#Redis服務器地址
spring.redis.host=localhost
#Redis服務器連接端口
spring.redis.port=6379
### Redis服務器連接密碼(默認爲空)
spring.redis.password=123456

3、基礎使用

spring-boot提供了兩個類來直接操作redis,RedisTemplate和StringRedisTemplate。RedisTemplate的範型是<Object,Object>,而StringRedisTemplate是RedisTemplate的子類,其範型是<String, String>。兩者相互獨立,操作的數據互不相干,且不能操作另一方的數據。

@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;@RequestMapping("/hello")
public String hello() {
  redisTemplate.opsForValue().set("user.001", "Jackson");
  stringRedisTemplate.opsForValue().set("user.002", "Jackson");
  return "hello";
}

通過可視化客戶端查看保存的數據如下:
RedisTemplate
StringRedisTemplate

4、解決亂碼

從上圖可以看出,通過RedisTemplate保存的數據出現了亂碼,這是因爲RedisTemplate默認使用的是JDK序列化的方式,數據是被序列化成16進制後進行保存的。可以自定義RedisTemplate並添加到Spring的bean容器中來代替默認的RedisTemplate對象。

@Configuration  // 通過Configuration+Bean來添加到Spring容器中。
public class RedisConfig {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
​
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
​
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
​
        jackson2JsonRedisSerializer.setObjectMapper(mapper);
​
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
​
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}
 

在這裏插入圖片描述

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