日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【数据库开发】Redis key-value内存数据库介绍

發(fā)布時間:2025/4/14 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据库开发】Redis key-value内存数据库介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Redis是一個開源的,先進的 key-value 存儲可用于構(gòu)建高性能,可擴展的 Web 應(yīng)用程序的解決方案。Redis官方網(wǎng)網(wǎng)站是:http://www.redis.io/,如下:

Redis 有三個主要使其有別于其它很多競爭對手的特點:
  • Redis是完全在內(nèi)存中保存數(shù)據(jù)的數(shù)據(jù)庫,使用磁盤只是為了持久性目的;?
  • Redis相比許多鍵值數(shù)據(jù)存儲系統(tǒng)有相對豐富的數(shù)據(jù)類型;?
  • Redis可以將數(shù)據(jù)復(fù)制到任意數(shù)量的從服務(wù)器中;?

Redis優(yōu)點

  • 異常快速?:?Redis是非??斓?#xff0c;每秒可以執(zhí)行大約110000設(shè)置操作,81000個/每秒的讀取操作。

  • 支持豐富的數(shù)據(jù)類型?:?Redis支持最大多數(shù)開發(fā)人員已經(jīng)知道如列表,集合,可排序集合,哈希等數(shù)據(jù)類型。

    這使得在應(yīng)用中很容易解決的各種問題,因為我們知道哪些問題處理使用哪種數(shù)據(jù)類型更好解決。
  • 操作都是原子的?:?所有?Redis?的操作都是原子,從而確保當(dāng)兩個客戶同時訪問?Redis?服務(wù)器得到的是更新后的值(最新值)。

  • MultiUtility工具:Redis是一個多功能實用工具,可以在很多如:緩存,消息傳遞隊列中使用(Redis原生支持發(fā)布/訂閱),在應(yīng)用程序中,如:Web應(yīng)用程序會話,網(wǎng)站頁面點擊數(shù)等任何短暫的數(shù)據(jù);

Redis環(huán)境

要在 Ubuntu 上安裝?Redis,打開終端,然后輸入以下命令: $sudo apt-get update $sudo apt-get install redis-server 這將在您的計算機上安裝Redis

啟動 Redis

$redis-server

查看 redis 是否還在運行

$redis-cli 這將打開一個 Redis 提示符,如下圖所示: redis 127.0.0.1:6379> 在上面的提示信息中:127.0.0.1?是本機的IP地址,6379是?Redis?服務(wù)器運行的端口。現(xiàn)在輸入?PING?命令,如下圖所示: redis 127.0.0.1:6379> ping PONG 這說明現(xiàn)在你已經(jīng)成功地在計算機上安裝了?Redis。

在Ubuntu上安裝Redis桌面管理器 要在Ubuntu?上安裝?Redis桌面管理,可以從?http://redisdesktop.com/download?下載包并安裝它。 Redis?桌面管理器會給你用戶界面來管理?Redis?鍵和數(shù)據(jù)。

Redis數(shù)據(jù)類型

Redis?支持5種數(shù)據(jù)類型,說明如下:

字符串

Redis?字符串是一個字節(jié)序列。在?Redis?中字符串是二進制安全的,這意味著它們沒有任何特殊終端字符來確定長度,所以可以存儲任何長度為?512?兆的字符串。

示例

redis 127.0.0.1:6379> SET name "yiibai" OK redis 127.0.0.1:6379> GET name "yiibai" 在上面的例子中,SET?和?GET?是?Redis?命令,name?和?"yiibai"?是存儲在?Redis?的鍵和字符串值。

哈希

Redis哈希是鍵值對的集合。?Redis哈希是字符串字段和字符串值之間的映射,所以它們用來表示對象。

示例

redis 127.0.0.1:6379> HMSET user:1 username yiibai password yiibai points 200 OK redis 127.0.0.1:6379> HGETALL user:11) "username" 2) "yiibai" 3) "password" 4) "yiibai" 5) "points" 6) "200" 在上面的例子中,哈希數(shù)據(jù)類型用于存儲包含用戶基本信息的用戶對象。這里 HSET,HEXTALL 是 Redis 命令同時?user:1?也是一個鍵。

列表

Redis?列表是簡單的字符串列表,通過插入順序排序。可以添加一個元素到?Redis?列表的頭部或尾部。

示例

