天天看點

Reids基礎筆記 作者:哇塞大嘴好帥Reids基礎筆記 作者:哇塞大嘴好帥

Reids基礎筆記 作者:哇塞大嘴好帥

1.概述

1.1 Redis是什麼

Redis是一個開源的,記憶體中的資料結構存儲系統,它可以作用**資料庫**、**緩存**、**消息中間件**。它支援多種資料結構,如字元串(String)、散列(hashes)、集合(lists)、有序集合(sorted sets)與範圍查詢、butnaos、hyperloglogs和地理空間(geospatial)索引版經常哈尋,Redis内置了 複制(replication),LUA腳本(luascripting),LRU驅動事件(LRU eviction),事務(transactiobns)和不同級别的磁盤持久化(persistence),并通過Redis哨兵(Sentienl)和自動分區(Cluster)提供高可用性(high availability)
           

1.2 Reids能做什麼

​ 1.記憶體存儲,持久化。記憶體是斷電就失去,是以說持久化很重化(rdb、aof)

​ 2.效率高,可以用于告訴緩存

​ 3.釋出訂閱系統

​ 4.吸毒資訊分析

​ 5.計時器,計數器(如浏覽量)

​ 6…

1.3 特性

1.多樣化資料類型

2.叢集

3.持久化

4.事務

2.安裝

2.1 Windows下安裝

​ 1.下載下傳安裝包:https://github.com/dmakic/redis/releases

​ 2.解壓

​ 3.執行redis-server.exe啟動服務

​ 4.使用reids-cli.exe用戶端連接配接reids

​ 輸入指令ping 如果傳回個pong就代表連接配接成功

Reid檔案介紹

​ redis-server.exe : redis啟動服務

​ redis-cli.exe : redis用戶端

​ redis-check-aof.exe : redis檢查持久化檔案是否正确

​ redis-benchmark.exe: redis測試性能

Redis推薦在Linux下使用

2.2 linux下的安裝

參考Linux安裝Redis的筆記
           

3.基本文法

Redis 指令手冊: http://redis.cn/commands.html

檢視是什麼類型

type 鍵
           

檢視剩餘過期時間

ttl 鍵
           

設定資料過期時間 # 設定10秒後過期

從目前資料庫移除此鍵

判斷某個鍵是否存在,如果存在傳回1 不存在傳回0

exists 鍵
           

redis預設有16個資料庫,在redis.conf中有個databases 16

預設使用的是第0個 ,可以使用select 切換資料庫

檢視目前資料庫容量大小 當我們存入一個值 容量就+1

DBSIZE
           

檢視資料庫所有的key

keys *
           

清空目前庫

flushdb
           

清空所有庫

flushall
           

4.基礎知識

4.1 Redis是單線程的

​ Redis是基于記憶體操作的,CPU不是Redis的性能瓶頸,Redis的瓶頸是根據機器的記憶體和網絡的帶寬,既然可以使用單線程實作就可以使用單線程了。

為什麼單線程還這麼快?

核心:redis是将所有的資料全部放在了記憶體中,是以使用單線程效率是最高的。

​ 多線程會産生CPU上下文切換,這是一個很耗時的操作,對于記憶體系統來說秒如果沒有上下文切換效率就是最高的。多次讀寫都是在一個CPU上的,在記憶體的情況來看就是最佳方案。

5.常見五大資料類型

51 String(字元串類型)

設定值
set 鍵名 值
           
取值
get 鍵名
           
追加
append 鍵值 追加的内容
           

當我們追加成功會傳回字元串的追加後的長度

如果我們的鍵不存在就會建立一個新的,就相當于set key

擷取字元串長度
strlen 鍵
           
自增
自減
步長 自增
步長 自減
擷取範圍字元串
替換字元串
建立鍵并且設定過期時間
建立減 如果該鍵不存在則建立 如果存在則建立失敗
一次性設定多個值 批量設定 | 擷取多個值 批量擷取多個值
建立對象
getset 使用 可以用于更新

5.2 list(清單)

