
Redis是一種快速、開源的內(nèi)存鍵值(NoSQL)數(shù)據(jù)庫,遠(yuǎn)遠(yuǎn)超越了緩存的功能。Redis使用RAM進(jìn)行操作,提供亞毫秒級(jí)的響應(yīng)時(shí)間,支持每秒數(shù)百萬次請(qǐng)求。Redis主要用于緩存,但它也可以作為那些數(shù)據(jù)不經(jīng)常變化的應(yīng)用程序的主要數(shù)據(jù)庫。Redis內(nèi)置了復(fù)制、服務(wù)端腳本(使用Lua腳本)、LRU驅(qū)逐、定時(shí)過期和事務(wù)支持。
Redis的用例包括:
?數(shù)據(jù)投影服務(wù)?臨時(shí)消息代理?事件溯源系統(tǒng)
注意:Redis是使用C語言編寫的。
Redis為什么快?
?Redis是基于RAM的。RAM訪問速度比隨機(jī)磁盤訪問快。?使用IO多路復(fù)用和單線程執(zhí)行循環(huán)來提高執(zhí)行效率。?使用高效的底層數(shù)據(jù)結(jié)構(gòu)(SDS、ZipList、SkipList、分層索引)。
Linux安裝步驟
創(chuàng)建文件/etc/yum.repos.d/redis.repo
,內(nèi)容如下:
[Redis]
name=Redis
baseurl=http://packages.redis.io/rpm/rhel7
enabled=1
gpgcheck=1
然后運(yùn)行以下命令:
curl -fsSL https://packages.redis.io/gpg > /tmp/redis.key
sudo rpm --import /tmp/redis.key
sudo yum install epel-release
sudo yum install redis-stack-server
高級(jí)CLI命令
$ redis-cli
INFO - 獲取有關(guān)集群的信息
SELECT - 選擇命名空間/數(shù)據(jù)庫
DBSIZE - 獲取鍵的數(shù)量
KEYS * - 列出所有鍵(模式匹配)(優(yōu)先使用SCAN命令)
SCAN - 用游標(biāo)返回結(jié)果的子集
EXISTS - 檢查鍵是否存在
TYPE - 檢查鍵的數(shù)據(jù)類型
EXPIRE - 設(shè)置鍵的過期時(shí)間
RENAME - 將鍵重命名為新名稱
FLUSHDB - 清除命名空間中的所有鍵
FLUSHALL - 清除所有命名空間中的所有鍵
ROLE - 檢查節(jié)點(diǎn)角色(主節(jié)點(diǎn)、從節(jié)點(diǎn)、哨兵節(jié)點(diǎn))
CLEAR - 清除CLI上下文終端
QUIT - 退出CLI
# redis-cli --pipe #從文件或stdin流式傳輸命令到Redis
# redis-cli --hotkeys #查找熱鍵
關(guān)于一些命令的幾點(diǎn)說明
?Redis數(shù)據(jù)庫是創(chuàng)建鍵的邏輯方式,用于創(chuàng)建鍵的隔離和命名空間。默認(rèn)情況下,Redis有0-15個(gè)數(shù)據(jù)庫索引。在集群模式下,這些數(shù)據(jù)庫不存在。
SELECT index_no
?以下命令通常會(huì)添加
后綴。這些命令根據(jù)鍵的存在與否采取不同的行為。
NX - 如果不存在
XX - 如果存在
注意:通常在命令前加上"M"表示多,例如MGET與GET。類似地,在命令前加上"P"表示基于模式的命令。
?KEYS命令是順序的(O(n))和同步的(阻塞的)。在應(yīng)用程序中,優(yōu)先使用SCAN而不是KEYS。
RedisInsight - 這是一個(gè)與Redis服務(wù)器交互的用戶界面工具。
支持的數(shù)據(jù)結(jié)構(gòu)

String(字符串)
?最基本和常見的Redis數(shù)據(jù)類型?Redis字符串存儲(chǔ)字節(jié)序列?最大大小為512 MB
SET | GET | DEL
INCR | INCRBY | INCRBYFLOAT
MSET | MGET
注意:DEL是阻塞的,而UNLINK是非阻塞的
List(列表)

?字符串值的鏈表?元素的集合?每個(gè)元素都是一個(gè)字符串?可以包含超過40億個(gè)元素?元素順序基于插入順序?編碼和內(nèi)存優(yōu)化
LPUSH | LRANGE | RPUSH | LPOP | RPOP | LLEN
LTRIM | LINDEX | LINSERT | LSET | LPOS | LREM
Set(集合)
?Redis集合是一組無序的唯一字符串(成員),用于跟蹤唯一元素。
SADD | SREM | SCARD | SMEMBERS | SDIFF | SDIFFSTORE
SISMEMBER | SMISMEMBER | SMOVE | SPOP
Hash(哈希)

?Redis哈希是作為字段-值對(duì)集合結(jié)構(gòu)化的記錄類型。每個(gè)哈希可以存儲(chǔ)多達(dá)42億個(gè)(2^32-1)個(gè)字段-值對(duì)。哈希可用于在應(yīng)用程序中存儲(chǔ)會(huì)話和個(gè)人資料。
HSET | HGET | HGETALL | HDEL | HEXIST | HMSET | HMGET
Sorted Set(有序集合)

