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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

数据库

Redis 小结

發(fā)布時(shí)間:2023/12/2 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、redis簡(jiǎn)介

  redis是一款基于C語(yǔ)言編寫(xiě)的,開(kāi)源的非關(guān)系型數(shù)據(jù)庫(kù),由于其卓越的數(shù)據(jù)處理機(jī)制(按照規(guī)則,將常用的部分?jǐn)?shù)據(jù)放置緩存,其余數(shù)據(jù)序列化到硬盤),大家也通常將其當(dāng)做緩存服務(wù)器來(lái)使用。

  在很多時(shí)候,大家還認(rèn)為其只是一個(gè)key-value數(shù)據(jù)庫(kù)服務(wù)器。然而redis還支持多種數(shù)據(jù)類型的存儲(chǔ),應(yīng)用范圍也更加廣泛

  redis支持的數(shù)據(jù)類型有string字符串。list列表,hash哈希,set集合,及zset(sorted set:有序集合)。

  redis支持?jǐn)?shù)據(jù)持久化(每隔一段時(shí)間會(huì)將內(nèi)存中的數(shù)據(jù)寫(xiě)入粗盤;如果機(jī)器故障重啟,還可以將硬盤的數(shù)據(jù)反寫(xiě)會(huì)內(nèi)存),保證了告訴處理數(shù)據(jù)操作的同事,增加了數(shù)據(jù)的安全性;同時(shí)也支持?jǐn)?shù)據(jù)數(shù)據(jù)庫(kù)的主從復(fù)制、發(fā)布訂閱、事務(wù)支持、管道和虛擬內(nèi)存

?

二、redis優(yōu)勢(shì)

和其他nosql相比,redis的性能會(huì)更加卓越;同時(shí),支持排名集合計(jì)算,消息隊(duì)列等操作。

三、redis和memcached的區(qū)別

  1、兩者都是內(nèi)存數(shù)據(jù)庫(kù),效率方面差別不大

  2、redis不僅僅支持key-value數(shù)據(jù)格式,還支持list、set、hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)

  3、memcached是基于內(nèi)存的key-value緩存服務(wù)器,完全基于內(nèi)存,如果不考慮異常關(guān)機(jī)造成數(shù)據(jù)丟失的情況下,可以考慮;但是redis可以做數(shù)據(jù)持久化,因而數(shù)據(jù)安全性方面沒(méi)有redis做的好

  4、redis可以做故障恢復(fù),將數(shù)據(jù)從硬盤恢復(fù)到內(nèi)存

  5、redis支持?jǐn)?shù)據(jù)備份,即主從備份

四、redis的安裝

五、redis數(shù)據(jù)類型

  1、string字符串

    string是redis最基本的數(shù)據(jù)類型,存取方便,可以存儲(chǔ)一切可以序列化的數(shù)據(jù)對(duì)象,取出后可以反序列化為存儲(chǔ)之前的數(shù)據(jù)對(duì)象進(jìn)行使用

    在實(shí)際操作中,通過(guò)set存儲(chǔ),get獲取;name即為key值,liming為存儲(chǔ)對(duì)象

    注意:value存儲(chǔ)最大數(shù)據(jù)為512M

    使用場(chǎng)景:常規(guī)key-value緩存應(yīng)用。常規(guī)計(jì)數(shù): 微博數(shù), 粉絲數(shù)。

    

