Redis 的快速介紹及其基本數據類型和操作

語言: CN / TW / HK

theme: smartblue highlight: a11y-dark


持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第 11 天,點擊查看活動詳情

Redis 簡介

Redis 是一個主要由開發者 Salvatore Sanfilippo(Antirez)開發的開源內存數據結構存儲器,用於改進其網站的可伸縮性,可以用作數據庫、緩存和消息代理等,可以在項目中結合着使用 Redis。

Redis 有着豐富的數據結構、優秀的速度、齊全的功能,眾多公司都在使用 Redis,它有着如下的特點:

  • 快速
  • NoSQL 數據庫
  • 支持眾多環境

Redis 是一個內存數據庫,這意味着所有的數據都保存在內存中,而不是硬盤上(當然也支持硬盤的全量備份和增量備份)。內存的特點就是能夠支持快速訪問和快速搜索,但也受空間限制。

在數據庫架構中,Redis 通常位於客户端和數據庫之間,以減輕 NoSQL 數據庫或應用程序的負載,減少緩存時的數據訪問延遲。

Redis 的主要用途

  • 隊列
  • 發佈/訂閲
  • 實時分析
  • 機器學習:為機器學習快速處理大量、多樣和快速的數據
  • 地理空間處理
  • 排行榜/計數(也就是日常所見的熱搜)
  • 會話緩存
  • 整頁緩存

使用 Redis 的公司

Who uses Redis?

Redis 使用與啟動

網上有很多安裝的教程,這裏以 Mac 端為例,在安裝完 Redis 服務器之後,就可以通過以下命令啟動 Redis 服務器:

redis-server

並通過以下命令啟動 redis-cli 客户端:

redis-cli -h 127.0.0.1 -p 6379

如圖所示:

現在我們可以通過 Redis 的 PING 命令接受一條可選的消息作為參數,這個命令通常用於測試客户端和服務器之間的連接是否正常,如果用户以無參數形式執行這個命令,那麼服務器在連接正常的情況下,將向客户端返回 PONG 作為回覆:

127.0.0.1:6379> PING PONG

實際測試如下:

Redis 初步介紹工作完成,我們來看一下 Redis 都有哪些基本的數據結構機器常見操作。

Redis的基本數據類型

  • 字符串
  • 哈希
  • 列表
  • 集合
  • 有序集合
  • HyperLogLog
  • 位圖

本文將介紹前五種常見的數據結構,後續更多的類型在其他文章單獨進行介紹和説明,常見的五種基本數據類型如下。

字符串

字符串(string)是 Redis 最基本的鍵值對類型,這種類型既可以保持普通文字,也可以保存序列化的二進制數據。

字符串類型會在數據庫中把單獨的一個鍵和單獨的一個值關聯起來,被關聯的鍵和值既可以是普通的文字數據,也可以是圖片、視頻、音頻、壓縮文件等更為複雜的二進制數據。字符串類型最大可以存儲 512M 數據。

字符串一些常見操作

  • SET 命令:為一個字符串設置相應的值,如 SET number "10086"
  • GET 命令:獲取鍵對應的值

127.0.0.1:6379> SET number "10086" OK 127.0.0.1:6379> GET number "10086" 127.0.0.1:6379>

  • GETRANGE:獲取截取字符串內容
  • STRLEN:獲取字符串長度,如 STRLEN email
  • SETEX:設置帶有過期時間(秒)的 KEY-VALUE,如 SETEX city 5 Beijing

秒殺活動 PSETEX 設置毫秒

  • MSET:設置多個 KEY-VALUE ,如 MSET username jack sex male age 24
  • MGET:獲取多個 VALUE,如 MGET username sex age
  • APPEND: 用於在字符串結尾追加內容
  • INCR:數字自增加1 ,如 INCR number

127.0.0.1:6379> INCR number (integer) 10087 127.0.0.1:6379>

  • INCRBY:數字加上指定的整數值
  • INCRBYFLOAT:數字加上指定的浮點數
  • DECR:數字自增減一
  • DECBY:數字減去指定的整數值

這些命令,大家都可以自己在。 Redis 客户端進行測試。

哈希類型

