一、數據類型
Redis支持五種數據類型:
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sorted set:有序集合)
二、String(字符串)
2.1、簡介
- string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。
- string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。
- string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。
- 常用命令:set、get、decr、incr、mget等。
- 注意:一個鍵最大能存儲512MB。
2.2、字符串操作
2.2.1、set
- 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
- 設置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、簡介
- 一個變量可以存儲多個值
- 先進後出
先輸入的字符,最後輸出
- Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
- list類型經常會被用於消息隊列的服務,以完成多程序之間的消息交換。
- 常用命令:lpush、rpush、lpop、rpop、lrange等。
- 列表最多可存儲 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)。
應用場景:
- 利用交集求共同好友。
- 利用唯一性,可以統計訪問網站的所有獨立IP。
- 好友推薦的時候根據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的用戶等。