Redis 基礎篇(一)

2021-09-19 10:08:44 字數 3180 閱讀 2772

今天我們來講一講快取

目前,memcache 和 redis 是網際網路分層架構中,最常用的 key/value 快取。

那麼如何選擇呢 ?

下面來看一下兩種快取的比較

redis

mecache

吞吐量十萬左右 qps

達到幾十萬 qps

資料結構

支援多種資料結構,如雜湊,列表,集合,有序集合這類複雜的資料結構

只支援簡單的 key/value 資料結構

持久化1.redis 的定期快照不能保證資料不丟失

2.redis 的 aof 會降低效率,並且不能支援太大的資料量

mecache 無法滿足持久化的需求

高可用redis 天然支援集群功能,可以實現主動複製,讀寫分離

memcache,要想要實現高可用,需要進行二次開發

能儲存的內容大小

儲存的內容比較大,最大為 1m

較小併發量

使用單核

可以使用多核

記憶體分配

redis 是臨時申請空間,可能導致碎片

memcache 使用預分配記憶體池的方式管理記憶體,能夠省去記憶體分配時間

網路模型

非阻塞 io 復用模型,但由於redis還提供一些非kv儲存之外的排序,聚合功能,在執行這些功能時,複雜的cpu計算,會阻塞整個 io 排程

非阻塞 io 復用模型

底層模型

有自己的 vm 機制,理論上能夠儲存比物理記憶體更多的資料,當資料超量時,會引發 swap ,把冷資料刷到磁碟上,會浪費一定的時間去移動和請求

memcache 把所有的資料儲存在物理記憶體裡

總結一下,有持久化需求或者對資料結構和處理有高階要求的應用,選擇redis,其他簡單的 key/value 儲存,選擇 memcache

接下來,我會著重講一下 redis

首先,我們來想一想,redis 為什麼效率這麼高?

簡單概括一下,有下面幾點

1)純記憶體操作,記憶體響應時常大約 100 nm

2)核心是基於非阻塞的 io 多路復用機制,加上reids自身的事件處理模型將 epoll 的連線,讀寫,關閉都轉換為事件。不在網路 io 上浪費時間。

3)單執行緒反而避免了多執行緒的頻繁上下文切換問題

4)c 語言的執行速度更快

那他能用於哪些場景呢?

1.快取,這是最常見的,對於經常需要讀取的資料,可以新增快取

2.排行榜系統, list 和 sortset

4.社交網路,

5訊息佇列系統

6共享 session

7限制訪問

那我們該怎麼使用它呢?

第二步:啟動並連線,進入安裝的資料夾後,在命令欄輸入 bin/redis-server 便可啟動 redis 服務端,輸入 bin/redis-cli 便可進入客戶端,如果你連的是遠端伺服器,需要指定位址​。bin/redis-cli -h host -p port -a password​, 如:redis-cli -h 127.0.0.1 -p 6379 -a "mypass",-h, -p, -a, 分別是主機,埠,密碼​

那麼現在就可以盡情使用 redis 了。

使用前我先來說一下,redis 它到底能存些什麼東西

1.字串

redis 中的字串是乙個位元組序列。redis 中的字串是二進位制安全的,這意味著它們的長度不由任何特殊的終止字元決定。因此,可以在乙個字串中儲存高達512兆位元組的任何內容

示例命令

127.0.0.1:6379> set key "hello redis" 

ok 127.0.0.1:6379> get key  

"hello redis"

2. 雜湊

redis 雜湊/雜湊 (hashes) 是鍵值對的集合。redis 雜湊/雜湊是字串欄位和字串值之間的對映。因此,它們用於表示物件。每個雜湊/雜湊可以儲存多達2^32-1個健-值對

示例命令

ok127.0.0.1:6379> hmget key123 name

3.列表

redis 列表只是字串列表,按插入順序排序。您可以向 redis 列表的頭部或尾部新增元素。列表的最大長度為2^32-1個元素

示例命令

(integer) 3

127.0.0.1:6379> lrange namelist 0 4

1) "oringer"

2) "pear"

4 集合

redis 集合是字串的無序集合。在 redis 中,您可以新增,刪除和測試成員存在的時間 o(1) 複雜性

127.0.0.1:6379> sadd nameset "aa" "bb" "cc" "dd"

(integer) 4

127.0.0.1:6379> smembers nameset

1) "bb"

2) "dd"

3) "cc"

4) "aa"

5 排序集合

redis 可排序集合類似於 redis 集合,是不重複的字元集合。 不同之處在於,排序集合的每個成員都與分數相關聯,這個分數用於按最小分數到最大分數來排序的排序集合。雖然成員是唯一的,但分數值可以重複

示例命令

127.0.0.1:6379> zadd namezset 1 "aaa"

(integer) 1

127.0.0.1:6379> zadd namezset 2 "bbb"

(integer) 1

127.0.0.1:6379> zadd namezset 2 "bbb"

(integer) 0

127.0.0.1:6379> zadd namezset 2 "bbcb"

(integer) 1

127.0.0.1:6379> zadd namezset 3 "ccc"

(integer) 1

127.0.0.1:6379> zrangebyscore namezset 1 3

1) "aaa"

2) "bbb"

3) "bbcb"

4) "ccc"​

127.0.0.1:6379> zrangebyscore namezset 1 2

1) "aaa"

2) "bbb"

3) "bbcb"

這次先到這裡,相信大家對redis已經有乙個初步的認識

初探Redis 基礎篇

作為向web而生的redis,現已經使用得十分廣泛了。依靠其高效能 簡潔設計等深受開發者們喜歡。對redis從基礎學起,抱著知其然到知其所以然的想法,先學會怎麼用,再去深入了解內部運轉。redis官網 redis英文全稱為remote dictionary server,採用c語言開發的開源,基於記...

redis基礎篇 效能問題

零 一 觀察指標 1 cpu 效能監控圖 關注 user 和system的使用率 2 network 效能監控圖 出口流量1 可能存在大key或者高併發查詢 get 2 可能存在rdb快照 增量命令傳輸 新搭建的從庫或者主從切換導致 進口流量 1 代表可能存在高併發寫入 set 3 iops 效能監...

redis基礎篇 redis的基本命令

redis cli p 5566 a password 登入 redis cli a password shutdown 關閉redis redis init script stop 關閉redis auth pwd 輸入密碼 redis cli a password ping 檢視是否存活 sel...