一、NoSQL 和 SQL 區(qū)別
二、認識 Redis
?? Redis 誕生于2009年,全稱是 Remote Dictionary Server,遠程字典服務器,是一個基于 內存的鍵值型 NoSQL 數(shù)據庫
?? 鍵值(key-value)型,value 支持多種不同數(shù)據結構,功能豐富
?? 單線程,每個命令具備原子性
?? 低延遲,速度快(基于內存、IO 多路復用、良好的編碼)
??支持數(shù)據持久化
?? 支持主從集群、分片集群
??支持多語言客戶端
三、Redis 的數(shù)據結構介紹
?? Redis 是一種 key-value 類型的數(shù)據庫
?? key 一般是 String 類型
?? value 的類型多種多樣(如下圖所示)
Redis 命令官網: https://redis.io/commands
四、Redis 通用命令
?? 通用命令是不分數(shù)據類型的,各種數(shù)據類型都可以使用的命令
?? KEYS
:查看符合模板的所有 key
?? DEL
:刪除一個指定的 key
?? EXISTS
:判斷 key 是否存在
?? EXPIRE
:給一個 key 設置有效期(過期時間)有效期到期時該 key 會被自動刪除
?? TTL
:查看一個 key 的剩余有效時間
- -1:永不過期
- -2:已經過期
可通過
help [command]
命令查看某個命令的具體用法
五、String 類型
?? String 類型(字符串類型)是 Redis 中最簡單的存儲類型
?? value 是字符串
?? 根據字符串的格式不同,可分為 3 類(String、int、float)
① String:普通字符串
② int:整數(shù)類型(可做自增、自減操作)
③ float:浮點類型(可做自增、自減操作)
?? 不管是哪種格式,底層都是字節(jié)數(shù)組形式存儲,只不過是編碼方式不同
?? 字符串類型的最大空間不能超過 512M
常見命令有:
?? SET
:添加或修改(如果鍵值對已存在的話)一個 String 類型的鍵值對
?? GET
:根據 key 獲取 String 類型的 value
?? MSET
:批量添加多個 String 類型的鍵值對
?? MGET
:根據多個 key 獲取多個 String 類型的 value
?? INCR
:讓一個整型的 key 自增 1
?? INCRBY
:讓一個整型的 key 自增指定步長 incrby num 2 【讓 num 值自增 2】
?? INCRBYFLOAT
:讓一個浮點類型的數(shù)字自增指定步長
?? SETNX
:添加一個 String 類型的鍵值對,前提是這個 key 不存在,否則不執(zhí)行【添加】
?? SETEX
:添加一個 String 類型的鍵值對,并且指定有效期
六、key 的格式
?? Redis 的 key 允許用多個單詞形成層級結構
?? 多個單詞之間用【:
】分隔
?? 該格式并非固定,可根據自己的需求刪除或添加詞條
例如項目名稱叫【crm】,有 user 和 product 兩種不同類型的數(shù)據。則可以如下所示定義 key:
① user 相關的 key:crm:user:1
② product 相關的 key:crm:product:1
?? 如果 Value 是一個 Java 對象。例如一個 User 對象,則可以將對象序列化為 JSON 字符串后存儲:
七、Hash(散列)類型
?? Hash 類型(也叫散列)
?? value 是一個無序字典 【類似 Java 中的 HashMap
】
?? Hash 類型可以將對象中的每個字段獨立存儲,可針對單個字段做增刪改查
Hash 的常見命令有:
??HSET key field value
:添加或修改 Hash 類型 key 的 field 的值
??HGET key field
:獲取一個 Hash 類型 key 的 field 的值
??HMSET
:批量添加多個 Hash
類型 key
的 field
的值
??HMGET
:批量獲取多個 Hash
類型key
的 field
的值
??HGETALL
:獲取一個 Hash
類型的key
中的所有的 field
和 value
??HKEYS
:獲取一個 Hash
類型的key
中的所有的 field
??HVALS
:獲取一個 Hash
類型的key
中的所有的 value
??HINCRBY
: 讓一個 Hash
類型key
的字段值(field)自增并指定步長
??HSETNX
:添加一個 Hash
類型的key
的 field
值,前提是這個 field 不存在,否則不執(zhí)行
八、List 類型
?? Redis 中的 List 類型與 Java 中的 LinkedList 類似
?? 可看做是一個雙向鏈表結構(既可以支持正向檢索和反向檢索)
?? 特點:
- 有序
- 元素可以重復
- 插入和刪除快
- 查詢速度一般
?? 常用來存儲有序數(shù)據(如:朋友圈點贊列表,評論列表)
?? LPUSH key element ...
:向列表左側插入一個或多個元素
?? LPOP key count
:移除并返回列表左側的第一個元素,沒有則返回 nil(count:取的個數(shù))
?? RPUSH key element ...
:向列表右側插入一個或多個元素
?? RPOP key count
:移除并返回列表右側的第一個元素(count:取的個數(shù))
?? LRANGE key star end
:返回一段角標范圍內的所有元素
?? BLPOP
和 BRPOP
:與 LPOP 和 RPOP 類似(區(qū)別:當沒有元素時,會等待指定時間,而不是直接返回 nil)
? 如何利用 List 結構模擬一個棧?
入口和出口在同一邊【后進先出】
? 如何利用 List 結構模擬一個隊列?
入口和出口在不同邊【先進先出】
?如何利用 List 結構模擬一個阻塞隊列?
① 入口和出口在不同邊
② 出隊時采用 BLPOP 或 BRPOP
九、Set 類型
?? Redis 的 Set 結構與 Java 中的 HashSet 類似,可看做是一個 value 為 null 的 HashMap
?? 因為也是一個 Hash 表,所以具備與 HashSet 類似的特征:
- 無序
- 元素不可重復
- 查找快
- 支持交集、并集、差集等功能
?? SADD key member ...
:向 set 中添加一個或多個元素
?? SREM key member ...
: 移除 set 中的指定元素
?? SCARD key
: 返回 set 中元素的個數(shù)
?? SISMEMBER key member
:判斷一個元素是否存在于 set 中
?? SMEMBERS key
:獲取 set 中的所有元素
?? SINTER key1 key2 ...
:求 key1 與 key2 的交集(key1 和 key2 都有的元素)
?? SDIFF key1 key2 ...
:求 key1 與 key2 的差集
?? SUNION key1 key2 ...
:求 key1 和 key2 的并集
將下列數(shù)據用 Redis 的 Set 集合來存儲:
?? 張三的好友有:李四、王五、趙六
?? 李四的好友有:王五、麻子、二狗
利用 Set 的命令實現(xiàn)下列功能:
?? 計算張三的好友有幾個
?? 計算張三和李四有哪些共同好友
?? 查詢哪些人是張三的好友卻不是李四的好友
?? 查詢張三和李四的好友總共有哪些人
?? 判斷李四是否是張三的好友
?? 判斷張三是否是李四的好友
?? 將李四從張三的好友列表中移除
十、SortedSet 類型(可排序)
?? Redis 的 SortedSet 是一個可排序的 set 集合
?? 與 Java 中的 TreeSet 有些類似
?? 但底層數(shù)據結構卻差別很大
?? SortedSet 中的每一個元素都帶有一個 score 屬性
,可以基于 score 屬性對元素排序
?? 底層實現(xiàn)是跳表(SkipList)加 Hash表
?? SortedSet 具備下列特性:
- 可排序
- 元素不重復
- 查詢速度快
?? 因為 SortedSet 的可排序特性,經常被用來實現(xiàn)排行榜功能
?? ZADD key score member
:添加一個或多個元素(若已存在,則更新其 score 值)
?? ZREM key member
:刪除指定元素
?? ZSCORE key member
: 獲取指定元素的 score 值
?? ZRANK key member
:獲取指定元素的排名
?? ZCARD key
:獲取 key 中的元素個數(shù)
?? ZCOUNT key min max
:統(tǒng)計 score 值在給定范圍內的所有元素的個數(shù)
?? ZINCRBY key increment member
:讓指定元素自增,步長為指定的 increment 值
?? ZRANGE key min max
:按照 score 排序后,獲取指定排名范圍內的元素
?? ZRANGEBYSCORE key min max
:按照score
排序后,獲取指定 score
范圍內的元素
??ZDIFF、ZINTER、ZUNION
:求差集、交集、并集
?? 注意:所有排名默認是升序,如果要降序則在命令的【Z】后面添加 REV
文章來源:http://www.zghlxwxcb.cn/news/detail-510809.html
將班級的下列學生得分存入 Redis 的 SortedSet 中:
Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76
并實現(xiàn)下列功能:
? 刪除 Tom 同學
? 獲取 Amy 同學的分數(shù)
? 獲取 Rose 同學的排名
? 查詢 80 分以下有幾個學生
? 給 Amy 同學加2分
? 查出成績前 3 名的同學
? 查出成績 80 分以下的所有同學文章來源地址http://www.zghlxwxcb.cn/news/detail-510809.html
到了這里,關于【Redis】1、學習 Redis 的五大基本數(shù)據類型【String、Hash、List、Set、SortedSet】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!