list插入值 查詢值
移除值
擷取指定下标的資料
擷取隊列的長度
移除指定的值
保留指定下标區間的資料
移動清單最後一個元素,将他移動到其他清單中
指定下标添加值
在指定值得前方或者後方插入一個值

5.3 set集合

​ set的值不可以重複,也是無序的

添加元素
查詢所有值
檢視元素是否存在
檢視集合個數
删除指定元素
随機擷取元素
随機删除指定的key
将一個值引用到另一個集合
查詢兩個集合之間的差集
查詢兩個集合的交集
查詢兩個集合的合集

5.4 Hash (哈希)

添加 擷取
删除指定值 擷取全部之
擷取hash表的長度
擷取指定鍵是否存在
擷取所有的鍵 擷取所有的值
自增自減

5.5 Zset(有序集合)

查詢所有資料并且帶序号
檢視小于某個序号的值
移除指定元素元素
檢視多少個元素
檢視從大到小序号的值
檢視區間的值有幾個

6.三種特殊資料類型

6.1 geospatial (地理位置)

geospatial可以存放城市次元

有效精度 -180度到 180度

有效次元-85.05112878度到85.05112878度

**次元查詢網站:**http://www.jsons.cn/lngcode/

添加地理位置
擷取指定城市坐标
兩個位置的距離

m辨別機關為米

km表示機關為千米

mi辨別機關為英裡

ft辨別機關為英尺

附近的人

​ 以給定的經緯度為中心,找出某一半徑内的元素

以位置為中心附近的位置

6.2Hyperloglog(基數統計)

做什麼?

​ 如果允許容錯,可以使用Hyperloglog進行計數

什麼是基數

​ A{1,3,5,7,8,9} B{1,3,5,7}

​ 就是查找不重複的元素

基本使用

6.3 Bitmaps(位圖)

​ 他的值隻有0和1

​ 就來做個簽到系統為案例

設定值 --0為未簽到1為簽到
檢視值 --如果傳回0為未簽到如果傳回1為簽到
檢視為1的資料

7.基本的事務操作

7.1事務

​ Redis事務的本質:一組指令的集合,一塊執行!一個事務中的所有指令都會被序列化,在事務執行過程中,會按照順序執行。

​ **特性:**一次性、順序性、排他性!

​ Redis事務沒有隔離級别的概念

​ 所有的指令在事務中,沒有直接被執行,隻有發起執行指令的時候才會執行。

​ Redis單條指令儲存原子性,事務不保證原子性。

7.2 Redis的事務

1.開啟事務(multi)

2.指令入隊 (寫指令)

3.執行事務 (exec)

正常執行事務!
放棄事務
編譯型異常

​ 代碼有問題或者指令有錯誤

​ 如果觸發了事務中所有指令都不會執行

運作時異常

​ 比如1/0報錯,如果事務隊列中存在餘發星,那麼執行指令的時候其他指令都是可以正常執行的,錯誤指令抛出異常

8.加鎖

8.1 悲觀鎖

​ 悲觀鎖認為什麼時候都會出問題,無論做什麼都會加鎖。這樣做特别影響性能。

8.2 樂觀鎖

​ 他認為什麼時候都不會出現問題。更新資料的時候去判斷下,在此期間是否有人修改過這個資料。

8.3 監視

正常執行
并發情況

​ 線程A

線程B

127.0.0.1:6379> set money 10000OK
           
放棄監視 解鎖

9.番外

1.為什麼Reids是6379

Alessia Merz 是一位意大利舞女、女演員。 Redis 作者 Antirez 早年看電視節目,覺得 Merz 在節目中的一些話愚蠢可笑,Antirez 喜歡造“梗”用于平時和朋友們交流,于是造了一個詞 “MERZ”,形容愚蠢,與 “stupid” 含義相同。

後來 Antirez 重新定義了 “MERZ” ,形容”具有很高的技術價值,包含技藝、耐心和勞動,但仍然保持簡單本質“。

到了給 Redis 選擇一個數字作為預設端口号時,Antirez 沒有多想,把 “MERZ” 在手機鍵盤上對應的數字 6379 拿來用了。

