IT|軟體|資料庫|Key-Value|Redis 安裝

簡介

Redis 是近年來出現 NoSQL 開源資料庫的一種,並且將資料存放在記憶體中,以提升讀取的效率。以架設古典音樂串流網站 Muzik Online 聞名的希幔科技,對於他們旗下的網站需要應付大量的流量,採用 Redis 做分散式快取服務。
 
Redis 這種記憶體式資料庫,主要的功能除了提供快取外,還可額外提供運算處理,所以非常適合輔助關聯式資料庫。以他實際的應用方式,全部資料還是放在資料庫,真正需要加快速度的資料或額外特別的處理時,也會放一份在 Redis 處理。
 
性能極高– Redis 能讀的速度是110000次/s,寫的速度是81000次/s。
 
安裝 Redis

[Mac OS 安裝 Redis]
 
下載安裝包redis-3.0.7.tar.gz
 
解壓
tar -zvxf redis-3.0.7.tar.gz  將解壓後的文件夾放到 /usr/local目錄下
 
編譯測試,接下來在終端中切換到 /usr/local/redis 目錄下,輸入:
sudo make test
 
 
編譯安裝:在終端中輸入命令:
sudo make install
 
 
啓動 Redis,輸入命令
$ redis-server /usr/local/etc/redis.conf &
 
成功啟動!
 
除了透過官方網站的安裝包來安裝以外,也可利用 Mac OS 套件管理工具 Homebrew 來安裝 Redis。
 
樹莓派 安裝 Redis

安裝前先更新樹莓派
sudo apt-get update
sudo apt-get upgrade
 
下載安裝包
cd /home/pi/Downloads
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
 
 
解壓縮
tar -zxf redis-4.0.1.tar.gz
 
編譯及安裝
cd /home/pi/Downloads/redis-4.0.1
sudo make
sudo make install
 
啟動(下述指令為前台啟動模式,帳號退出登陸則程式自動結束)
cp redis.conf /etc/redis.conf
sudo redis-server /etc/redis.conf
 
 
正式使用需要改為後台模式,按以下方法
sudo nano /etc/redis.conf
修改配置文件內容

sudo nano /etc/redis.conf
 
Redis默認用的是本地連接,不支持遠程連接,把#bind 127.0.0.1這一行注釋掉,是為了讓所有ip都可以用來訪問,當然可以用來遠程連接,但是對於redis3.2版本以上的還需要修改一個命令才能支持遠程調用。

bind 127.0.0.1 ::1
protected-mode no
bind x.x.x.x 真實IP
 
保存退出
再次重啟服務
sudo redis-server /etc/redis.conf
 
修改密碼,不需修改配置文件
redis-cli
config set requiress 密碼
 
檢查是否端口為 6379 進程
netstat -nlp
 
查詢 redis pid
ps -ef | grep redis
 
客戶端連接測試
redis-cli —> default 127.0.0.1
redis-cli -h x.x.x.x
 
 
MAC 下安裝配置 redis

透過 brew 安裝
brew install redis
 
查看系統服務啟動狀態
Kevin           63649   0.0  0.0  2453736   1896 s000  S     3:10PM   0:00.02 /usr/local/bin/redis-server *:6379
 
查看 redis 是否有啟動
ps -ef | grep redis
 
修改 redis.conf;相關參數請參考 http://shift-alt-ctrl.iteye.com/blog/1882850
sudo nano /etc/redis.conf
bind 127.0.0.1 ::1
protected-mode no
bind x.x.x.x 真實IP

#指定socket連接空閒時間(秒).如果connection空閒超時,將會關閉連接(TCP socket選項)
##如果為0,表示永不超時.
timeout 0
 
啟動 redis 服務
/usr/local/bin/redis-server /etc/redis.conf &

IT|資料庫|Key-Value|Redis 在 Spring Boot 實現緩存操作

緩存的應用場景

[什麼是緩存?]
在互聯網場景下,尤其2C端產品(比如社交類的微信,手機類的小米. 這類產品的開發)在大流量場景下,需要將一些經常展現和不會頻繁變更的數據,存放在存取速率更快的地方。
 
緩存就是一個存儲器,在技術選型中,常用Redis作為緩存資料庫。緩存主要是在獲取資源方便性能優化的關鍵方面。Redis是一個高性能的key-value 資料庫。
 
[緩存的應用場景有哪些呢?]
比如常見的電商場景,根據商品ID獲取商品信息時,店鋪信息和商品詳情信息就可以緩存在Redis,直接從Redis獲取。減少了去數據庫查詢的次數。但會出現新的問題,就是如何對緩存進行更新?
 
大致流程如下:
獲取商品詳情舉例
a. 從商品 Cache 中獲取商品詳情,如果存在,則返回獲取 Cache 資料返回。
b. 如果不存在,則從商品 DB 中獲取。獲取成功後,將資料存到 Cache 中。則下次獲取商品詳情,就可以從 Cache 就可以得到商品詳情資料。
c. 從商品 DB 中更新或者刪除商品詳情成功後,則從緩存中刪除對應商品的詳情緩存

 
更新缓存的策略

參考《緩存更新的套路》,緩存更新的模式有四種:
1、Cache aside
2、Read through
3、Write through
4、Write behind caching
 
這裡使用的是 「Cache Aside」 策略,此策略可從三個維度來說明:
失效:應用程序先從cache取數據,沒有得到,則從數據庫中取數據,成功後,放到緩存中。
命中:應用程序從cache中取數據,取到後返回。
更新:先把數據存到數據庫中,成功後,再讓緩存失效
 
實作

[執行環境]
Mac OS 10.12.x
JDK 8 +
Redis 3.2.8
Spring Boot 1.5.1.RELEASE
 
 
程式相關說明:
* @comment 首先這裡注入了 RedisTemplate 對象。
* 聯想到 Spring 的 JdbcTemplate ,RedisTemplate 封裝了 RedisConnection,具有連接管理,序列化和 Redis 操作等功能。
* 還有針對 String 的支持對象 StringRedisTemplate。
* Redis 操作視圖接口類用的是 ValueOperations,對應的是 Redis String/Value 操作。
* 還有其他的操作視圖,ListOperations、SetOperations、ZSetOperations 和 HashOperations 。ValueOperations
* 插入緩存是可以設置失效時間,這裡設置的失效時間是 10 s。
 
 
* 1.建立資料庫
    CREATE DATABASE springbootdb;
* 2.建立資料表
   DROP TABLE IF EXISTS  `city`;
   CREATE TABLE `city` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号',
   `province_id` int(10) unsigned  NOT NULL COMMENT '省份编号',
   `city_name` varchar(25) DEFAULT NULL COMMENT '城市名称',
   `description` varchar(25) DEFAULT NULL COMMENT '描述',
   PRIMARY KEY (`id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
* 3.插入數據
    INSERT city VALUES (1 ,1,'新北市','BY ERRUI 的家在新北市');
   4.根據 ID,獲取城市信息
   GET http://127.0.0.1:8080/api/city/1
   5.更新程式信息
   PUT http://127.0.0.1:8080/api/city
   6.刪除程式信息
   DELETE http://127.0.0.1:8080/api/city/2
 
大功告成!