redis基礎知識詳解
- 2020 年 6 月 5 日
- 筆記
一、redis基礎知識
1、Redis是什麼
Redis是一個開源的key-value存儲系統。
和Memcached類似,它支援存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,Redis支援各種不同方式的排序。
與memcached一樣,為了保證效率,數據都是快取在記憶體中。區別的是Redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
2、 Redis的應用場景
配合關係型資料庫做高速快取
高頻次,熱門訪問的數據,降低資料庫IO
由於其擁有持久化能力,利用其多樣的數據結構存儲特定的數據
最新N個數據→通過List實現按自然事件排序的數據
排行榜,TopN→利用zset(有序集合)
時效性的數據,比如手機驗證碼→Expire過期
計數器,秒殺→原子性,自增方法INCR、DECR
去除大量數據中的重複數據→利用set集合
構建隊列→利用list集合
發布訂閱消息系統→pub/sub模式
3、Redis官網
Redis官方網站 //Redis.io
Redis中文官方網站 //www.Redis.net.cn
手冊網址: //doc.redisfans.com/
4、redis默認有16個資料庫,類似數組下表從零開始,初始默認使用零號庫
- 設置資料庫的數量,默認資料庫為0,可以使用SELECT <dbid>命令在連接上指定資料庫id
databases 16
- select命令切換資料庫
select index
- 查看當前資料庫的key的數量
dbsize
- 清空當前庫
flushdb
- 通殺全部庫
Flushall;
- 統一密碼管理,16個庫都是同樣密碼,要麼都OK要麼一個也連接不上
- Redis索引都是從零開始
- 默認埠是6379
5、redis的單執行緒+多執行緒IO復用技術
多路復用是指使用一個執行緒來檢查多個文件描述符(Socket)的就緒狀態,比如調用select和poll函數,傳入多個文件描述符,如果有一個文件描述符就緒,則返回,否則阻塞直到超時。得到就緒狀態後進行真正的操作可以在同一個執行緒里執行,也可以啟動執行緒執行(比如使用執行緒池)。
Memcached 是 多執行緒 + 鎖 ;Redis 是 單執行緒 + 多路IO復用.
1)阻塞IO, 給女神發一條簡訊, 說我來找你了, 然後就默默的一直等著女神下樓, 這個期間除了等待你不會做其他事情, 屬於備胎做法.
2)非阻塞IO, 給女神發簡訊, 如果不回, 接著再發, 一直發到女神下樓, 這個期間你除了發簡訊等待不會做其他事情, 屬於專一做法.
3)IO多路復用, 是找一個宿管大媽來幫你監視下樓的女生, 這個期間你可以些其他的事情. 例如可以順便看看其他妹子,玩玩王者榮耀, 上個廁所等等. IO復用又包括 select, poll, epoll 模式. 那麼它們的區別是什麼?
3.1 select大媽 每一個女生下樓, select大媽都不知道這個是不是你的女神, 她需要一個一個詢問, 並且select大媽能力還有限, 最多一次幫你監視1024個妹子
3.2 poll大媽不限制盯著女生的數量, 只要是經過宿舍樓門口的女生, 都會幫你去問是不是你女神
3.3 epoll大媽不限制盯著女生的數量, 並且也不需要一個一個去問. 那麼如何做呢? epoll大媽會為每個進宿舍樓的女生臉上貼上一個大字條,上面寫上女生自己的名字, 只要女生下樓了, epoll大媽就知道這個是不是你女神了, 然後大媽再通知你.
上面這些同步IO有一個共同點就是, 當女神走出宿舍門口的時候, 你已經站在宿舍門口等著女神的, 此時你屬於阻塞狀態
接下來是非同步IO的情況
你告訴女神我來了, 然後你就去王者榮耀了, 一直到女神下樓了, 發現找不見你了, 女神再給你打電話通知你, 說我下樓了, 你在哪呢? 這時候你才來到宿舍門口. 此時屬於逆襲做法
二、redis五大數據結構
- String字元串
string是redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value。
string類型是二進位安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。
string類型是Redis最基本的數據類型,一個redis中字元串value最多可以是512M(理論數據)
- hash(類似於java里的map)
Redis hash 是一個鍵值對集合。
Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
類似Java裡面的Map<String,Object>
-
List(列表)
Redis 列表是簡單的字元串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)。
它的底層實際是個鏈表 -
Set(集合)
Redis的Set是string類型的無序集合。它是通過HashTable實現實現的, -
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double類型的分數。
redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。