​ # Reids 5.08 版本

1.概述

1.1 Redis是什麼

Redis是一個開源的,記憶體中的資料結構存儲系統,它可以作用**資料庫**、**緩存**、**消息中間件**。它支援多種資料結構,如字元串(String)、散列(hashes)、集合(lists)、有序集合(sorted sets)與範圍查詢、butnaos、hyperloglogs和地理空間(geospatial)索引版經常哈尋,Redis内置了 複制(replication),LUA腳本(luascripting),LRU驅動事件(LRU eviction),事務(transactiobns)和不同級别的磁盤持久化(persistence),并通過Redis哨兵(Sentienl)和自動分區(Cluster)提供高可用性(high availability)
           

1.2 Reids能做什麼

​ 1.記憶體存儲,持久化。記憶體是斷電就失去,是以說持久化很重化(rdb、aof)

​ 2.效率高,可以用于告訴緩存

​ 3.釋出訂閱系統

​ 4.吸毒資訊分析

​ 5.計時器,計數器(如浏覽量)

​ 6…

1.3 特性

1.多樣化資料類型

2.叢集

3.持久化

4.事務

2.安裝

2.1 Windows下安裝

​ 1.下載下傳安裝包:https://github.com/dmakic/redis/releases

​ 2.解壓

​ 3.執行redis-server.exe啟動服務

​ 4.使用reids-cli.exe用戶端連接配接reids

​ 輸入指令ping 如果傳回個pong就代表連接配接成功

Reid檔案介紹

​ redis-server.exe : redis啟動服務

​ redis-cli.exe : redis用戶端

​ redis-check-aof.exe : redis檢查持久化檔案是否正确

​ redis-benchmark.exe: redis測試性能

Redis推薦在Linux下使用

2.2 linux下的安裝

參考Linux安裝Redis的筆記
           

3.基本文法

Redis 指令手冊: http://redis.cn/commands.html

檢視是什麼類型

type 鍵
           

檢視剩餘過期時間

ttl 鍵
           

設定資料過期時間 # 設定10秒後過期

從目前資料庫移除此鍵

判斷某個鍵是否存在,如果存在傳回1 不存在傳回0

exists 鍵
           

redis預設有16個資料庫,在redis.conf中有個databases 16

預設使用的是第0個 ,可以使用select 切換資料庫

檢視目前資料庫容量大小 當我們存入一個值 容量就+1

DBSIZE
           

檢視資料庫所有的key

keys *
           

清空目前庫

flushdb
           

清空所有庫

flushall
           

4.基礎知識

4.1 Redis是單線程的

​ Redis是基于記憶體操作的,CPU不是Redis的性能瓶頸,Redis的瓶頸是根據機器的記憶體和網絡的帶寬,既然可以使用單線程實作就可以使用單線程了。

為什麼單線程還這麼快?

核心:redis是将所有的資料全部放在了記憶體中,是以使用單線程效率是最高的。

​ 多線程會産生CPU上下文切換,這是一個很耗時的操作,對于記憶體系統來說秒如果沒有上下文切換效率就是最高的。多次讀寫都是在一個CPU上的,在記憶體的情況來看就是最佳方案。

5.常見五大資料類型

51 String(字元串類型)

設定值
set 鍵名 值
           
取值
get 鍵名
           
追加
append 鍵值 追加的内容
           

當我們追加成功會傳回字元串的追加後的長度

如果我們的鍵不存在就會建立一個新的,就相當于set key

擷取字元串長度
strlen 鍵
           
自增
自減
步長 自增
步長 自減
擷取範圍字元串
替換字元串
建立鍵并且設定過期時間
建立減 如果該鍵不存在則建立 如果存在則建立失敗
一次性設定多個值 批量設定 | 擷取多個值 批量擷取多個值
建立對象
getset 使用 可以用于更新

5.2 list(清單)