用來保存更復雜的結構化數據

  • HSET:設置哈希表字段
  • HMSET:設置哈希表多個字段
  • HGET:獲取哈希表字段值,如 HGET 8000 ename
  • HMGET:獲取多個哈希表字段值,如 HMGET 80000 ename job deptno
  • HGETALL:獲取所有哈希表字段值
  • HKEYS:獲取所有哈希表字段名
  • HLEN:哈希表中的字段數量
  • HEXISTS:判斷哈希表是否存在某個字段
  • HVALS:獲取哈希表中的所有字段值
  • HDEL:刪除哈希表的字段
  • HINCRBY:讓哈希表某個字段值加上指定的整數值,如 HINCRBY 8000 deptono 10
  • HINCRBYFLOART:讓哈希表某個字段值加上指定的浮點數

列表類型

當我們需要向 VALUE 保存序列化的數據,可以使用列表類型

RPUSH dname 技術部 後勤部 售後部 LPUSH dname 祕書處 LSET dname 2 銷售部 LRANGE dname 0 -1

  • RPUSH:在列表末尾新增值
  • LPUSH:在列表開頭新增值
  • LLEN:獲取列表長度
  • LINDEX:獲取列表某個元素,如 lindex dname 0
  • LINSERT:在某個位置插入元素,如 linsert dname before 祕書處 董事會
  • LPOP:刪除最左邊的元素 LPOP dname
  • RPOP:刪除列表最右邊的元素 RPOP dname
  • LREM:刪除列表某個元素,如

``` RPUSH employee Scott RPUSH employee Jack RPUSH employee Scott

LREM employee 1 Scott # 刪除第一個Scott,不是指索引為一 ```

集合類型

假如要求數據不允許重複,則可以使用集合類型。

集合操作

SADD empno 8000 SADD empno 8001 SADD empno 8002 SADD empno 8003 8004 8005 SMEMBERS empno

  • SADD:將給定值添加到集合
  • SCARD:獲取集合長度,如: SCARD empno
  • SISMEMBER:判斷是否含有某個元素,如 SISMENBER empno 8000
  • SREM:刪除某個元素
  • SPOP:隨機刪除並返回集合的某個元素,如 SPOP empno
  • SRANDMEMBER:隨機返回集合中的元素,如 SRANDMEMBER empno 5
  • SUNION:組合兩個或多個集合並返回所有元素的列表
  • SMOVE:將成員從一個集合移動到另一個集合

關於集合的其他操作,可以點此處

有序集合

帶有排序功能的集合,Redis 按照元素分數值排序

ZADD keyword 0 "han" 0 "jack ma" 0 "Andrew wu" ZINCRBY keyword 1 "han" ZINCRBY keyword 5 "jack ma" ZINCRBY keyword 2 "Andrew wu" ZREVRANGE key 0 -1

  • ZCARD:獲取有序集合長度
  • ZCOUNT:查詢某個分數值區間內的元素數量,如 ZCOUNT keyword 5 10
  • ZSCORE:查詢元素的分數值
  • ZRANGE:獲取有序集合的內容(升序),如 ZRANGE keyword 0 -1
  • ZREVRANGE:獲取有序集合的內容(降序),如 ZREVRANGE keyword 0 -1
  • ZRANGEBYSCORE:獲取分數值區間內的集合內容(升序),如

shell zrangebyscore keyword 5 10 # 5-10 zrangebyscore keyword 5 (10 # 大於等於5, 小於 10 zrangebyscore keyword 100000 +inf

  • ZREVRANGEBYSCORE:獲取分數值區間內的集合內容(降序) zrevrangebyscore keyword 10 5
  • ZRANK:獲取元素的升序排名(從0開始)zrank keyword "xx"
  • ZREVRANK:獲取元素的降序排名(從0開始)
  • ZREM:刪除有序集合中的元素 ZREM keyword "x" "y"
  • ZREMRANGEBYRANK:刪除排名區間內的元素 zremrangebyrank keyword 0 2
  • ZREMRANGEBYSCORE:刪除分數值區間內的元素 zremrangebyscore keyword 0 -3

zremrangebyscore keyword inf (5000)

總結

本文簡要介紹了 Redis 的由來及特點、 Redis 的主要用途及其所用的公司,然後針對 Redis 的基本數據結構進行展示和常見命令,希望能對讀者有幫助,以此查漏補缺。關於 Redis 更多的操作命令,可以查看官方文檔。

參考鏈接: