教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

PHP培訓(xùn)實(shí)戰(zhàn)教程之redis應(yīng)用

更新時間:2015年12月29日14時49分 來源:傳智播客php培訓(xùn)學(xué)院 瀏覽次數(shù):

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