?Redis有序集合是一組唯一字符串(成員),按相關(guān)分?jǐn)?shù)進(jìn)行排序的集
合。它可以用于排行榜、優(yōu)先級(jí)隊(duì)列、二級(jí)索引和速率限制器。
ZADD | ZCARD | ZSCORE | ZRANK | ZREVRANK | ZREM | ZRANGE
HyperLogLog
HyperLogLog是一種用于估計(jì)集合基數(shù)的數(shù)據(jù)結(jié)構(gòu)。它可用于跟蹤唯一訪問者數(shù)量。HyperLogLog的實(shí)現(xiàn)使用了多達(dá)12KB的空間。PFADD | PFCOUNT | PFMERGE
Streams

Redis流是一種類似追加日志的數(shù)據(jù)結(jié)構(gòu)。您可以使用流記錄和同時(shí)傳播實(shí)時(shí)事件。
XADD | XREAD | XTRIM | XDEL
XGROUP CREATE | XGROUP DESTROY | XREADGROUP
XGROUP CREATECONSUMER | XGROUP DELCONSUMER
Redis Streams允許At-most-once或At-least-once的消息傳遞。Redis Streams支持同步和異步讀取。
Bitmap
Redis位圖是字符串?dāng)?shù)據(jù)類型的擴(kuò)展,它允許您將字符串視為位向量。
BITOP | BITPOS | BITCOUNT

圖片來源 — bytebytego.com
Bitfield
Redis位字段允許您設(shè)置、增加和獲取任意位長度的整數(shù)值。
Geospatial
Redis地理空間索引允許您存儲(chǔ)坐標(biāo)并進(jìn)行搜索,查找給定半徑或邊界框內(nèi)的附近點(diǎn)。GEOADD | GEODIST | GEORADIUS | GEOSEARCH | GEOPOS
?Redis使用Haversine公式計(jì)算距離。?Redis將地理空間點(diǎn)存儲(chǔ)在有序集合中。集合的分?jǐn)?shù)用于編碼坐標(biāo)對(duì)。
Key Expiration

EX — 指定秒數(shù)后過期
PX — 指定毫秒數(shù)后過期
EXAT — 指定時(shí)間戳后過期(秒)
PXAT — 指定時(shí)間戳后過期(毫秒)
TTL — 鍵的剩余生存時(shí)間(近似值)
PERSIST — 移除當(dāng)前的過期時(shí)間
Pipelining
Redis遵循客戶端-服務(wù)器模型??蛻舳税l(fā)送請(qǐng)求,服務(wù)器處理請(qǐng)求并返回響應(yīng)。吞吐量主要由往返時(shí)間(通常在毫秒級(jí)別,請(qǐng)求處理通常在微秒級(jí)別)決定。Redis流水線是一種提高性能的技術(shù),它可以一次性發(fā)出多個(gè)命令,而無需等待每個(gè)單獨(dú)命令的響應(yīng)。這是一種網(wǎng)絡(luò)優(yōu)化,因?yàn)槲覀儨p少了客戶端和服務(wù)器之間的多次往返。
注意:1. 管道不保證命令執(zhí)行順序。2. 在管道中不允許在寫操作之后進(jìn)行讀操作,因?yàn)樗忻畹慕Y(jié)果將在最后一起返回。3. 在進(jìn)行管道操作時(shí),需要使用哈希標(biāo)記(hash-tags),以便將鍵強(qiáng)制映射到同一個(gè)分片上。4. 管道不是原子性的。5. Python庫中的管道被包裝在MULTI/EXEC中。
Scripting
調(diào)用服務(wù)器端Lua腳本的執(zhí)行。
SCRIPT LOAD | FUNCTION LOAD | EVAL | FCALL | FUNCTION KILL | SCRIPT KILL
注意:Lua腳本是原子的且是阻塞的。
Pub/Sub
Redis通過發(fā)布/訂閱機(jī)制提供了一種解耦的消息傳遞范式。發(fā)布者將消息發(fā)送到頻道,訂閱者確認(rèn)對(duì)一個(gè)或多個(gè)頻道感興趣,并接收感興趣的消息。

SUBSCRIBE | PUBLISH | PUBSUB CHANNELS | UNSUBSCRIBE
注意:發(fā)布/訂閱與鍵空間無關(guān)。
事務(wù)
Redis事務(wù)允許將一組命令作為單個(gè)步驟執(zhí)行,它們圍繞以下命令展開:
MULTI — 事務(wù)的開始
EXEC — 事務(wù)的結(jié)束
DISCARD — 取消事務(wù)
WATCH — 持續(xù)監(jiān)視鍵是否在我們開始監(jiān)視后被修改

UNWATCH 事務(wù)中的所有命令都是串行化執(zhí)行的。在Redis事務(wù)的執(zhí)行過程中,不會(huì)在執(zhí)行Redis事務(wù)的過程中為另一個(gè)客戶端服務(wù)。文章來源:http://www.zghlxwxcb.cn/news/detail-550469.html
持久化
在Redis中,如果啟用持久化,數(shù)據(jù)會(huì)被持久化到磁盤。重新啟動(dòng)時(shí),它會(huì)將數(shù)據(jù)加載到內(nèi)存中進(jìn)行計(jì)算。文章來源地址http://www.zghlxwxcb.cn/news/detail-550469.html

到了這里,關(guān)于Redis — 不僅僅是緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!