Redis-數據類型(重新查資料)

一、數據類型

Redis支持五種數據類型:
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sorted set:有序集合)

二、String(字符串)

2.1、簡介

  1. string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。
  2. string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。
  3. string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。
  4. 常用命令:set、get、decr、incr、mget等。
  5. 注意:一個鍵最大能存儲512MB。

2.2、字符串操作

2.2.1、set

  1. set存儲的數據都是字符類型
192.168.4.51:6351> set a 1
OK
192.168.4.51:6351> get a
"1"
192.168.4.51:6351> type a
string
  1. 設置key及值
    EX表示以秒爲單位,PX表示以毫秒爲單位。
    NX存儲變量時,變量不存在則賦值,存在則放棄賦值。
    XX存儲變量時,默認覆蓋。
192.168.4.51:6351> SET key value [EX seconds] [PX milliseconds] [NX|XX]

2.2.2、setrange

用指定的字符串覆蓋給定 key 所儲存的字符串值,覆蓋的位置從指定的偏移量開始。0表示由第一位開始。1表示第二位,以此類推。

192.168.4.51:6351> set b ABCDEFG
OK
192.168.4.51:6351> get b
"ABCDEFG"
192.168.4.51:6351> SETRANGE b 0 abcd
(integer) 7
192.168.4.51:6351> get b
"abcdEFG"

2.2.3、strlen

統計字符串長度

192.168.4.51:6351> set c 12345678
OK
192.168.4.51:6351> STRLEN c
(integer) 8

2.2.4、append

存在則追加,不存在則創建key以及value,返回key長度

192.168.4.51:6351> set d 123
OK
192.168.4.51:6351> get d
"123"
192.168.4.51:6351> APPEND d 123
(integer) 6
192.168.4.51:6351> get d
"123123"

192.168.4.51:6351> APPEND e 123456
(integer) 6
192.168.4.51:6351> get e
"123456"

2.2.5、setbit

  • SETBIT key offset value
    對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
    位的設置或清除取決於 value 參數,可以是 0 也可以是 1 。
    當 key 不存在時,自動生成一個新的字符串值。
    字符串會進行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。
    offset 參數必須大於或等於 0 ,小於 2^32 (bit 映射被限制在 512 MB 之內)。
  • 設置bit的值爲a
    a的ASCll碼是97,轉換爲二進制位01100001
192.168.4.51:6351> set bit a
OK
192.168.4.51:6351> get bit
"a"
  • 把bit的值由a修改爲b
    b的ASCII碼是98,二進制爲01100010
    就是將 01100001 變成 01100010
192.168.4.51:6351> setbit bit 6 1 
(integer) 0
192.168.4.51:6351> setbit bit 7 0
(integer) 1
192.168.4.51:6351> get bit 
"b"

2.2.6、bitcount

統計字符串的二級制碼中,有多少個’1’

192.168.4.51:6351> bitcount bit
(integer) 3

2.2.7、decr和decrby

  • decr
    將key中的值減一,key不存在則先初始化爲0,再減1
192.168.4.51:6351> set test1 10
OK
192.168.4.51:6351> get test1
"10"
192.168.4.51:6351> decr test1
(integer) 9
192.168.4.51:6351> get test1
"9"
  • decrby
    decrby key decrment
    將key中的值,減去decrment
192.168.4.51:6351> set test2 100
OK
192.168.4.51:6351> DECRBY test2 99
(integer) 1
192.168.4.51:6351> get test2
"1"

2.2.8、getrange

返回字符串中的子字符串,截取範圍爲start和end
負數偏移量表示從末尾開始計數,-1表示最後一個字符,-2表示倒數第二個字符。

192.168.4.51:6351> set test3 abcdefgh
OK
192.168.4.51:6351> GETRANGE test3 -3 -1
"fgh"
192.168.4.51:6351> GETRANGE test3 -6 -2
"cdefg"

2.2.9、incr和incrby

整數計數器

  • incr
    將key的值加1,如果key不存在,則初始化爲0後再加1
    主要應用爲計數器
192.168.4.51:6351> set level 168
OK
192.168.4.51:6351> INCR level
(integer) 169
192.168.4.51:6351> get level
"169"
  • incrby
    將key的值增加increment
192.168.4.51:6351> INCRBY level 20
(integer) 189
192.168.4.51:6351> get level
"189"

2.2.10、incrbyfloat

小數計數器

192.168.4.51:6351> INCRBYFLOAT level 11.11
"200.11"
192.168.4.51:6351> get level
"200.11"

2.2.11、mget

獲取多個key值,空格分隔,具有原子性

192.168.4.51:6351> mget a b c d e
1) "1"
2) "abcdEFG"
3) "12345678"
4) "123123"
5) "123456"

2.2.12、mset

設置多個key值,空格分隔,具有原子性

192.168.4.51:6351> mset aa 1 bb 2 cc 3 dd 4
OK
192.168.4.51:6351> get aa bb  cc dd
(error) ERR wrong number of arguments for 'get' command
192.168.4.51:6351> mget aa bb  cc dd
1) "1"
2) "2"
3) "3"
4) "4"

三、Hash(哈希)

3.1、簡介

