技術(shù)交流
產(chǎn)品典型案例溝通
控制绍昂、告警日志
產(chǎn)品總結(jié)
周會
下周培訓(xùn)內(nèi)容
預(yù)覽
- Redis簡介
- Redis安裝和基礎(chǔ)入門
- Redis數(shù)據(jù)類型
- Redis的事務(wù)埃唯、管道
- Redis的發(fā)布訂閱模式
- Lua腳本開發(fā)
- Redis的使用場景
Redis簡介
Redis是一個使用C編寫的她奥、開源的、Key-Value型、基于內(nèi)存運行并支持持久化的NoSQL數(shù)據(jù)庫峭弟,是當(dāng)前最熱門的NoSql數(shù)據(jù)庫之一攀芯。從2010年3月15日起屯断,Redis的開發(fā)工作由VMware主持。從2013年5月開始,Redis的開發(fā)由Pivotal贊助殖演。
Redis對比
Redis安裝
- 官網(wǎng)下載最新版本 點擊下載
- 解壓后進(jìn)入解壓好的文件夾
- 運行命令
redis-server --service-install redis.windows-service.conf
- 安裝成功氧秘,啟動服務(wù)
net start redis
- bin下有:
5.1. redis-benchmark:性能測試工具,測試Redis在你的系統(tǒng)及配置下的讀寫性能
5.2. redis-check-aof:用于修復(fù)出問題的AOF文件
5.3. redis-cli:Redis命令行操作工具
5.4. redis-server:Redis服務(wù)器啟動程序 - 連接Redis趴久,使用redis-cli丸相,默認(rèn)服務(wù)器
本地
,默認(rèn)端口6379
彼棍,redis-cli -h 服務(wù)器ip -p 端口
- 關(guān)閉Redis服務(wù)灭忠,
shutdown
Redis基礎(chǔ)入門
- 單進(jìn)程單線程
1.1 代碼更清晰,處理邏輯更簡單
1.2 不用去考慮各種鎖的問題滥酥,不存在加鎖釋放鎖操作更舞,沒有因為可能出現(xiàn)死鎖而導(dǎo)致的性能消耗
1.3 不存在多進(jìn)程或者多線程導(dǎo)致的切換而消耗CPU - 多數(shù)據(jù)庫
2.1 Redis每個數(shù)據(jù)庫對外都是以從0開始遞增的數(shù)字來命名,默認(rèn)16個數(shù)據(jù)庫坎吻,默認(rèn)使用0號數(shù)據(jù)庫缆蝉,可以使用Select 數(shù)字來選擇要使用的數(shù)據(jù)庫
2.2 使用Dbsize可以查看當(dāng)前數(shù)據(jù)庫的key的數(shù)量
2.3 可以在多個數(shù)據(jù)庫間移動數(shù)據(jù),使用move key 目的數(shù)據(jù)庫編號就可以了
2.4 使用flushdb可以清除某個數(shù)據(jù)庫的數(shù)據(jù)
2.5 Redis不支持自定義數(shù)據(jù)庫名字
2.6 Redis不支持為每個數(shù)據(jù)庫設(shè)置不同的訪問密碼
2.7 多個數(shù)據(jù)庫之間并不是完全獨立的瘦真,F(xiàn)lushAll可以清空全部的數(shù)據(jù)
2.8 Redis的數(shù)據(jù)庫更像是一個命名空間
Redis的數(shù)據(jù)類型
Redis的key
- 命名建議:對象類型:對象ID:對象屬性
- key的命名刊头,應(yīng)該在可讀的情況下,盡量簡短
- key是字符串類型诸尽,如果中間有空格或者轉(zhuǎn)義字符原杂,要用
""
或者''
Redis的Value支持五種類型
- String:字符串,可以存儲String您机、Integer穿肄、Float型的數(shù)據(jù),甚至是二進(jìn)制數(shù)
據(jù)际看,一個字符串最大容量是512M - List:字符串List咸产,底層實現(xiàn)上不是數(shù)組,而是鏈表仲闽,也就是說在頭部和尾部插
入一個新元素脑溢,其時間復(fù)雜度是常數(shù)級別的;其弊端是:元素定位比數(shù)組慢 - Set:字符串Set赖欣,無序不可重復(fù)屑彻,是通過HashTable實現(xiàn)的
- Hash:按Hash方式來存放字符串
5.ZSet:字符串Set,有序且不可重復(fù)顶吮,根據(jù)Score來排序社牲。底層使用散列表和跳躍
表來實現(xiàn),所以讀取中間部分?jǐn)?shù)據(jù)也很快
Redis的事務(wù)悴了、管道
Redis的發(fā)布訂閱模式
Redis的發(fā)布訂閱模式可以實現(xiàn)進(jìn)程間的消息傳遞
發(fā)布訂閱模式的操作命令
- publish:發(fā)布消息膳沽,格式是publish channel 消息
- subscribe:訂閱頻道汗菜,格式是subscribe channel,可以是多個channel
- psubscribe:訂閱頻道挑社,格式是psubscribe channel,支持glob風(fēng)格的通配符
- unsubscribe:取消訂閱巡揍,格式是unsubscribe channel痛阻,不指定頻道表示取消所有subscribe命令的訂閱
- punsubscribe:取消訂閱,格式是punsubscribe channel腮敌,不指定頻道表示取消所有psubscribe命令的訂閱阱当,注意這里匹配模式的時候,是不會將通配符展開的糜工,是嚴(yán)格進(jìn)行字符串匹配的弊添,比如: punsubscribe * 是無法退定c1.的,必須嚴(yán)格使用punsubscribe c1.才可以
- PUBSUB:查看頻道
Lua腳本開發(fā)
使用腳本的好處
- 減少網(wǎng)絡(luò)開銷
- 原子操作:Redis會把腳本當(dāng)作一個整體來執(zhí)行捌木,中間不會插入其它命令
- 復(fù)用:腳本會永久保存 Redis 中, 其他客戶端可繼續(xù)使用
Redis的使用場景
- 緩存
- 取最新N個數(shù)據(jù)的操作油坝,如:可以將最新的50條評論的ID放在List集合
- 排行榜類的應(yīng)用,取TOP N操作刨裆,比如按頂?shù)拇螖?shù)排序
- 計數(shù)器應(yīng)用
- 存儲關(guān)系:比如社交關(guān)系澈圈,比如Tag等
- 獲取某段時間所有數(shù)據(jù)排重值,使用set帆啃,比如某段時間訪問的用戶ID瞬女,或者是客戶端IP
- 構(gòu)建隊列系統(tǒng),List可以構(gòu)建棧和隊列努潘,使用zset可以構(gòu)建優(yōu)先級隊列
- 實時分析系統(tǒng)诽偷,比如:訪問頻率控制
- 模擬類似于HttpSession這種需要設(shè)定過期時間的功能
- Pub/Sub構(gòu)建實時消息系統(tǒng)
- 記錄日志