什麼是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";
}
通過可視化客戶端查看保存的數據如下:
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;
}
}