數(shù)據(jù)類型
STRING (字符串)
可以是保存字符串、整數(shù)和浮點(diǎn)數(shù)。
可以對字符串進(jìn)行操作,比如增加字符或在求子串;如果是整數(shù)或者浮點(diǎn)數(shù),可以實(shí)現(xiàn)計算,比如自增等。
LIST (列表)
它是一個鏈表,它的每一個節(jié)點(diǎn)都包含一個字符串。
Redis 支持從鏈農(nóng)的兩端插入或者彈出節(jié)點(diǎn),或在通過偏移對它進(jìn)行裁剪;還可以讀取一個或者多個節(jié)點(diǎn), 根據(jù)條件刪除或者查找節(jié)點(diǎn)等。
SET (集合)
它是一個收集器,但是是無序的,在它里面每一個元素都是一個字符串,而且是獨(dú)一無二,各不相同的。
可以新增、讀取、刪除單個元素 ; 檢測 一個元索是否在集合中,計算它和其他集合的交集、并集和差集等; 隨機(jī)從集合巾讀取元素。
HASH (哈希散列表)
它類似于Java語言中的Map,是一個鍵值對應(yīng)的無序列表。
可以增、刪 、 查、改單個鍵值對,也可以獲取所有的鍵值對。
ZSET (有序集合)
它是一個有序的集合,可以包含字符串、整數(shù)、浮點(diǎn)數(shù)、分值(score), 元素的排序是依據(jù)分值的大小來決定的。
可以增、刪、查、改元素,根據(jù)分值的范圍或者成員來獲取對應(yīng)的元素。
HyperLogLog (基數(shù))
它的作用是計算重復(fù)的值,以確定存儲的數(shù)量。
只提供基數(shù)的運(yùn)算,不提供返回的功能。
比如數(shù)字集合{ l,2,5,7,9,1,5,9}的基數(shù)集合為{ 1,2,5,7,9}那么基數(shù) (不重復(fù)元素)就是 5,基數(shù)的作用是評估大約需要準(zhǔn)備多少個存儲單元去存儲數(shù)據(jù),但是基數(shù)的算法一般會存在一定的誤差(一般是可控的)。
Redis常見命令
key命令
key命令用于管理Redis的鍵,有11種,分別是del exists expire pexpire keys move persist pttl ttl randomkey rename type。
del、exists、rename、type
del刪除key,exists判斷是否存在key,rename就是蓋key名,type查詢key的數(shù)據(jù)類型。
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> exists ke2 user_2
(integer) 1
127.0.0.1:6379> del key2 user_2
(integer) 2
127.0.0.1:6379> rename user user1
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> get user1
"dane"
127.0.0.1:6379>
127.0.0.1:6379> type user1
string
127.0.0.1:6379>
expire、pexpire、ttl、pttl、persist
expire、pexpire表示設(shè)置key的過期時間,expire單位是秒,pexpire單位是毫秒;ttl、pttl表示查詢key還剩下多少時間過期,ttl對應(yīng)expire,pttl對應(yīng)pexpire;persist表示持久化key,設(shè)置的過期時間失效變成不過期。
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> expire user 20
(integer) 1
127.0.0.1:6379> ttl user
(integer) 17
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> pexpire user 20000
(integer) 1
127.0.0.1:6379> pttl user
(integer) 15751
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> expire user 60
(integer) 1
127.0.0.1:6379> persist user
(integer) 1
127.0.0.1:6379> get user
"dane"
keys
用查找Redis所有的key。
127.0.0.1:6379> keys *
1) "lua-key"
2) "user1"
3) "user_1"
4) "[lua-key]"
127.0.0.1:6379> keys us*
1) "user1"
2) "user_1"
127.0.0.1:6379>
move
Redis也存在多個數(shù)據(jù)庫,move用于移動key到指定數(shù)據(jù)庫。
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
1) "lua-key"
2) "user1"
3) "user_1"
4) "[lua-key]"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move user1 1
(integer) 1
127.0.0.1:6379> keys *
1) "lua-key"
2) "user_1"
3) "[lua-key]"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "user1"
127.0.0.1:6379[1]>
string命令
用于操作string的命令,常見的有set mset get mget getrange getset setex setrange strlen psetex incr incrby incrbyfloat decr decrby append。
set mset get mget
表示添加和獲取,m開頭表示可以一次添加或取出多個。
127.0.0.1:6379> set user1 dane
OK
127.0.0.1:6379> mset user2 dane2 user3 dane3
OK
127.0.0.1:6379> keys u*
1) "user3"
2) "user1"
3) "user_1"
4) "user2"
127.0.0.1:6379> get user1
"dane"
127.0.0.1:6379> mget user2 user3
1) "dane2"
2) "dane3"
127.0.0.1:6379>
setrange getrange strlen
setrange表示范圍修改值,getrange表示范圍獲取值,strlen表示獲取string的長度
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> setrange user 4 1
(integer) 5
127.0.0.1:6379> get user
"dane1"
127.0.0.1:6379> setrange user 3 1
(integer) 5
127.0.0.1:6379> get user
"dan11"
127.0.0.1:6379> getrange user 1 4
"an11"
127.0.0.1:6379> strlen user
(integer) 5
getset
表示先獲取先前的值,在改變它。
127.0.0.1:6379> getset user dane
"dan11"
127.0.0.1:6379> get user
"dane"
127.0.0.1:6379>
setex psetex
指定的 key 設(shè)置值及其過期時間,setex單位是秒,psetex單位是毫秒。
127.0.0.1:6379> setex user 1 dane
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> psetex user 1000 dane
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379>
incr incrby incrbyfloat
incr表示將 key 中儲存的數(shù)字值+1,incrby表示加指定的值,incrbyfloat加指定的浮點(diǎn)型。
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incrby num 2
(integer) 4
127.0.0.1:6379> get num
"4"
127.0.0.1:6379> incrbyfloat num 2.2
"6.2"
127.0.0.1:6379> get num
"6.2"
decr decrby
decr表示將 key 中儲存的數(shù)字值-1,decrby表示加指定的值,注意只能是整數(shù)。
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> decr num
(integer) 0
127.0.0.1:6379> decr num 2
(error) ERR wrong number of arguments for 'decr' command
127.0.0.1:6379> get num
"0"
127.0.0.1:6379> decrby num 2
(integer) -2
127.0.0.1:6379> get num
"-2"
append
拼接字符串
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> append user 11
(integer) 6
127.0.0.1:6379> get user
"dane11"
hash 命令
操作hash的命令,常見命令:hdel hexists hget hset hmget hmset hkeys hvals hlen hgetall hincrby hincrbyfloat。
hset hget hmset hmget
127.0.0.1:6379> hset huser name dane
(integer) 1
127.0.0.1:6379> hget huser name
"dane"
127.0.0.1:6379> hmset huser age 18 sex 1
OK
127.0.0.1:6379> hmget huser age sex
1) "18"
2) "1"
127.0.0.1:6379>
hdel hexists
127.0.0.1:6379> hexists huser sex
(integer) 1
127.0.0.1:6379> hdel huser sex
(integer) 1
127.0.0.1:6379> hget huser sex
(nil)
hkeys hvals hlen hgetall
分別表示獲取所以鍵、獲取所有值、獲取hash長度、獲取所有鍵值
127.0.0.1:6379> hkeys huser
1) "name"
2) "age"
127.0.0.1:6379> hvals huser
1) "dane"
2) "18"
127.0.0.1:6379> hlen huser
(integer) 2
127.0.0.1:6379> hgetall huser
1) "name"
2) "dane"
3) "age"
4) "18"
hincrby hincrbyfloat
127.0.0.1:6379> hincrby huser age 2
(integer) 20
127.0.0.1:6379> hget huser age
"20"
127.0.0.1:6379> hincrbyfloat huser age 2.2
"22.2"
127.0.0.1:6379> hget huser age
"22.2"
list命令
操作list的命令,常見命令:lindex llen linsert lpop lpush lpushx lrange lrem lset ltrim rpop rpush rpushx。
lpush lpushx rpush rpushx lindex
把list當(dāng)做一根管子,lpushx表示往左邊加一個,lpush表示往左邊加多個, rpushx表示往右邊加一個,rpush表示往右邊加多個,注意的是,lpushx和 rpushx前提是該key存在,lindex表示list對應(yīng)下標(biāo)的值。
127.0.0.1:6379> lpush tests test1
(integer) 1
127.0.0.1:6379> del tests
(integer) 1
127.0.0.1:6379> lpush tests test1 test2
(integer) 2
127.0.0.1:6379> lindex tests 0
"test2"
127.0.0.1:6379> lpush tests test3
(integer) 3
127.0.0.1:6379> lindex tests 0
"test3"
127.0.0.1:6379> rpush tests test4 test5
(integer) 5
127.0.0.1:6379> lindex tests 4
"test5"
127.0.0.1:6379> rpushx tests test6
(integer) 6
127.0.0.1:6379> lindex tests 5
"test6"
llen lpop rpop
llen表示查詢list長度,lpop表示從左邊拿出一個,rpop則是從右邊。
127.0.0.1:6379> llen tests
(integer) 6
127.0.0.1:6379> lpop tests
"test3"
127.0.0.1:6379> llen tests
(integer) 5
127.0.0.1:6379> rpop tests
"test6"
127.0.0.1:6379> llen tests
(integer) 4
linsert lset
linsert命令用于在列表的元素前或者后插入元素。當(dāng)指定元素不存在于列表中時,不執(zhí)行任何操作。
127.0.0.1:6379> lindex tests 1
"test1"
127.0.0.1:6379> linsert tests before test1 test8
(integer) 5
127.0.0.1:6379> lindex tests 1
"test8"
127.0.0.1:6379> lset tests 1 test9
OK
127.0.0.1:6379> lindex tests 1
"test9"
ltrim lrange
ltrim 對一個列表進(jìn)行修剪(trim),就是說,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。lrange表示查詢指定區(qū)間。
下標(biāo) 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。 你也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個元素, -2 表示列表的倒數(shù)第二個元素,以此類推。
127.0.0.1:6379> llen tests
(integer) 5
127.0.0.1:6379> ltrim tests 2 4
OK
127.0.0.1:6379> llen tests
(integer) 3
127.0.0.1:6379> lrange tests 0 -1
1) "test1"
2) "test4"
3) "test5"
lrem
根據(jù)參數(shù) COUNT 的值,移除列表中與參數(shù) VALUE 相等的元素。
- count > 0 : 從表頭開始向表尾搜索,移除與 VALUE 相等的元素,數(shù)量為 COUNT 。
- count < 0 : 從表尾開始向表頭搜索,移除與 VALUE 相等的元素,數(shù)量為 COUNT 的絕對值。
- count = 0 : 移除表中所有與 VALUE 相等的值。
127.0.0.1:6379> lrem tests 0 test1
(integer) 1
127.0.0.1:6379> lrange tests 0 -1
1) "test4"
2) "test5"
set命令
操作set的命令,常見命令:sadd scard sdiff sdiffstore sinter sinterstore sunion sunionstore sismember smembers smove spop srem srandmember sscan
sadd scard smembers sismember srem
scard表示查詢set數(shù)量;
smembers表示set查詢出所有元素;
sismember判斷成員元素是否是集合的成員;
srem刪除指定的元素
127.0.0.1:6379> sadd tests test1 test2
(integer) 2
127.0.0.1:6379> scard tests
(integer) 2
127.0.0.1:6379> smembers tests
1) "test1"
2) "test2"
127.0.0.1:6379> sismember tests test1
(integer) 1
127.0.0.1:6379> smembers tests
1) "test1"
2) "test2"
127.0.0.1:6379> srem tests test1
(integer) 1
127.0.0.1:6379> smembers tests
1) "test2"
sdiff sdiffstore sinter sinterstore sunion sunionstore
sdiff表示兩個集合的差集,順序不一樣結(jié)果也不一樣;
sdiffstore 命令將給定集合之間的差集存儲在指定的集合中;
sinter表示兩個集合的合集;
sinterstore表示兩個集合的合集存儲在指定的集合中;
sunion 表示給定集合的并集;
sunionstore 表示給定集合的并集存儲在指定的集合中;
127.0.0.1:6379> sadd set1 1 2
(integer) 2
127.0.0.1:6379> sadd set2 2 4
(integer) 2
127.0.0.1:6379> sdiff set1 set2
1) "1"
127.0.0.1:6379> scard set1
(integer) 2
127.0.0.1:6379> scard set2
(integer) 2
127.0.0.1:6379> sdiff set2 set1
1) "4"
127.0.0.1:6379> sdiffstore set3 set1 set2
(integer) 1
127.0.0.1:6379> smembers set3
1) "1"
127.0.0.1:6379> sinter set1 set2
1) "2"
127.0.0.1:6379> sinterstore set4 set1 set2
(integer) 1
127.0.0.1:6379> smembers set4
1) "2"
127.0.0.1:6379> sunionstore set5 set1 set2
(integer) 3
127.0.0.1:6379> smembers set5
1) "1"
2) "2"
3) "4"
smove
移動一個集合的元素到另一個集合
127.0.0.1:6379> smove set1 set2 1
(integer) 1
127.0.0.1:6379> smembers set1
1) "2"
127.0.0.1:6379> smembers set2
1) "1"
2) "2"
3) "4"
spop srandmember
spop表示隨機(jī)刪除一個或多個元素,指定數(shù)量則多個,返回被刪除的元素。
srandmember表示隨機(jī)獲取一個或多個元素,指定數(shù)量則多個。
127.0.0.1:6379> sadd set 1 2 3 4
(integer) 4
127.0.0.1:6379> spop set
"4"
127.0.0.1:6379> smembers set
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> spop set 2
1) "1"
2) "3"
127.0.0.1:6379> smembers set
1) "2"
127.0.0.1:6379> sadd set 1 3 4
(integer) 3
127.0.0.1:6379> srandmember set
"4"
127.0.0.1:6379> srandmember set 2
1) "3"
2) "4"
sscan
用于迭代集合中的元素。
127.0.0.1:6379> sscan set 0
1) "0"
2) 1) "1"
2) "4"
127.0.0.1:6379> sscan set 0 match 4
1) "0"
2) 1) "4"
zset命令
常見命令:zadd zcard zcount zincrby zinterstore zrange zrangebyscore zrank zrem zremrangebyrank zremrangebyscore zrevrange zrevrangebyscore zrevrank zscore zunionstore zscan
zadd zcard zcount
zadd語法為ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN,SCORE表示分?jǐn)?shù)值,zset基于這個做排列。
zcard表示zset數(shù)量。
zcount表示計算有序集合中指定分?jǐn)?shù)區(qū)間的成員數(shù)量。
127.0.0.1:6379> zadd zset 1 set1
(integer) 1
127.0.0.1:6379> zadd zset 1 set2
(integer) 1
127.0.0.1:6379> zadd zset 2 set3 3 set4
(integer) 2
127.0.0.1:6379> zrange zset 0 01
(error) ERR value is not an integer or out of range
127.0.0.1:6379> zrange zset 0 -1
1) "set1"
2) "set2"
3) "set3"
4) "set4"
127.0.0.1:6379> zcount zset 1 3
(integer) 4
zincrby
語法ZINCRBY key increment member,表示對指定成員的分?jǐn)?shù)加上增量 increment,如果member不存在,則相當(dāng)于ZADD key increment member。
127.0.0.1:6379> zadd zset 1 m1 2 m2
(integer) 2
127.0.0.1:6379> zrange zset 0 -1
1) "m1"
2) "m2"
127.0.0.1:6379> zincrby zset 2 m1
"3"
127.0.0.1:6379> zrange zset 0 -1
1) "m2"
2) "m1"
zrange zrangebyscore zrank zscore
zrange和lrange一樣;
zrangebyscore是用score來指定范圍,
zrank返回成員的排名。
zscore返回成員的分?jǐn)?shù)。
127.0.0.1:6379> zrange zset 0 -1
1) "m2"
2) "m1"
127.0.0.1:6379> zrangebyscore zset 1 2
1) "m2"
127.0.0.1:6379> zrank zset m2
(integer) 0
127.0.0.1:6379> zscore zset m1
"1"
zrem zremrangebyrank zremrangebyscore
zrem刪除指定成員;
zremrangebyrank刪除指定排名內(nèi)的成員;
zremrangebyscore刪除指定分?jǐn)?shù)內(nèi)的成員;
127.0.0.1:6379> zadd zset 1 s1 2 s2 3 s3 4 s4
(integer) 4
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "s1"
2) "1"
3) "s2"
4) "2"
5) "s3"
6) "3"
7) "s4"
8) "4"
127.0.0.1:6379> zrem zset s1
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "s2"
2) "2"
3) "s3"
4) "3"
5) "s4"
6) "4"
127.0.0.1:6379> zremrangebyrank zset 0 0
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "s3"
2) "3"
3) "s4"
4) "4"
127.0.0.1:6379> zremrangebyscore zset 3 4
(integer) 2
127.0.0.1:6379> zrange zset 0 -1 withscores
(empty list or set)
zrevrange zrevrangebyscore zrevrank
zrevrank返回成員的倒序排名;
zrevrange倒序取出指定范圍的成員;
zrevrangebyscore同理,倒序取出指定分?jǐn)?shù)范圍內(nèi)的成員。
127.0.0.1:6379> zadd zset 1 s1 2 s2 3 s3 4 s4
(integer) 4
127.0.0.1:6379> zrevrank zset s1
(integer) 3
127.0.0.1:6379> zrevrange zset 0 -1
1) "s4"
2) "s3"
3) "s2"
4) "s1"
127.0.0.1:6379> zrevrangebyscore zset 3 1
1) "s3"
2) "s2"
3) "s1"
zinterstore zunionstore
zinterstore表示返回指定zset中的交集,并存儲到指定新的zset中,其中的數(shù)量表示有幾個集合。
zunionstore表示返回指定zset中的并集。
zadd zset1 1 s1 2 s2
(integer) 2
127.0.0.1:6379> zadd zset2 1 s1 2 s3
(integer) 2
127.0.0.1:6379> zinterstore sum 2 zset1 zset2
(integer) 1
127.0.0.1:6379> zrange sum 0 -1
1) "s1"
127.0.0.1:6379> zunionstore sum2 2 zset1 zset2
(integer) 3
127.0.0.1:6379> zrange sum2 0 -1
1) "s1"
2) "s2"
3) "s3"