redis 127.0.0.1:6379> lpush tutoriallist redis (integer) 1 redis 127.0.0.1:6379> lpush tutoriallist mongodb (integer) 2 redis 127.0.0.1:6379> lpush tutoriallist rabitmq (integer) 3 redis 127.0.0.1:6379> lrange tutoriallist 0 101) "rabitmq" 2) "mongodb" 3) "redis" 列表的最大長度為??232?- 1?個元素(4294967295,每個列表的元素超過四十億)。

集合

Redis?集合是字符串的無序集合。在?Redis?可以添加,刪除和測試成員存在的時間復(fù)雜度為?O(1)。

示例

redis 127.0.0.1:6379> sadd tutoriallist redis (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist mongodb (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq (integer) 0 redis 127.0.0.1:6379> smembers tutoriallist1) "rabitmq" 2) "mongodb" 3) "redis" 注:在上面的例子中?rabitmq?被添加兩次,但由于它是只集合具有唯一特性。集合中的成員最大數(shù)量為?232?- 1(4294967295,每個集合有超過四十億條記錄)。

集合排序

不同的是,一個有序集合的每個成員都可以排序,就是為了按有序集合排序獲取它們,按權(quán)重分值從最小到最大排序。雖然成員都是獨一無二的,按權(quán)重分?jǐn)?shù)值可能會重復(fù)。

示例

redis 127.0.0.1:6379> zadd tutoriallist 0 redis (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 10001) "redis" 2) "mongodb" 3) "rabitmq"

Redis鍵

Redis?中的?keys?命令用于管理?redis?中的鍵。Redis?keys命令使用的語法如下所示:

語法

redis 127.0.0.1:6379> COMMAND KEY_NAME

示例

redis 127.0.0.1:6379> SET yiibai redis OK redis 127.0.0.1:6379> DEL yiibai (integer) 1 在上面的例子中?DEL?是一個命令,而?yiibai?是一個鍵。如果鍵被成功刪除,則該命令的輸出將是(整數(shù))1,否則這將是(整數(shù))0;

Redis字符串

Redis?的字符串命令用于管理?redis?的字符串值。Redis?的字符串命令語法的使用如下所示:

語法

redis 127.0.0.1:6379> COMMAND KEY_NAME

示例

redis 127.0.0.1:6379> SET yiibai redis OK redis 127.0.0.1:6379> GET yiibai "redis" 在上面示例中?SET?和?GET?是?Redis?的命令,這里?yiibai?就是一個鍵(key);

Redis哈希

Redis哈希是字符串字段和字符串值之間的映射,所以它是用來表示對象的一個完美的數(shù)據(jù)類型,Redis?的哈希值最多可存儲超過4十億字段-值對。

示例

redis 127.0.0.1:6379> HMSET yiibai name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000 OK redis 127.0.0.1:6379> HGETALL yiibai1) "name" 2) "redis tutorial" 3) "description" 4) "redis basic commands for caching" 5) "likes" 6) "20" 7) "visitors" 8) "23000" 在上面的例子,我們在設(shè)置一個名為?yiibai?Redis的哈希的教程詳細(xì)信息(name,?description,?likes,?visitors)。

Redis列表

Redis列表是簡單的字符串列表,通過插入順序排序。您可以在Redis?列表的頭或列表尾添加元素。列表的最大長度為??232?- 1?個元素(4294967295,每個列表可有超過四十億個元素)。

示例

redis 127.0.0.1:6379> LPUSH tutorials redis (integer) 1 redis 127.0.0.1:6379> LPUSH tutorials mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH tutorials mysql (integer) 3 redis 127.0.0.1:6379> LRANGE tutorials 0 101) "mysql" 2) "mongodb" 3) "redis" 在上面的例子中的三個值由命令LPUSH?插入到?redis?名稱為?tutorials?的列表。

Redis集合

Redis集合是唯一字符串的無序集合。唯一集合是不允許數(shù)據(jù)有重復(fù)的鍵的。在?Redis?集合中添加,刪除和測試成會是否存的時間復(fù)雜度為O(1)(恒定的時間,無論集合內(nèi)包含元素的數(shù)量)。集合的最大長度為??232?- 1?個元素(4294967295,每個集合中超過四十億個元素)。

示例

redis 127.0.0.1:6379> SADD yiibai redis (integer) 1 redis 127.0.0.1:6379> SADD yiibai mongodb (integer) 1 redis 127.0.0.1:6379> SADD yiibai mysql (integer) 1 redis 127.0.0.1:6379> SADD yiibai mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS yiibai1) "mysql" 2) "mongodb" 3) "redis" 在上面的例子中的三個值被?Redis?的命令SADD插入到一個名為?yiibai 集合。