127.0.0.1:6379> set name liming OK 127.0.0.1:6379> get name "liming"

  

  2、list列表

    list是數(shù)據(jù)列表格式,按照順序插入數(shù)據(jù),也可以插入數(shù)據(jù)到列表的頭部或者尾部在實(shí)際操作中是通過(guò)lpust來(lái)存儲(chǔ)數(shù)據(jù)列表。lrange來(lái)獲取數(shù)據(jù)列表,取出一個(gè)值后,則在當(dāng)前隊(duì)列中消失

    基本語(yǔ)法:存儲(chǔ)lpush ?key value 例如(127.0.0.1:6379> lpush list C#);獲取lrange key 查詢索引開(kāi)始 ?查詢索引結(jié)束,例如(127.0.0.1:6379> lrange list 0 2)

    列表最多可存儲(chǔ) 232?- 1 元素 (4294967295, 每個(gè)列表可存儲(chǔ)40多億)。

    Redis list的實(shí)現(xiàn)為一個(gè)雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過(guò)帶來(lái)了部分額外的內(nèi)存開(kāi)銷,Redis內(nèi)部的很多實(shí)現(xiàn),包括發(fā)送緩沖隊(duì)列等也都是用的這個(gè)數(shù)據(jù)結(jié)構(gòu)。

    Redis的list是每個(gè)子元素都是String類型的雙向鏈表,可以通過(guò)push和pop操作從列表的頭部或者尾部添加或者刪除元素,這樣List即可以作為棧,也可以作為隊(duì)列。

    應(yīng)用場(chǎng)景:list的應(yīng)用場(chǎng)景非常多,也是Redis最重要的數(shù)據(jù)結(jié)構(gòu)之一,比如twitter的關(guān)注列表,粉絲列表等都可以用Redis的list結(jié)構(gòu)來(lái)實(shí)現(xiàn)。

127.0.0.1:6379> lpush list redis (integer) 1 127.0.0.1:6379> lpush list rabbitMQ (integer) 2 127.0.0.1:6379> lpush list sql (integer) 3 127.0.0.1:6379> lpush list C# (integer) 4 127.0.0.1:6379> lpush list python (integer) 5 127.0.0.1:6379> lpush list java (integer) 6 127.0.0.1:6379> lrange 0 2 (error) ERR wrong number of arguments for 'lrange' command 127.0.0.1:6379> lrange list 0 2 1) "java" 2) "python" 3) "C#"

  

  3、hash哈希

    hash 是一種key-value 鍵值對(duì)集合,類似數(shù)據(jù)字典,通過(guò)hmset 來(lái)存儲(chǔ),hget來(lái)獲取

    語(yǔ)法:hmset 哈希名稱 ? key1 value1 ? key2 value2 …… ? 例如(127.0.0.1:6379> hmset myhash name1 'licy' name2 'lili' name3 'hanmeimei')

    每個(gè) hash 可以存儲(chǔ) 232?-1 鍵值對(duì)(40多億)。

    使用場(chǎng)景:存儲(chǔ)部分變更數(shù)據(jù),如用戶信息等。

127.0.0.1:6379> hmset myhash name1 'licy' name2 'lili' name3 'hanmeimei' OK 127.0.0.1:6379> hget myhash1 name1 (nil) 127.0.0.1:6379> hget myhash name1 "licy" 127.0.0.1:6379>

  

  4、set集合

    set集合是一種無(wú)序的數(shù)據(jù)集合,添加用 sadd,獲取用smembers,添加成功則返回1,已經(jīng)存在則返回0,添加失敗則返回錯(cuò)誤信息

    語(yǔ)法:存儲(chǔ) ?sadd 集合名稱 ?數(shù)據(jù)值(例如:127.0.0.1:6379> sadd myset redis) ;獲取smembers 集合名稱(例如:127.0.0.1:6379> smembers myset)

    注:集合中最大的成員數(shù)為 232?- 1(4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。

    應(yīng)用場(chǎng)景:求交集;求差集;求并集;獲取某時(shí)間段內(nèi)的數(shù)據(jù)去重

127.0.0.1:6379> sadd myset redis (integer) 1 127.0.0.1:6379> sadd myset C# (integer) 1 127.0.0.1:6379> sadd myset java (integer) 1 127.0.0.1:6379> sadd myset python (integer) 1 127.0.0.1:6379> smembers myset 1) "java" 2) "C#" 3) "redis" 4) "python"

  

  5、zset有序集合

    zset是一種有序集合,和string類似,多了個(gè)增加分?jǐn)?shù),獲取時(shí)會(huì)按照分?jǐn)?shù)小到大進(jìn)行數(shù)據(jù)返回

    key值是唯一的,但是分?jǐn)?shù)可以重復(fù)

    語(yǔ)法:存儲(chǔ) ?zadd 集合名詞 ?分?jǐn)?shù) ?數(shù)據(jù)值 (例如:127.0.0.1:6379> zadd myzset2 ?3 sql);獲取 ZRANGEBYSCORE 集合名稱 ?索引開(kāi)始 ?索引結(jié)束(例如:127.0.0.1:6379> ZRANGEBYSCORE myzset2 0 10)

    應(yīng)用場(chǎng)景:顯示最新的列表數(shù)據(jù)項(xiàng)目;排行榜應(yīng)用獲取top N操作;求交集;求差集;求并集;獲取某時(shí)間段內(nèi)的數(shù)據(jù)去重

