共計 4049 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要講解了“Redis 中的基本數據類型有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“Redis 中的基本數據類型有哪些”吧!
Redis 數據結構簡介
對 redis 來說,所有的 key(鍵)都是字符串。我們在談基礎數據結構時,討論的是存儲值的數據類型,主要包括常見的 5 種數據類型,分別是:String、List、Set、Zset、Hash。【相關推薦:Redis 視頻教程】
結構類型結構存儲的值結構的讀寫能力 String 字符串可以是字符串、整數或浮點數對整個字符串或字符串的一部分進行操作;對整數或浮點數進行自增或自減操作;List 列表一個鏈表,鏈表上的每個節點都包含一個字符串對鏈表的兩端進行 push 和 pop 操作,讀取單個或多個元素;根據值查找或刪除元素;Set 集合包含字符串的無序集合字符串的集合,包含基礎的方法有看是否存在添加、獲取、刪除;還包含計算交集、并集、差集等 Hash 散列包含鍵值對的無序散列表包含方法有添加、獲取、刪除單個元素 Zset 有序集合和散列一樣,用于存儲鍵值對字符串成員與浮點數分數之間的有序映射;元素的排列順序由分數的大小決定;包含方法有添加、獲取、刪除單個元素以及根據分值范圍或成員來獲取元素基礎數據結構詳解 String 字符串
String 是 redis 中最基本的數據類型,一個 key 對應一個 value。
String 類型是二進制安全的,意思是 redis 的 string 可以包含任何數據。如數字,字符串,jpg 圖片或者序列化的對象。
命令使用
命令簡述使用 GET 獲取存儲在給定鍵中的值 GET nameSET 設置存儲在給定鍵中的值 SET name valueDEL 刪除存儲在給定鍵中的值 DEL nameINCR 將鍵存儲的值加 1INCR keyDECR 將鍵存儲的值減 1DECR keyINCRBY 將鍵存儲的值加上整數 INCRBY key amountDECRBY 將鍵存儲的值減去整數 DECRBY key amount
命令執行
127.0.0.1:6379 set hello world
127.0.0.1:6379 get hello
world
127.0.0.1:6379 del hello
(integer) 1
127.0.0.1:6379 get hello
(nil)
127.0.0.1:6379 get counter
127.0.0.1:6379 incr counter
(integer) 3
127.0.0.1:6379 get counter
127.0.0.1:6379 incrby counter 100
(integer) 103
127.0.0.1:6379 get counter
103
127.0.0.1:6379 decr counter
(integer) 102
127.0.0.1:6379 get counter
102
實戰場景
緩存:經典使用場景,把常用信息,字符串,圖片或者視頻等信息放到 redis 中,redis 作為緩存層,mysql 做持久化層,降低 mysql 的讀寫壓力。
計數器:redis 是單線程模型,一個命令執行完才會執行下一個,同時數據可以一步落地到其他的數據源。
session:常見方案 spring session + redis 實現 session 共享,
List 列表
Redis 中的 List 其實就是鏈表(Redis 用雙端鏈表實現 List)。
使用 List 結構,我們可以輕松地實現最新消息排隊功能(比如新浪微博的 TimeLine)。List 的另一個應用就是消息隊列,可以利用 List 的 PUSH 操作,將任務存放在 List 中,然后工作線程再用 POP 操作將任務取出進行執行。
命令使用
命令簡述使用 RPUSH 將給定值推入到列表右端 RPUSH key valueLPUSH 將給定值推入到列表左端 LPUSH key valueRPOP 從列表的右端彈出一個值,并返回被彈出的值 RPOP keyLPOP 從列表的左端彈出一個值,并返回被彈出的值 LPOP keyLRANGE 獲取列表在給定范圍上的所有值 LRANGE key 0 -1LINDEX 通過索引獲取列表中的元素。你也可以使用負數下標,以 -1 表示列表的最后一個元素,-2 表示列表的倒數第二個元素,以此類推。LINEX key index
使用列表的技巧
lpush+lpop=Stack(棧)
lpush+rpop=Queue(隊列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息隊列)
命令執行
127.0.0.1:6379 lpush mylist 1 2 ll ls mem
(integer) 5
127.0.0.1:6379 lrange mylist 0 -1
1) mem
2) ls
3) ll
4) 2
5) 1
127.0.0.1:6379 lindex mylist -1
127.0.0.1:6379 lindex mylist 10 # index 不在 mylist 的區間范圍內
(nil)
實戰場景
微博 TimeLine: 有人發布微博,用 lpush 加入時間軸,展示新的列表信息。
消息隊列
Set 集合
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。
Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
命令使用
命令簡述使用 SADD 向集合添加一個或多個成員 SADD key valueSCARD 獲取集合的成員數 SCARD keySMEMBER 返回集合中的所有成員 SMEMBER key memberSISMEMBER 判斷 member 元素是否是集合 key 的成員 SISMEMBER key member
其它一些集合操作,請參考這里
https://www.runoob.com/redis/redis-sets.html
命令執行
127.0.0.1:6379 sadd myset ycf ycf1 xiao ycf
(integer) 3
127.0.0.1:6379 smember myset
1) xiao
2) ycf1
3) ycf
127.0.0.1:6379 sismember myset ycf
(integer) 1
實戰場景
標簽(tag), 給用戶添加標簽,或者用戶給消息添加標簽,這樣有同一標簽或者類似標簽的可以給推薦關注的事或者關注的人。
點贊,或點踩,收藏等,可以放到 set 中實現
Hash 散列
Redis hash 是一個 string 類型的 field(字段)和 value(值)的映射表,hash 特別適合用于存儲對象。
命令使用
命令簡述使用 HSET 添加鍵值對 HSET hash-key sub-key1 value1HGET 獲取指定散列鍵的值 HGET hash-key key1HGETALL 獲取散列中包含的所有鍵值對 HGETALL hash-keyHDEL 如果給定鍵存在于散列中,那么就移除這個鍵 HDEL hash-key sub-key1
命令執行
127.0.0.1:6379 hset user name1 ycf
(integer) 1
127.0.0.1:6379 hset user email1 ycf@163.com
(integer) 1
127.0.0.1:6379 hgetall user
1) name1
2) ycf
3) email1
4) ycf@163.com
127.0.0.1:6379 hget user user
(nil)
127.0.0.1:6379 hget user name1
ycf
127.0.0.1:6379 hset user name2 xiaoycf
(integer) 1
127.0.0.1:6379 hset user email2 xiaoycf@163.com
(integer) 1
127.0.0.1:6379 hgetall user
1) name1
2) ycf
3) email1
4) ycf@163.com
5) name2
6) xiaoycf
7) email2
8) xiaoycf@163.com
實戰場景
緩存:能直觀,相比 string 更節省空間,的維護緩存信息,如用戶信息,視頻信息等。
Zset 有序集合
Redis 有序集合和集合一樣也是 string 類型元素的集合, 且不允許重復的成員。不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的, 但分數 (score) 卻可以重復。集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
命令使用
命令簡述使用 ZADD 將一個帶有給定分值的成員添加到哦有序集合里面 ZADD zset-key 178 member1ZRANGE 根據元素在有序集合中所處的位置,從有序集合中獲取多個元素 ZRANGE zset-key 0-1 withccoresZREM 如果給定元素成員存在于有序集合中,那么就移除這個元素 ZREM zset-key member1
命令執行
127.0.0.1:6379 zadd myscoreset 100 ycf 90 xiaoycf
(integer) 2
127.0.0.1:6379 ZRANGE myscoreset 0 -1
1) xiaoycf
2) ycf
127.0.0.1:6379 ZSCORE myscoreset ycf
100
實戰場景
排行榜:有序集合經典使用場景。例如小說視頻等網站需要對用戶上傳的小說視頻做排行榜,榜單可以按照用戶關注數,更新時間,字數等打分,做排行。
感謝各位的閱讀,以上就是“Redis 中的基本數據類型有哪些”的內容了,經過本文的學習后,相信大家對 Redis 中的基本數據類型有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!