Redis有序集合

Redis的有序集合類似于?Redis?的集合,但是存儲的值在集合中具有唯一性。另外有序集合的每個成員都使用分值(score)的東西,這個分值就是用于將有序集合排序,從分值最小到最大來排序。

在?Redis?有序集合添加,刪除和測試成員的存在的時間復(fù)雜度為?O(1)(恒定時間,無論集合內(nèi)包含元素的數(shù)量)。列表的最大長度為?232?- 1?個元素(4294967295,每個集合的元素超過四十億)。?

示例

redis 127.0.0.1:6379> ZADD yiibai 1 redis (integer) 1 redis 127.0.0.1:6379> ZADD yiibai 2 mongodb (integer) 1 redis 127.0.0.1:6379> ZADD yiibai 3 mysql (integer) 1 redis 127.0.0.1:6379> ZADD yiibai 3 mysql (integer) 0 redis 127.0.0.1:6379> ZADD yiibai 4 mysql (integer) 0 redis 127.0.0.1:6379> ZRANGE yiibai 0 10 WITHSCORES1) "redis" 2) "1" 3) "mongodb" 4) "2" 5) "mysql" 6) "4" 在上面的例子中的三個值及其分值被?ZADD?命令插入一個名稱為?yiibai?的?redis?有序集合中

Redis HyperLogLog


Redis HyperLogLog 是用來做基數(shù)統(tǒng)計的算法,HyperLogLog 的優(yōu)點是,在輸入元素的數(shù)量或者體積非常非常大時,計算基數(shù)所需的空間總是固定 的、并且是很小的。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內(nèi)存,就可以計算接近 2^64 個不同元素的基 數(shù)。這和計算基數(shù)時,元素越多耗費內(nèi)存就越多的集合形成鮮明對比。但是,因為 HyperLogLog 只會根據(jù)輸入元素來計算基數(shù),而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。


示例

下面的例子說明了?HyperLogLog?Redis?的工作原理: redis 127.0.0.1:6379> PFADD tutorials "redis"1) (integer) 1redis 127.0.0.1:6379> PFADD tutorials "mongodb"1) (integer) 1redis 127.0.0.1:6379> PFADD tutorials "mysql"1) (integer) 1redis 127.0.0.1:6379> PFCOUNT tutorials(integer) 3

Redis發(fā)布訂閱

Redis訂閱和發(fā)布實現(xiàn)了通訊系統(tǒng),發(fā)件人(在?Redis?中的術(shù)語稱為發(fā)布者)發(fā)送郵件,而接收器(訂戶)接收它們。信息傳輸?shù)逆溌贩Q為通道。Redis?一個客戶端可以訂閱任意數(shù)量的通道。

示例

以下舉例說明發(fā)布訂閱用戶如何工作。在下面的例子給出一個客戶端訂閱的通道命名?redisChat 。 redis 127.0.0.1:6379> SUBSCRIBE redisChatReading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redisChat" 3) (integer) 1 現(xiàn)在,兩個客戶端都在同一個通道名:redisChat?上發(fā)布消息,上述訂閱客戶端接收消息。 redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"(integer) 1redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by tutorials point"(integer) 11) "message" 2) "redisChat" 3) "Redis is a great caching technique" 1) "message" 2) "redisChat" 3) "Learn redis by tutorials point"

Redis事務(wù)

Redis事務(wù)允許一組命令在單一步驟中執(zhí)行。事務(wù)有兩個屬性,說明如下:
  • 在一個事務(wù)中的所有命令作為單個獨立的操作順序執(zhí)行。在Redis事務(wù)中的執(zhí)行過程中而另一客戶機發(fā)出的請求,這是不可以的;
  • Redis事務(wù)是原子的。原子意味著要么所有的命令都執(zhí)行,要么都不執(zhí)行;

示例

Redis?事務(wù)由指令?MULTI?發(fā)起的,之后傳遞需要在事務(wù)中和整個事務(wù)中,最后由?EXEC?命令執(zhí)行所有命令的列表。 redis 127.0.0.1:6379> MULTI OK List of commands here redis 127.0.0.1:6379> EXEC

示例

下面的例子說明了?Redis?的事務(wù)是如何開始和執(zhí)行。 redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET tutorial redis QUEUED redis 127.0.0.1:6379> GET tutorial QUEUED redis 127.0.0.1:6379> INCR visitors QUEUED redis 127.0.0.1:6379> EXEC1) OK 2) "redis" 3) (integer) 1

Redis腳本

