echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!!
Redis的基本數據類型
最基本的數據類型strings
最基本也是最常用的數據類型就是String,對應的操作命令也比較簡單的,有get/set/del等;它的對應的值可以是任何種類的字符串,最大保存長度512MB。基本命令的使用如下:
set name echo
get name
del name
set key 1
incr key
decr key
incrby key 20
decrby key 20
incrbyfloat key 2.1
set name ab
append name c
getrange name 1 5
strlen name
mget name1 name2 name3
mset name4 echo4 name5 echo5 name6 echo6
字符串中一個特殊操作setnx
setnx name echo
如果name存在就返回0存入不成功,如果name不存在就返回1存入成功。
基於該特性我們可以用它來實現分布式鎖。但是注意:使用改特性也有一個缺點就是,可能會造成死鎖。如果我們在使用過程當中,使用del key釋放鎖,有可能會釋放鎖失敗,導致其他操作永遠獲取不到鎖。當讓我們也可以對ke設置過期時間,但是也會有相同的問題。解決方案:
數據類型list
對於該數據類型,我覺得用list一點也不貼切,應該叫做:有序的隊列,才合適。畢竟list是無序的,而且也沒有先后一說。基本操作命令如下:
lpush queue a
lpush queue b c
rpush queue d e
lpop queue
rpop queue
lindex queue 0
lrange queue 0 -1
ltrim queue 0 3
del queue
llen queue
brpop queue 50
list數據結構中brpop是一個高級操作
brpop queue 60
如果queue隊列中存在元素,直接彈出最右邊的按個元素,如果不存在,輪詢等待60s。超時,直接返回null。
該數據結構有一個明顯的特點,那就是有序,不管是從左邊存入還是右邊存入,都能夠有效的實現隊列的進出。我們可以看到最后一個條命令,它其實是redis提供的一個高級操作,利用list隊列的特性,實現了阻塞式訪問,我們可以使用該功能做一個簡單的發布訂閱功能。如果存入數據作為發布消息,使用brpop阻塞式訪問來訂閱。
數據類型set
Redis中Set 是 String 類型的無序集合。該集合有set集合的屬性,元素唯一, 所以對應的redis set數據成員是唯一的,這就意味着集合中不能出現重復的數據。
sadd myset a b c d e f g
smembers myset
scard myset
srandmember key
spop myset
srem myset d e f
sismember myset a
sdiff set1 set2
sinter set1 set2
sunion set1 set2
在set中,元素都不是重復的,所以我們可以用它來記錄一些唯一的值。這幾個基本的命令里面我們可以看到有一個spop myset 隨機彈出一個元素,利用set的唯一性,和隨機彈出元素的特性,我們可以使用set集合實現一個抽獎活動。將所有人的id存入set集合中,然后使用spop隨機彈出元素,彈出的元素id就是中獎人。
Redis的zset -- 有序集合
zset和Set類型極為相似,它們都是字符串的集合,都不允許重復的成員出現在一個Set中。它和set集合的區別只去在於zset是有序的,set是無序的。而且set的存儲和zset的存儲不一樣
zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python
zrange myzset 0 -1 withscores
zrevrange myzset 0 -1 withscores
zrangebyscore myzset 20 30
zrem myzset php cpp
zcard myzset
zincrby myzset 5 python
zcount myzset 20 60
zrank myzset java
zscore myzset java
zset是一個有序的集合,它的排序是根據score來進行的,所以我們可以使用該特性來實現一個最熱文章的功能,當文章的熱度上漲之后,我們對文章對應score來進行遞增即可。
Redis的數據類型Hash
Redis的哈希數據類型存儲的是一個string類型的field和value的映射表,hash適合存放對象
hset h1 f 6
hmset h1 a 1 b 2 c 3 d 4
hget h1 a
hmget h1 a b c d
hkeys h1
hvals h1
hgetall h1
hexists h1 f
hdel h1 f
hlen h1
hash的操作和我們java開發中操作map很類似,比如添加一個key為h1、field為f、value為6的hash值,在java中就相當於創建一個名字為h1的map,存入key為f,value為6的鍵值對。該數據結構的特點很適合我們在業務中存放對象,比如使用他來實現購物車。將hash設計成為后面這種模式即可:key:用戶 id;field:商品 id;value:商品數量。商品在購物車中的數據量使用如下命令來實現即可
對我們的hash值來進行加1
hincrby h1 d 1
對我們的hash值來進行減1
hincrby h1 d -1
做一個有底線的博客主