redis介紹
redis是一個nosql數據庫,是完全開源免費的,是一個高性能的key-value數據庫。
非關係型數據庫和關係型數據庫
- 關係型數據庫有mysql,oralce等,數據是存放在硬盤中的,每次對數據進行操作都是io操作,而io操作的性能相對來說是比較差的;
- 非關係型數據庫有redis等,數據是存放在內存中的,如果redis一旦掛掉,數據可能會丟失,因此一般我們都會選擇持久化機制; redis內存大小是有一個閾值限制的, 一旦超出閾值大小,會有一個淘汰策略;
- jvm內置緩存框架;
redis應用場景
- Token令牌生成;
- 短信驗證碼code;
- 查詢數據緩存 (減輕數據庫壓力);
- 實現計數器;(redis本身是一個單線程,可以保證原子性)
- 分佈式鎖;
- 延遲操作;(如果在一定時間範圍內沒有進行支付,關閉訂單 實現方式對key進行監聽)
- 分佈式消息中間件;(分佈/訂閱 市面上基本上沒有用到)
redis 環境安裝
- https://redis.io/ redis官網地址
- 上傳redis包到linux服務器,並解壓tar -zxvf redis-5.0.6.tar.gz
- cd redis-5.0.6
- 編譯 make -j8
- make PREFIX=~/redis install
redis配置文件說明:
- 將redis設置為後臺啟動:daemonize yes
- 設置redis賬號密碼:requirepass 123456
./redis-cli -h ip -p port -a password
- 設置redis允許ip訪問:bind 0.0.0.0
- redis默認情況下分為16個庫:databases 16
redis線程模型
redis採用nio的io多路複用原則,也就是一個線程去維護多個redis客戶端連接,從而提高併發效率和保證線程安全問題;底層是採用linux的epoll技術避免空輪訓;
redis數據結構
string類型 hash類型 list類型 set類型 sort-set類型
string類型
hash類型
list類型
set類型
redis中如何存放一個java對象
- 存放json對象: set key=user value={"id":"0001", "name":"zhangsan"}
缺點:提取出的json對象需要轉,比較麻煩; - 存放二進制:eg:ssl-sso框架底層是使用二進制進行存儲;
閱讀更多 oldCpatn 的文章