Redis?腳本是使用Lua解釋腳本用來評估(計算)。從?Redis?2.6.0?版本開始內(nèi)置這個解釋器。命令?EVAL?用于執(zhí)行?腳本命令。

語法

EVAL命令的基本語法如下: redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

示例

下面的例子說明了?Redis?腳本是如何工作的: redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second1) "key1" 2) "key2" 3) "first" 4) "second"

Redis連接

Redis?的連接命令基本上都用于管理?Redis服務(wù)器與客戶端連接。

示例

下面的例子說明了一個客戶端在Redis服務(wù)器上,如何檢查服務(wù)器是否正在運行并驗證自己。 redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG

Redis備份

Redis的SAVE命令用于創(chuàng)建當(dāng)前?Redis?數(shù)據(jù)庫的備份。

語法

Redis 的 SAVE 命令的基本語法如下所示: 127.0.0.1:6379> SAVE

示例

以下示例顯示了如何在Redis的當(dāng)前數(shù)據(jù)庫中創(chuàng)建備份。 127.0.0.1:6379> SAVEOK 在執(zhí)行此命令之后,將在?redis?目錄中創(chuàng)建一個?dump.rdb?文件。

恢復(fù)?Redis?數(shù)據(jù) 要恢復(fù)?redis?數(shù)據(jù)只需要要將?Redis?的備份文件(dump.rdb)放到?Redis?的目錄中,并啟動服務(wù)器。要了解知道?Redis?目錄在什么位置,可使用?CONFIG?命令,如下所示: 127.0.0.1:6379> CONFIG get dir1) "dir" 2) "/user/yiibai/redis-2.8.13/src" 在上面的命令命令輸出為?/user/yiibai/redis-2.8.13/src?就是使用的?Redis?目錄,也就是?Redis?的服務(wù)器安裝的目錄。

Bgsave

創(chuàng)建?Redis?的備份也可以使用備用命令?BGSAVE?。此命令將啟動備份過程,并在后臺運行此。

示例

127.0.0.1:6379> BGSAVEBackground saving started

Redis安全

Redis?數(shù)據(jù)庫可以配置安全保護的,所以任何客戶端在連接執(zhí)行命令時需要進行身份驗證。為了確保?Redis?的安全,需要在配置文件設(shè)置密碼。

示例

下面給出的例子顯示的步驟是用來確保?Redis?實例的安全。 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "" 默認(rèn)情況下此屬性是空的,這意味著此實例沒有設(shè)置密碼??梢酝ㄟ^執(zhí)行以下命令來修改設(shè)置此屬性 127.0.0.1:6379> CONFIG set requirepass "yiibaipass" OK 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "yiibaipass" 如果客戶端運行命令無需驗證設(shè)置密碼,那么(錯誤)NOAUTH?需要驗證。錯誤將返回。因此,客戶端需要使用?AUTH?命令來驗證自己的身份信息。

語法

AUTH命令的基本語法如下所示: 127.0.0.1:6379> AUTH password

Redis性能測試

Redis的基準(zhǔn)性能測試是通過同時運行?N?個命令以檢查?Redis?性能的工具。

語法

Redis的基準(zhǔn)測試的基本語法如下所示: redis-benchmark [option] [option value]

示例

下面給出的示例是通過調(diào)用?100000?個(次)命令來檢查?Redis。 redis-benchmark -n 100000PING_INLINE: 141043.72 requests per second PING_BULK: 142857.14 requests per second SET: 141442.72 requests per second GET: 145348.83 requests per second INCR: 137362.64 requests per second LPUSH: 145348.83 requests per second LPOP: 146198.83 requests per second SADD: 146198.83 requests per second SPOP: 149253.73 requests per second LPUSH (needed to benchmark LRANGE): 148588.42 requests per second LRANGE_100 (first 100 elements): 58411.21 requests per second LRANGE_300 (first 300 elements): 21195.42 requests per second LRANGE_500 (first 450 elements): 14539.11 requests per second LRANGE_600 (first 600 elements): 10504.20 requests per second MSET (10 keys): 93283.58 requests per second

Redis客戶端連接

如果啟用了Redis?的接受配置監(jiān)聽,客戶端可在TCP端口上與Unix套接字連接。以下操作執(zhí)行后新的客戶端連接被服務(wù)器接受:
  • 客戶端套接字在非阻塞狀態(tài),因為?Redis?使用復(fù)用和非阻塞I/O;
  • TCP_NODELAY選項設(shè)定以確保不會在連接時延遲;
  • 創(chuàng)建一個可讀的文件事件,以便?Redis?能夠盡快收集客戶端查詢作為新的數(shù)據(jù)可被套接字讀取;