127.0.0.1:6379> zadd myzset2 3 sql (integer) 1 127.0.0.1:6379> zadd myzset2 1 C# (integer) 1 127.0.0.1:6379> zadd myzset2 2 python (integer) 1 127.0.0.1:6379> zadd myzset2 0 redis (integer) 1 127.0.0.1:6379> ZRANGEBYSCORE myzset2 0 10 1) "redis" 2) "C#" 3) "python" 4) "sql" 127.0.0.1:6379>

  

六、redis功能

  1、發(fā)布訂閱

    redis的發(fā)布訂閱是一種消息通訊模式,發(fā)布者發(fā)送消息,接收這接受消息,客戶端可以任意定義頻道,redis客戶端可以任意訂閱頻道

    

下圖展示了頻道 channel1 , 以及訂閱這個(gè)頻道的三個(gè)客戶端 —— client2 、 client5 和 client1 之間的關(guān)系:

當(dāng)有新消息通過(guò) PUBLISH 命令發(fā)送給頻道 channel1 時(shí), 這個(gè)消息就會(huì)被發(fā)送給訂閱它的三個(gè)客戶端:

實(shí)例:訂閱者

127.0.0.1:6379> SUBSCRIBE fabu1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "fabu1" 3) (integer) 1 1) "message" 2) "fabu1" 3) "my fa bu "

  發(fā)布者

127.0.0.1:6379> PUBLISH fabu1 'my fa bu ' (integer) 1 127.0.0.1:6379>

  2、持久化

  由于redis的數(shù)據(jù)是存放在內(nèi)存中,如果沒(méi)有持久化,redis重啟或者服務(wù)器重啟數(shù)據(jù)會(huì)丟失,于是需要開(kāi)啟redis的持久化功能,用于將數(shù)據(jù)保存在硬盤上,當(dāng)redis重啟后,可以從硬盤中恢復(fù)數(shù)據(jù)。

  redis提供兩種方式進(jìn)行持久化,一種是RDB持久化(原理是將redis中在內(nèi)存中的數(shù)據(jù)記錄定時(shí)dump到硬盤上的RDB持久化),另一種是AOD持久化(原理是將redis的操作日志以追加的方式寫(xiě)入文件)

  3、redis的主從復(fù)制

  一般來(lái)說(shuō),一臺(tái)redis可以處理的數(shù)據(jù)是有限的,即使硬件支持很好,也無(wú)法滿足日益增長(zhǎng)的業(yè)務(wù)需求,因而redis提供了主從集群的功能,可以實(shí)現(xiàn)讀寫(xiě)分離,極大限度的提高了系統(tǒng)的性能和滿足業(yè)務(wù)的拓展。同時(shí),為了避免一臺(tái)redis服務(wù)器宕機(jī)而引起的系統(tǒng)崩潰,redis也提供了啟用sentinel(哨兵)服務(wù),在一臺(tái)服務(wù)器宕機(jī)是自動(dòng)切換到另外一臺(tái)從服務(wù)器,同時(shí)設(shè)置當(dāng)前的從服務(wù)器為主服務(wù)器

  4、redis事務(wù)

  在系統(tǒng)中,經(jīng)常會(huì)遇到很多零散的操作有很強(qiáng)的順序性,一旦中間某個(gè)操作異常或者服務(wù)器異常等其他情況,因而就需要事務(wù)來(lái)處理

  redis事務(wù)可以一次執(zhí)行多個(gè)命令,redis會(huì)將事務(wù)中的命令序列化,然后按照順序執(zhí)行。redis事務(wù)不可能在事務(wù)執(zhí)行的過(guò)程中插入另外一個(gè)客戶端發(fā)來(lái)的命令請(qǐng)求,這樣便保證了命令執(zhí)行的過(guò)程中進(jìn)行隔離單獨(dú)執(zhí)行。在redis事務(wù)中,要么執(zhí)行所有命令要么一個(gè)都不執(zhí)行

  一個(gè)事務(wù)從開(kāi)始到執(zhí)行共有三個(gè)階段

    a、事務(wù)開(kāi)始

    b、命令入列

    c、執(zhí)行事務(wù)

  5、redis管道

  6、redis虛擬內(nèi)存

七、redis總結(jié)

redis是高性能的緩存服務(wù)器解決方案,可以數(shù)據(jù)持久化和快速搭建集群,高并發(fā),高可用性

參考地址http://www.cnblogs.com/caokai520/p/4409712.html

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

總結(jié)

以上是生活随笔為你收集整理的Redis 小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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