list插入值 查詢值
移除值
擷取指定下标的資料
擷取隊列的長度
移除指定的值
保留指定下标區間的資料
移動清單最後一個元素,将他移動到其他清單中
指定下标添加值
在指定值得前方或者後方插入一個值

5.3 set集合

​ set的值不可以重複,也是無序的

添加元素
查詢所有值
檢視元素是否存在
檢視集合個數
删除指定元素
随機擷取元素
随機删除指定的key
将一個值引用到另一個集合
查詢兩個集合之間的差集
查詢兩個集合的交集
查詢兩個集合的合集

5.4 Hash (哈希)

添加 擷取
删除指定值 擷取全部之
擷取hash表的長度
擷取指定鍵是否存在
擷取所有的鍵 擷取所有的值
自增自減

5.5 Zset(有序集合)

查詢所有資料并且帶序号
檢視小于某個序号的值
移除指定元素元素
檢視多少個元素
檢視從大到小序号的值
檢視區間的值有幾個

6.三種特殊資料類型

6.1 geospatial (地理位置)

geospatial可以存放城市次元

有效精度 -180度到 180度

有效次元-85.05112878度到85.05112878度

**次元查詢網站:**http://www.jsons.cn/lngcode/

添加地理位置
擷取指定城市坐标
兩個位置的距離

m辨別機關為米

km表示機關為千米

mi辨別機關為英裡

ft辨別機關為英尺

附近的人

​ 以給定的經緯度為中心,找出某一半徑内的元素

以位置為中心附近的位置

6.2Hyperloglog(基數統計)

做什麼?

​ 如果允許容錯,可以使用Hyperloglog進行計數

什麼是基數

​ A{1,3,5,7,8,9} B{1,3,5,7}

​ 就是查找不重複的元素

基本使用

6.3 Bitmaps(位圖)

​ 他的值隻有0和1

​ 就來做個簽到系統為案例

設定值 --0為未簽到1為簽到
檢視值 --如果傳回0為未簽到如果傳回1為簽到
檢視為1的資料

7.基本的事務操作

7.1事務

​ Redis事務的本質:一組指令的集合,一塊執行!一個事務中的所有指令都會被序列化,在事務執行過程中,會按照順序執行。

​ **特性:**一次性、順序性、排他性!

​ Redis事務沒有隔離級别的概念

​ 所有的指令在事務中,沒有直接被執行,隻有發起執行指令的時候才會執行。

​ Redis單條指令儲存原子性,事務不保證原子性。

7.2 Redis的事務

1.開啟事務(multi)

2.指令入隊 (寫指令)

3.執行事務 (exec)

正常執行事務!
放棄事務
編譯型異常

​ 代碼有問題或者指令有錯誤

​ 如果觸發了事務中所有指令都不會執行

運作時異常

​ 比如1/0報錯,如果事務隊列中存在餘發星,那麼執行指令的時候其他指令都是可以正常執行的,錯誤指令抛出異常

8.加鎖

8.1 悲觀鎖

​ 悲觀鎖認為什麼時候都會出問題,無論做什麼都會加鎖。這樣做特别影響性能。

8.2 樂觀鎖

​ 他認為什麼時候都不會出現問題。更新資料的時候去判斷下,在此期間是否有人修改過這個資料。

8.3 監視

正常執行
并發情況

​ 線程A

線程B

127.0.0.1:6379> set money 10000OK
           
放棄監視 解鎖

9.番外

1.為什麼Reids是6379

Alessia Merz 是一位意大利舞女、女演員。 Redis 作者 Antirez 早年看電視節目,覺得 Merz 在節目中的一些話愚蠢可笑,Antirez 喜歡造“梗”用于平時和朋友們交流,于是造了一個詞 “MERZ”,形容愚蠢,與 “stupid” 含義相同。

後來 Antirez 重新定義了 “MERZ” ,形容”具有很高的技術價值,包含技藝、耐心和勞動,但仍然保持簡單本質“。

到了給 Redis 選擇一個數字作為預設端口号時,Antirez 沒有多想,把 “MERZ” 在手機鍵盤上對應的數字 6379 拿來用了。

繼續閱讀