Redis hash 是一個鍵值(key=>value)對集合;是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。
每個 hash 可以存儲 232 -1 鍵值對(40多億)。
常用命令:hget、hset、hgetall等。
應用場景:存儲一些結構化的數據,比如用戶的暱稱、年齡、性別、積分等,存儲一個用戶信息對象數據。

3.2、操作

3.2.1、hset和hget

插入和輸出

192.168.4.51:6351> 
192.168.4.51:6351> hset site baidu www.baidu.com
(integer) 1
192.168.4.51:6351> hset site jingdong www.jd.com
(integer) 1
192.168.4.51:6351> type site
hash
192.168.4.51:6351> hget site  baidu
"www.baidu.com"
192.168.4.51:6351> hget site  jingdong
"www.jd.com"

3.2.2、hmset和hmget

多個表賦值、和輸出

192.168.4.51:6351> hmset site1 taobao  www.taobao.com  google www.google.com
OK
192.168.4.51:6351> hmget site1 taobao google
1) "www.taobao.com"
2) "www.google.com"

3.2.3、hkeys

返回hash表中石油filed名稱

192.168.4.51:6351> hkeys site
1) "baidu"
2) "jingdong"
192.168.4.51:6351> hkeys site1
1) "taobao"
2) "google"

3.2.4、hgetall

返回hash表中所有field的值

192.168.4.51:6351> hgetall site
1) "baidu"
2) "www.baidu.com"
3) "jingdong"
4) "www.jd.com"
192.168.4.51:6351> hgetall site1
1) "taobao"
2) "www.taobao.com"
3) "google"
4) "www.google.com"

3.2.5、hvals

返回hash表中所有filed的值

192.168.4.51:6351> hvals site
1) "www.baidu.com"
2) "www.jd.com"
192.168.4.51:6351> hvals site1
1) "www.taobao.com"
2) "www.google.com"

3.2.6、hdel

刪除hash表中多個filed的值,不存在則忽略

192.168.4.51:6351> hdel site1 taobao
(integer) 1
192.168.4.51:6351> hgetall site1
1) "google"
2) "www.google.com"

四、List(列表)

4.1、簡介

  • 一個變量可以存儲多個值
  • 先進後出
    先輸入的字符,最後輸出
  1. Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
  2. list類型經常會被用於消息隊列的服務,以完成多程序之間的消息交換。
  3. 常用命令:lpush、rpush、lpop、rpop、lrange等。
  4. 列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)。

4.2、列表操作

4.2.1、lpush

將一個或多個值value插入到列表key的表頭
key不存在,則創建key
key存在時,繼續插入,不覆蓋

192.168.4.51:6351> LPUSH list a b c d e f g
(integer) 7
192.168.4.51:6351> type list
list

4.2.2、lrange

從開始位置讀取key值到stop結束
先進後出原則

192.168.4.51:6351> LRANGE list 0 -1	//從開始讀到結束
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"

4.2.3、lpop

移除並返回列表頭元素數據,key不存在則返回nil

192.168.4.51:6351> LPOP list 
"4"
192.168.4.51:6351> LPOP list 
"3"
192.168.4.51:6351> LRANGE list 0 -1
1) "2"
2) "1"
3) "g"
4) "f"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"

4.2.4、llen

返回列表key長度

192.168.4.51:6351> LLEN list
(integer) 9

4.2.5、lindex

返回列表中第index個值

192.168.4.51:6351> LINDEX list 2
"g"
192.168.4.51:6351> LINDEX list 5
"d"

4.2.6、lset

將key中的index位置的值修改爲value

192.168.4.51:6351> lset list 3  list3
OK
192.168.4.51:6351> LRANGE list 0 -1
1) "2"
2) "1"
3) "g"
4) "list3"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"

4.2.7、rpush

將value插入到key的末尾

192.168.4.51:6351> LPUSH list2 a b c 
(integer) 3
192.168.4.51:6351> RPUSH list2 d
(integer) 4
192.168.4.51:6351> LRANGE list2 0 -1
1) "c"
2) "b"
3) "a"
4) "d"

4.2.8、rpop

刪除並返回key末尾的值

192.168.4.51:6351> rpop list2 
"d"

五、Set(集合)

Redis的Set是string類型的無序集合。和列表一樣,在執行插入和刪除和判斷是否存在某元素時,效率是很高的。集合最大的優勢在於可以進行交集並集差集操作。Set可包含的最大元素數量是4294967295。
集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。

應用場景:

  1. 利用交集求共同好友。
  2. 利用唯一性,可以統計訪問網站的所有獨立IP。
  3. 好友推薦的時候根據tag求交集,大於某個threshold(臨界值的)就可以推薦。
    常用命令:sadd、spop、smembers、sunion等。
    集合中最大的成員數爲 232 - 1(4294967295, 每個集合可存儲40多億個成員)。
    zset(sorted set:有序集合)
    Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。

zset的成員是唯一的,但分數(score)卻可以重複。

sorted set是插入有序的,即自動排序。

常用命令:zadd、zrange、zrem、zcard等。

當你需要一個有序的並且不重複的集合列表時,那麼可以選擇sorted set數據結構。

應用舉例:

(1)例如存儲全班同學的成績,其集合value可以是同學的學號,而score就可以是成績。
(2)排行榜應用,根據得分列出topN的用戶等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章