Redis 的快速介紹及其基本數據類型和操作
theme: smartblue highlight: a11y-dark
持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第 11 天,點擊查看活動詳情
Redis 簡介
Redis 是一個主要由開發者 Salvatore Sanfilippo(Antirez)開發的開源內存數據結構存儲器,用於改進其網站的可伸縮性,可以用作數據庫、緩存和消息代理等,可以在項目中結合着使用 Redis。
Redis 有着豐富的數據結構、優秀的速度、齊全的功能,眾多公司都在使用 Redis,它有着如下的特點:
- 快速
- NoSQL 數據庫
- 支持眾多環境
Redis 是一個內存數據庫,這意味着所有的數據都保存在內存中,而不是硬盤上(當然也支持硬盤的全量備份和增量備份)。內存的特點就是能夠支持快速訪問和快速搜索,但也受空間限制。
在數據庫架構中,Redis 通常位於客户端和數據庫之間,以減輕 NoSQL 數據庫或應用程序的負載,減少緩存時的數據訪問延遲。
Redis 的主要用途
- 隊列
- 發佈/訂閲
- 實時分析
- 機器學習:為機器學習快速處理大量、多樣和快速的數據
- 地理空間處理
- 排行榜/計數(也就是日常所見的熱搜)
- 會話緩存
- 整頁緩存
使用 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 更多的操作命令,可以查看官方文檔。
參考鏈接:
- 官方文檔
- Redis 數據類型
- http://blog.vantagecircle.com/introduction-to-redis/
- http://www.bmc.com/blogs/redis-basics/
- 一文帶你瞭解 Python 中的繼承知識點
- 如何使用 HTML 和 CSS 寫一個登錄界面
- 代碼之外:寫作是倒逼成長的最佳方式
- Redis 的快速介紹及其基本數據類型和操作
- 經久不衰的設計定律就是——不要讓我思考的設計
- 一文了解 Python 中的裝飾器
- 聊聊 Go 語言與雲原生技術
- Go Web 編程入門:驗證器
- Golang 的藝術、哲學和科學
- Django API 開發:視圖設置和路由
- Web 編程入門:什麼是Web API?
- Python 實現設計模式之工廠模式
- 好開心我進入了面試環節,那麼我該如何自我介紹?
- 鴻蒙學習筆記:利用鴻蒙JavaUI 框架的 WebView 加載在線網頁
- Go 語言入門很簡單:讀寫鎖