一、使用緩存數(shù)據(jù)庫(kù)為什么首選用redis?
我們都知道,把一些熱數(shù)據(jù)存到緩存中可以極大的提高速度,那么問(wèn)題來(lái)了,是用Redis好還是Memcached好呢,以下是它們兩者之間一些簡(jiǎn)單的區(qū)別與比較:
1. Redis不僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù),同時(shí)還支持list、set、zset(sorted set)、hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ),使得它擁有更廣闊的應(yīng)用場(chǎng)景。
2. Redis最大的亮點(diǎn)是支持?jǐn)?shù)據(jù)持久化,它在運(yùn)行的時(shí)候可以將數(shù)據(jù)備份在磁盤中,斷電或重啟后,緩存數(shù)據(jù)可以再次加載到內(nèi)存中,只要Redis配置的合理,基本上不會(huì)丟失數(shù)據(jù)。
3. Redis支持主從模式的應(yīng)用。
4. Redis單個(gè)value的最大限制是1GB,而Memcached則只能保存1MB內(nèi)的數(shù)據(jù)。
5. Memcache在并發(fā)場(chǎng)景下,能用cas保證一致性,而Redis事務(wù)支持比較弱,只能保證事務(wù)中的每個(gè)操作連續(xù)執(zhí)行。
6. 性能方面,根據(jù)網(wǎng)友提供的測(cè)試,Redis在讀操作和寫操作上是略領(lǐng)先Memcached的。
從上面這些看出,Redis的優(yōu)勢(shì)比Memcached大,不過(guò)Memcached也還是有它用武之地的。要是只選擇裝其中一種的話,還是要首選Redis。
二、如何使用redis?
你一定要知道的是:redis的key名要區(qū)分大小寫,在redis中除了 和空格外,其他的字符都可以做為key名,且長(zhǎng)度不做限制,不過(guò)為了性能考慮,一般key名不要設(shè)置的太長(zhǎng)。redis功能強(qiáng)大,支持?jǐn)?shù)據(jù)類型豐富,以下是redis操作命令大全,基本上涵蓋了redis所有的命令!
1、redis命令基本篇
1)、【 set key value 】 存入一個(gè)key和值。如:set myname reson
2)、【 get key 】 讀取一個(gè)key的值。
3)、【 del key 】 刪除一個(gè)key。
4)、【 del key1 key2 ... keyN 】 刪除多個(gè)key。如:del myname1 myname2
5)、【 exists key 】 判斷一個(gè)key是否存在。
6)、【 type key 】 查看key的類型。
7)、【 rename key keyNew 】 重命名key名。如:rename myname myname2
8)、【 dbsize 】 查看當(dāng)前庫(kù)中的key的條數(shù)。
9)、【 expire key time 】 指定key的過(guò)期時(shí)間,單位為秒。如:expire myname 9(設(shè)置9秒后過(guò)期)
10)、【 ttl key 】 查看redis有多長(zhǎng)時(shí)間過(guò)期,單位為秒。
11)、【 keys * 】 列出當(dāng)前庫(kù)中所有的key名。
12)、【 keys a* 】 列出當(dāng)前庫(kù)中所有以字符串“a"開(kāi)頭的key。
13)、【 select db-index 】 選擇一個(gè)數(shù)據(jù)庫(kù),如選擇第一個(gè)數(shù)據(jù)庫(kù):select 0;選擇第二個(gè) select 1;默認(rèn)有16個(gè)數(shù)據(jù)庫(kù),這個(gè)值可以在redis.conf中配置。
14)、【 flushdb 】 清掉當(dāng)前庫(kù)中所有的key(生產(chǎn)環(huán)境下需謹(jǐn)慎操作)。
15)、【 flushall 】 清掉所有庫(kù)中全部的key(生產(chǎn)環(huán)境下需謹(jǐn)慎操作)。
16)、【 mset key1 value1 key2 value2 ... keyN valueN 】 一次性存入多個(gè)key和值。
17)、【 mget key1 key2 ... keyN 】 一次性讀取多個(gè)key。
18)、【 incr key 】 可以對(duì)key類型+1的操作(相當(dāng)于編程語(yǔ)言里面的++),只能操作number型,操作字符串會(huì)報(bào)錯(cuò)??蓪?duì)新值進(jìn)行操作。
19)、【 decr key 】 可以對(duì)key類型-1的操作(相當(dāng)于編程語(yǔ)言里面的--),只能操作number型,操作字符串會(huì)報(bào)錯(cuò)。
20)、【 incrby key num 】 同incr,對(duì)key的值加num,比如 incrby aa 10,對(duì)aa+10。
21)、【 decrby key num 】 同上,對(duì)key的值減num。
22)、【 append key value 】 對(duì)指定key的字符串進(jìn)行追加,如果key為整形,會(huì)被轉(zhuǎn)為字符串。如aa的值為9,執(zhí)行append aa 10后,會(huì)變成910。
23)、【 substr key start end 】 對(duì)key進(jìn)行截取start到end個(gè)字符。如aa的值為:abcdef,執(zhí)行substr aa 2 3后,返回“cd”。
2、redis鏈表類型(list)命令
24)、【 lpush key value 】 往隊(duì)列頭部插入一個(gè)元素
25)、【 rpush key value 】 從尾部插入一個(gè)元素
26)、【 lpop key 】 從隊(duì)列頭部刪掉一個(gè)元素
27)、【 rpop key 】 從隊(duì)列尾部刪掉一個(gè)元素,并返回被刪除元素的值
28)、【 llen 】 返回隊(duì)列的長(zhǎng)度,即里面有多少個(gè)元素。不存在key返回0,不為隊(duì)列類型的key會(huì)返回報(bào)錯(cuò)。
29)、【 lrange key start end 】 返回隊(duì)列從start到end之間的元素信息。
30)、【 ltrim key start end 】 截取一個(gè)隊(duì)列,只保留指定區(qū)間內(nèi)的元素。
3、redis無(wú)序集合set類型命令
31)、【 sadd key vaule 】 往集合中插入一個(gè)元素,如果value值已存在集合中,則返回0,不會(huì)被重復(fù)插入。
32)、【 sinter key1 key2 ... keyN 】 取出n個(gè)key之間的交集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sinter key1 key2返回d,e。
33)、【 sunion key1 key2 ... keyN 】 取出n個(gè)key之間的并集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sunion key1 key2返回a,b,c,d,e,f。
34)、【 sdiff key1 key2 】 取出n個(gè)key之間的差集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sdiff key1 key2返回a,b,c;反過(guò)來(lái)sdiff key2 key1返回f。
35)、【 smembers key 】 返回key集合中所有的元素,結(jié)果是無(wú)序的。
36)、【 sismember key value 】 查看value這個(gè)值是否在key集合中。存在返回1,不存在返回0。
37)、【 scard key 】 返回集合中有多少個(gè)元素。
38)、【 smove key1 key2 value 】 把value從key1中移到key2中去。
39)、【 srem key value1 value2 ... valueN 】 從key集合中刪掉某些元素。
4、redis有序集合sorted set命令
40)、【 zadd key v k 】 往key中添加一個(gè)元素,k為鍵,v為值。如:zadd artHits 99 12表示id為12的文章點(diǎn)擊量為99次。
41)、【 zrange key start end 】 根據(jù)v的值由小到大進(jìn)行排序來(lái)獲得start到end之間的元素。
注:0表示第一個(gè)元素,-1表示最后一個(gè)元素,-2表示倒數(shù)第二個(gè)元素,以此類推,如果要獲取第一個(gè)到倒數(shù)第三個(gè)之間的元素,命令為:zrange key 0 -3。
42)、【 zrevrange key start end 】 同上,根據(jù)v的值由大到小進(jìn)行排序來(lái)獲得start到end之間的元素。可以輕松取出點(diǎn)擊量最高的前n篇文章。
43)、【 zremrangebyrank key start end 】 刪除集合中的元素。排序的方式為按照v由小到大的順序,如果要?jiǎng)h除key集合中的第一個(gè)值,則運(yùn)行 zremrangebyrank artHits 0 0;刪除前3個(gè)值:zremrangebyrank artHits 0 2。
44)、【 zcard 】 返回key集合中元素的個(gè)數(shù)。
45)、【 zrank key k 】 返回值k在集合key中排第幾位,是按照v由小到大的順序。排第一名返回0,第二返回1,以此類推。
46)、【 zrevrank key k 】 同上,不同的是,按照v由大到小的順序??梢暂p松取出點(diǎn)擊量最高的文章。
47)、【 zscore key k 】 取出集合key中鍵為k對(duì)應(yīng)的值v。
48)、【 zrem key k 】 刪除集合中指定元素。
49)、【 zincrby key num k 】 給集合key中的元素k加上num,值針對(duì)整型。比如 zincrby artHits 3 12,給id為12的文章加上3個(gè)點(diǎn)擊量。此時(shí)zscore artHits 12的結(jié)果是99+3為102。
5、redis哈希hash類型命令
50)、【 hset key field value 】 設(shè)置hash field為指定值,如果key不存在,則先創(chuàng)建。
51)、【 hmset key field1 value1 ... fieldN valueN 】 同時(shí)設(shè)置多個(gè)值。
52)、【 hget key field 】 獲取指定的hash field
53)、【 hmget key field1 field1 ... fieldN 】 獲取指定的多個(gè)hash field
54)、【 hincrby key field num 】 將指定的hash field加上指定的值。
55)、【 hexists key field 】 查看指定field是否存在。
56)、【 hdel key field 】 刪除指定的hash field。
57)、【 hlen key 】 返回指定hash中field的數(shù)量。
58)、【 hkeys key 】 返回hash所有的field。
59)、【 hvals 】 返回hash中所有的value。
60)、【 hgetall key 】 返回hash中所有的field和value。
本文版權(quán)歸傳智播客
php培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客php培訓(xùn)學(xué)院