客戶端最大連接數(shù)量 在Redis的配置文件(redis.conf)有一個屬性?maxclients?,它描述了可以連接到?Redis?的客戶的最大數(shù)量。命令的基本語法是: config get maxclients1) "maxclients" 2) "10000" 默認(rèn)情況下此屬性設(shè)置為?10000(取決于OS的文件標(biāo)識符限制最大數(shù)量),但可以修改這個屬性。

示例

在下面給出的例子我們已經(jīng)設(shè)置客戶端最大連接數(shù)量為?100000,在之后啟動服務(wù)器: redis-server --maxclients 100000

Redis管道

Redis是一個TCP服務(wù)器,支持請求/響應(yīng)協(xié)議。在?redis?中一個請求完成以下步驟:
  • 客戶端發(fā)送一個查詢給服務(wù)器,并從套接字中讀取,通常服務(wù)器的響應(yīng)是在一個封閉的方式;
  • 服務(wù)器處理命令并將響應(yīng)返回給客戶端;

管道的含義 管道的基本含義是:客戶端可以發(fā)送多個請求給服務(wù)器,而不等待全部響應(yīng),最后在單個步驟中讀取所有響應(yīng)。

示例

要檢查?Redis?管道只需要啟動?Redis?實例,并在終端輸入以下命令。 $(echo -en "PING\r\n SET tutorial redis\r\nGET tutorial\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379+PONG +OK redis :1 :2 :3 在上面的例子所示,了解使用?PING?命令連接?Redis,之后我們在?Redis?設(shè)定一個名為?tutorial?字符串值,之后拿到這個鍵對應(yīng)的值并增加訪問人數(shù)的三倍。在結(jié)果中,我們可以看到所有的命令都提交給?Redis?一次,Redis是給單步輸出所有命令。

通道的好處 這種技術(shù)的好處是顯著提高協(xié)議的性能。管道localhost?獲得至少達(dá)到百倍的網(wǎng)絡(luò)連接速度。

Redis分區(qū)

分區(qū)是將數(shù)據(jù)分割成多個?Redis?實例,使每個實例將只包含鍵子集的過程。

分區(qū)的好處

  • 它允許更大的數(shù)據(jù)庫,使用多臺計算機的內(nèi)存總和。如果不分區(qū),只是一臺計算機有限的內(nèi)存可以支持的數(shù)據(jù)存儲;
  • 它允許按比例在多內(nèi)核和多個計算機計算,以及網(wǎng)絡(luò)帶寬向多臺計算機和網(wǎng)絡(luò)適配器;

分區(qū)的劣勢
  • 涉及多個鍵的操作通常不支持。例如,如果它們被存儲在被映射到不同的?Redis?實例鍵,則不能在兩個集合之間執(zhí)行交集;
  • 涉及多個鍵時,Redis事務(wù)無法使用;
  • 分區(qū)粒度是一個鍵,所以它不可能使用一個鍵和一個非常大的有序集合分享一個數(shù)據(jù)集;
  • 當(dāng)使用分區(qū),數(shù)據(jù)處理比較復(fù)雜,比如要處理多個RDB/AOF文件,使數(shù)據(jù)備份需要從多個實例和主機聚集持久性文件;
  • 添加和刪除的容量可能會很復(fù)雜。例如:Redis的Cluster支持?jǐn)?shù)據(jù)在運行時添加和刪除節(jié)點是透明平衡的,但其他系統(tǒng),如客戶端的分區(qū)和代理服務(wù)器不支持此功能

分區(qū)類型

Redis?提供有兩種類型的分區(qū)。假設(shè)我們有四個?redis?實例:R0,R1,R2,R3,分別表示用戶用戶如:user:1,?user:2,?...等等

范圍分區(qū) 范圍分區(qū)被映射對象指定?Redis?實例在一個范圍內(nèi)完成。 在我們的例子中,用戶從ID為?0?至?ID10000?將進入實例?R0,而用戶?ID?10001到ID?20000?將進入實例?R1?等等。

散列分區(qū) 在這種類型的分區(qū)是一個散列函數(shù)(例如,模數(shù)函數(shù))用于將鍵轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù),然后存儲在不同的?redis?實例。

轉(zhuǎn)載于:https://www.cnblogs.com/huty/p/8517466.html

總結(jié)

以上是生活随笔為你收集整理的【数据库开发】Redis key-value内存数据库介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。