深入淺出Redis
1.Redis的發(fā)展史
Redis[Remote Directory Server]:遠程服務器字典
2.下載安裝Redis
1》Linux下安裝Reids
http://redis.io/download
wget http://download.redis.io/releases/redis-3.0.1.tar.gz 下載
tar -xzvf redis-3.0.1.tar.gz 解壓
cd redis-3.0.1 進入解壓目錄
make 編譯 安裝
make install
2》在bin下可執(zhí)行的程序
redis-server:Redis服務器
redis-cli:命令行客戶端
redis-benchmark:Redis的性能測試工具
redis-check-aof:AOF文件修復工具
redis-check-dump:RDB文件檢測工具
redis.conf是Redis的配置文件
將配置文件中daemonize yes 以守護進程的方式來使用
3》啟動和停止Redis
直接啟動
redis-server
redis-server /ect/redis.conf
停止Redis
shutdown
結(jié)束Redis的進程也可以
3.命令返回值
1》狀態(tài)回復
ping
SET test 'this is a test'
2》錯誤回復
錯誤回復以error開始
(error) ERR unknown command 'TESTERROR'
3》整數(shù)回復:
以interger 數(shù)值
(integer) 2
4》字符串回復
GET test
(nil)代表空的結(jié)果
5》多行字符串回復
KEYS *,得到當前數(shù)據(jù)庫中的存在的鍵名
4.Redis配置選項相關內(nèi)容
1》動態(tài)設置/獲取配置選項的值
獲?。?CONFIG GET name
1)"port"
2)"6379"
設置:
CONFIG SET name value
2》Redis配置文件redis.conf選項相關
--連接選項--
port 6379 默認端口
bind 127.0.0.1,默認綁定的主機地址
timeout 0,當客戶端閑置多久之后關閉連接,0代表沒有啟動這個選項
loglevel notice,日志的記錄級別
# debug:很詳細的信息,適合開發(fā)和測試
# verbose :包含很多不太有用的信息
# notice :比較適合生產(chǎn)環(huán)境
# warning :警告信息
logfile stdout,日志的記錄方式,默認為標準輸出
databases 16,默認數(shù)據(jù)庫的數(shù)量16個,默認的數(shù)據(jù)庫編號從0開始
--快照--
save <seconds> <changes>:多少秒有多少次改變將其同步到磁盤中數(shù)據(jù)文件里
save 900 1--900秒內(nèi)有一個更改
save 300 10--300秒內(nèi)有10個更改
save 60 10000--60秒內(nèi)有10000個更改
rdbcompression yes,存儲本地數(shù)據(jù)庫時是否啟用壓縮,默認yes
dbfilename dump.rdb,指定本地數(shù)據(jù)庫文件名,默認為dump.rdb
dir ./,指定本地數(shù)據(jù)庫的存放目錄,默認是當前目錄
5.Redis的數(shù)據(jù)類型
String字符串類型
一個鍵最多存儲512MB
1》SET:設置key對應的值為value
語法:SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:設置鍵的key的過期時間SET key value EX seconds -- SETEX
PX milliseconds:以毫秒的形式設置過期時間SET key value PX milliseconds--PSETEX
NX:只有鍵不存在的時候才可以設置成功SET key value NX--SETNX
XX:只有key已經(jīng)存在的時候才可以設置
SET test16 'this is a test16' EX 100
SET test17 'this is a test17' PX 20000
SET test18 'this is a test18' NX
SET test18 'this is a test18888' XX
SET test19 'this is a test19' EX 100 NX
SET test20 'this is a test20' EX 100 PX 300000 NX
SET testStr1 'this is a test'
注意:如果key存在,同名會產(chǎn)生覆蓋
2》GET:根據(jù)key找到對應的值
語法:GET key
GET testStr1
注意:如果key不存在,返回nil
如果key不是字符串,會報錯
3》GETRANGE:返回字符串中一部分
語法:GETRANGE key start end
GETRANGE testStr2 0 4
GETRANGE testStr2 0 -3
GETRANGE testStr2 -4 -2
GETRANGE testStr2 0 1000
4》GETSET:設置指定key的值,并且返回舊的值
語法:GETSET key value
SET testStr3 'king'
GET testStr3
GETSET testStr3 'queen'
注意:當key不存在返回nil
如果key不是字符串,會報錯
5》MSET:一次設置多個鍵值對
語法:MSET key value [key value...]
MSET testStr5 'king' testStr6 'maizi' testStr7 'queen'
6》MGET:一次得到多個鍵值
語法:MGET key key
MGET testStr5 testStr6 testStr7
MGET testStr5 testStr6 testStr7 testStr8
7》STRLEN:獲取key的字符串長度
語法:STRLEN key
STRLEN testStr5
注意:對于不存在key獲取其長度返回的0
8》SETRANGE:相當于字符串替換的效果
語法:SETRANGE key offset value
注意:如果設置的key原來的字符串長度要比偏移量小,就會以零字節(jié)(\x00)來填充
SET testStr9 'hello king'
SETRANGE testStr9 6 'queen'
對不存在的key使用SETRANGE
EXISTS testStr10
SETRANGE testStr10 5 'king'
9》SETNX:只有key不存在才能設置成功
語法:SETNX key value
EXISTS testStr11
SETNX testStr11 'maizi'
GET testStr11
SETNX testStr11 'maiziedu'
GET testStr11
10》SETEX:設置key并且設置其過期時間
語法:SETEX key seconds value
SETEX expireStr 60 'testExpire'
注意:SETEX是原子性操作,相當于執(zhí)行了SET key value,又對這個key設置了過期時間EXPIRE key seconds
SET expireStr1 'test1'
EXPIRE expireStr1 10
SETEX test12 1000 'a'
GET test12
11》MSETNX:一次設置多個key-value對,只有所有的key都不存在的時候才會成功
語法:MSETNX key value [key value]
MSETNX test13 'a' test14 'b' test15 'c'
MSETNX test15 'aa' test16 'bb' test17 'cc'
12》PSETEX:以毫秒為單位設置key的生存周期
語法:PSETEX key milliseconds value
PSETEX test16 2000 'hello world'
PTTL
13》INCR:對key中存儲的數(shù)字+1
語法:INCR key
SET counter 1
INCR counter
注意:key如果不存在,則會先初始化為0,在進行INCR操作
如果key存儲的不是數(shù)字,會報錯
INCR counter1
INCR test20
14》INCRBY:將key中存儲的數(shù)字加上指定增量
語法:INCRBY key INCREMENT
SET counter2 10
INCRBY counter2 5
INCRBY counter2 1.2
15》INCRBYFLOAT:給key中存儲的數(shù)字加上指定的浮點數(shù)
語法:INCRBYFLOAT key increment
SET counter3 1
INCRBYFLOAT counter3 1.2
16》DECR:將key中存儲的數(shù)字減1
語法:DECR key
DECR counter3
17》DECRBY:將key中存儲的數(shù)值減去指定的值
語法:DECRBY key decrement
DECRBY counter2 3
18》APPEND:通過APPEND將值追加到字符串的末尾
語法:APPEND key value
注意:如果key不存在,則相當于執(zhí)行的SET操作
APPEND testStr11 'edu'
APPEND noExistsStr 'this is a test'
Hash類型
在配置文件中可以通過配置
hash-max-ziplist-entries 512 512字節(jié)
hash-max-ziplist-value 64 字段數(shù)目
Hash相關命令
1》HSET:將哈希表key中域field設置成指定的value
語法:HSET key field value
HSET userInfo1 username 'king'
HSET userInfo1 password '123456'
HSET userInfo1 email '382771946@qq.com'
HGET userInfo1 username
HSET userInfo1 username 'queen'
如果哈希表key中field不存在,相當于新建field,設置成功返回1
如果哈希表key中field存在,相當于重新賦值,成功返回0
2》HGET:返回哈希表key中給定field的值
語法:HGET key field
HGET userInfo1 username
注意:如果key中field不存在,返回的是nil
3》HSETNX:將hash表中的field設置成指定的值,只要field不存在的時候才可以成功;如果field存在,操作無效
語法:HSETNX key field value
HSETNX testHash1 test 'a'
4》HMSET:通過將多個field-value設置到hash表key中
語法:HMSET key field value field value ...
HMSET userInfo2 username 'king' password '123' kickname 'smart king' email '382771946@qq.com'
HGET userInfo2 username
HMSET userInfo2 username 'queen' role 'admin'
5》HMGET:一次獲得hash表key中多個field的值
語法:HMGET key field field
注意:如果hash表key中field不存在,會返回nil
6》HGETALL:返回hash表key中所有的field和value
語法:HGETALL key
HGETALL userInfo2
7》HKEYS:返回hash中key的所有的field
語法:HKEYS key
HKEYS userInfo2
8》HVALS:返回hash中key中field所有的對應的值
語法:HVALS key
HVALS userInfo2
9》HEXISTS:檢測hash中key的field是否存在
語法:HEXISTS key field
HEXISTS userInfo2 username
HEXISTS userInfo2 notExists
10》HLEN:返回hash表key中field的數(shù)量
語法:HLEN key
HLEN userInfo2
11》HINCRBY:給hash中key的field做增量操作
語法:HINCRBY key field increment
HSET userInfo3 age 12
HINCRBY userInfo3 age 10
HSET userInfo3 username 'king'
HINCRBY userInfo3 username 10
12》HINCRBYFLOAT:給hash中key的field做增量浮點操作
語法:HINCRBYFLOAT key field increment
HSET userInfo3 salary '123.111'
HINCRBYFLOAT userInfo3 salary 12.888
13》HDEL:刪除hash中key的指定域,可以刪除一個也可以刪除多個
語法:HDEL key field field
HGETALL userInfo2
HDEL userInfo2 username password email
List類型
Set集合類型
Zset有序集合類型
keys相關的命令:
1》KEYS:返回所有符合給定模式的key
語法:KEYS pattern
*:匹配任意個字符
?:匹配一個任意字符
[]:匹配[]之間的一個字符,[b-e],a[b-e] ab ac ad ae
\x:匹配特殊字符? *
MSET one 1 two 2 three 3 four 4 five 5 six 6 seven 7
KEYS *
KEYS o
KEYS t??
KEYS ?o*
KEYS c[n-z]*
2》EXISTS:檢測指定key是否存在
語法:EXISTS key
EXISTS one
3》TYPE:返回key所存儲的類型
語法:TYPE key
不存在的key 返回none
string
hash
set
zset
list
TYPE testStr11
TYPE userInfo2
4》EXPIRE:設置key的過期時間
語法:EXPIRE key seconds
SET cache_page 'http://phpfamily.org'
EXPIRE cache_page 100
注意:如果key已經(jīng)存在過期時間,在通過EXPIRE設置的時候會覆蓋之前過期時間
5》EXPIREAT:需要指定在指定時間戳過期
語法:EXPIREAT key timestamp
SET cache_page1 'http://maiziedu.com'
EXPIREAT cache_page1 1431868810
6》PEXPIRE:以毫秒的形式指定過期時間
語法:PEXIRE key milliseconds
SET cache_page2 'http://maiziedu.com'
PEXPIRE cache_page2 50000
7》PEXPIREAT:指定時間戳,單位為毫秒
語法:PEXPIREAT key timestamp
SET cache_page3 'http://phpfamily.org'
PEXPIREAT cache_page3 1431968810000000
8》TTL:以秒為單位返回key剩余時間
語法:TTL key
注意:如果沒有key沒有設置過期時間,返回-1
如果key不存在返回 -2
返回過期時間
SET cache_page4 'http://www.baidu.com'
TTL cache_page4
TTL cache_page5
EXPIRE cache_page4 100
TTL cache_page4
9》PTTL:以毫秒為單位返回key的剩余時間
語法:PTTL key
10》PERSIST:將一個帶有過期時間的key轉(zhuǎn)變成永久的key
語法:PERSIST key
SET cache 'testCache'
EXPIRE cache 100
TTL cache
PERSIST cache
TTL cache
11》DEL:刪除指定的KEY
語法:DEL key ...
DEL cache
12》RANDOMKEY:隨機的從當前數(shù)據(jù)庫中返回一個key
語法:RANDOMKEY
RANDOMKEY
13》RENAME:重名名一個鍵
語法:RENAME key newkey
SET testRename1 'rename1'
RENAME testRename1 testRename2
RENAME testRename2 testRename2
RENAME testRename2 test14
RENAME test14 six
注意:如果名稱沒有發(fā)生改變會報錯
14》RENAMENX:必須重命名這個新名稱不存在才會生效
語法:RENAMENX key newkey
SET testRename 'test'
RENAMENX testRename six
15》DUMP:序列化給定的Key,返回序列化之后的值
語法:DUMP key
SET testDump 'this is a test'
DUMP testDump
16》RESTORE:反序列化
語法:RESTORE key tt1 value
RESTORE testDump1 0 "\x00\x0ethis is a test\x06\x00f\x97\x10\x8bo\xb5\x91\xf8"
RESTORE testDump3 50000 "\x00\x04test\x06\x00\x17}\xc7 \x99\xa4\x8c\xd6"
17》MOVE:將當前數(shù)據(jù)庫中的key移動到另外的數(shù)據(jù)庫中
語法:MOVE key dbId
SELECT 0
SET testMove 'aaaa'
MOVE testMove 1
注意:當移動一個不存在的key會失敗
當目錄數(shù)據(jù)庫中存在同名key的時候移動失敗
OBJECT、MIGRATE、SCAN、SORT
List列表類型
1》LPUSH:向列表左端添加元素
語法:LPUSH key value value...
LPUSH myList1 a b c
2》RPUSH:向列表右端添加元素
語法:RPUSH key value ...
RPUSH myList1 test1 test2 test3
RPUSH myList1 test3 test4
3》LPUSHX:向列表頭部添加元素,只有key存在在來添加
語法:LPUSHX key value
LPUSHX myList2 a
LPUSH myList2 a
LPUSHX myList2 b
4》RPUSHX:向列表尾部添加元素,只有key存在在來添加
語法:RPUSHX key value
5》LPOP:將列表頭部的元素彈出
語法:LPOP key
LPOP myList1
6》RPOP;彈出列表尾部的元素
語法:RPOP key
RPOP myList1
7》LLEN:得到列表的長度
語法:LLEN key
LLEN myList2
8》LRANGE:獲取列表片段
語法:LRANGE key start stop
LRANGE myList1 0 -1
注意:
如果start下標比列表的最大下標end大,返回的空列表
如果stop比列表長度大,返回到列表的末尾
9》LREM:刪除列表中指定的值
語法:LREM key count value
count值有以下幾種:
count>0:從列表的頭開始,向尾部搜索,移除與value相等的元素,移除count個
count<=:從列表尾部向頭搜索,移除與value相等的元素,移除count個
count=0,移除列表中所有與count相等的值
LPUSH myList2 a b c d a e b c d b e f b g e b
LREM myList2 2 b
LREM myList2 -2 a
LREM myList2 0 e
10》LINDEX:獲得指定索引元素的值
語法:LINDEX key index
LINDEX myList2 3
LINDEX myList2 -3
11》LSET:設置指定索引元素的值
語法:LSET key index value
LSET myList2 0 king
12》LTRIM:只保留列表的片段
語法:LTRIM key start stop
LPUSH myList3 log11 log22 log33 log44 log55
LTRIM myList3 0 1
LPUSH myList4 a b c d e f g
LTRIM myList4 1 -1
LTRIM myList4 1 1000
LTRIM myList4 1000 2000 列表被清空
LTRIM myList4 3000 2000 列表被清空
13》LINSERT:向列表插入元素
語法:LINSERT key BEFORE|AFTER pivot value
LPUSH myList5 a b c d
LINSERT myList5 BEFORE 'b' 'king'
LINSERT myList5 BEFORE bb queen
LINSERT myList5 AFTER d queen
LINSERT myList6 AFTER d queen
14》RPOPLPUSH:將元素從一個列表轉(zhuǎn)到另一個列表
語法:RPOPLPUSH source destination
LPUSH myList6 a b c
LPUSH myList7 x y z
RPOPLPUSH myList6 myList7
LPUSH webLog log1 log2 log3 log4
RPOPLPUSH webLog webLog
RPOPLPUSH webLog1 webLog
15》BLPOP:BLPOP 是LPOP的阻塞版本
語法:BLPOP key [key...] timeout
LPUSH myList9 a b c
LPUSH myList10 d e f
BLPOP myList8 myList9 myList10 0
BLPOP myList 8 0
set集合類型:無序集合
1》SADD:向集合中添加元素
語法:SADD key member [,...]
SADD web maiziedu.com
SADD web phpfamily.org jd.com
SADD web phpfamily.org taobao.com
2》SMEMBERS:返回指定集合中的元素
語法:SMEMBERS key
SMEMBERS web
3》SISMEMBER:檢測member是否是集合中的成員
語法:SISMEMBER key member
SISMEMBER web maiziedu.com
4》SREM:刪除集合中的一個或者多個成員
語法:SREM key member [member...]
SREM web jd.com
SREM web taobao.com phpfamily.org
5》SPOP:刪除并返回集合中的隨機元素
語法:SPOP key
SADD course php java ios android c c++ oc
SPOP course
6》SRANDMEMBER:隨機返回集合中的元素
語法:SRANDMEMBER key count
注意:
count為正數(shù),而且小于集合中的元素,返回的一個包含隨機元素的集合數(shù)組;count數(shù)大于集合中元素的個數(shù),這時候會返回整個集合
count為負數(shù),返回一個數(shù)組,數(shù)組中的成員可能出現(xiàn)重復,數(shù)組的長度是count取絕對值
SRANDMEMBER course
SRANDMEMBER course 2
SRANDMEMBER course 50
SRANDMEMBER course -2
7》SDIFF:返回集合間的差集
語法:SDIFF key key ...
SADD testSet1 a b c d e
SADD testSet2 b c d e f
SDIFF testSet1 testSet2
SDIFF testSet2 testSet1
SADD testSet3 x y z a
SDIFF testSet1 testSet2 testSet3
8》SINTER:返回集合間的交集
語法:SINTER key key...
SINTER testSet1 testSet2
SINTER testSet1 testSet2 testSet3
SADD testSet3 b
9》SUNION:返回集合中并集操作
語法:SUNION key key...
SUNION testSet1 testSet2
SUNION testSet1 testSet2 testSet3
10》SCARD:返回集合中元素個數(shù)
語法:SCARD key
SCARD testSet1
11》SDIFFSTORE:將差集結(jié)果保存到指定集合中
語法:SDIFFSTORE destination key key ...
SDIFFSTORE diffSet testSet1 testSet2
SADD diffSet f
SDIFFSTORE diffSet testSet2 testSet1
SDIFFSTORE diffSet testSet1 testSet2
SDIFFSTORE testSet1 testSet1 testSet2
12》SINTERSTORE:將交集的結(jié)果保存在指定集合中
語法:SINTERSTORE destination key key ...
13》SUNIONSTORE:將并集的結(jié)果保存到指定集合中
語法:SUNIONSTORE destination key key ...
14》SMOVE:將集合中元素移動另外一個集合中
語法:SMOVE source destination member
注意:原子操作
SMOVE testSet2 testSet1 f
SADD testSet2 f
SMOVE testSet2 testSet1 f
zset(sorted set)有序集合
1》ZADD:將元素及其分數(shù)添加到集合中
語法:ZADD key score member [score member]
ZADD PHPScore 100 king
ZADD PHPScore 98 queen 98 maizi 80 test 78 test1 85 test2
ZADD PHPScore 60 test2 67 test3 56 test4
ZADD PHPScore +inf maxInt -inf minInx
2》ZSCORE:獲得指定元素的分數(shù)
語法:ZSCORE key member
ZSCORE PHPScore maizi
ZADD PHPScore 12.3 test5
3》ZRANGE:按照元素分數(shù)從小到大的順序返回指定索引start到stop之間所有元素(包含兩端)
語法:ZRANGE key start stop [WITHSCORES]
ZRANGE PHPScore 0 -1
ZRANGE PHPScore 0 -1 WITHSCORES
ZRANGE PHPScore 0 2 WITHSCORES
ZRANGE PHPScore 0 2000 WITHSCORES
ZRANGE PHPScore 1000 2000 WITHSCORES
ZADD PHPScore 60 test6 60 test7 60 test8 60 test9
注意:當兩個元素的分數(shù)相同的時候,Redis在排序按照字典的順序(0<9<A<Z<a<z),如果使用的是UTF-8
的編碼方式的中文同樣按照字典順序排列
4》ZREVRANGE:和ZRANGE相反,按照分數(shù)從大到小的順序
語法:ZREVRANGE key start stop [WITHSCORES]
ZREVRANGE PHPScore 0 -1 WITHSCORES
5》ZRANGEBYSCORE:獲得指定分數(shù)范圍內(nèi)的元素,按照分數(shù)從小到大的順序,返回的是分數(shù)在指定的min到max的元素
語法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
獲得分數(shù)80~90之間的所有元素
ZRANGEBYSCORE PHPScore 80 90
ZADD PHPScore 81 test9 82 test10 83 test11 84 test12 84 test13 88 test14 89 test15
ZRANGEBYSCORE PHPScore 80 90 WITHSCORES
ZADD PHPScore 90 test16
ZRANGEBYSCORE PHPScore 80 (90 WITHSCORES
ZRANGEBYSCORE PHPScore (80 (90 WITHSCORES
注意:通過(代表不包端點
ZRANGEBYSCORE PHPScore 90 +inf WITHSCORES
ZRANGEBYSCORE PHPScore 80 +inf WITHSCORES LIMIT 0 3
6》ZREVRANGEBYSCORE:獲得指定分數(shù)范圍內(nèi)的元素,按照元素的分數(shù)從大到小的順序返回min和max之間的元素
語法:ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE PHPScore 90 80 WITHSCORES
7》ZINCRBY:操作某個元素的分數(shù),返回操作之后的分數(shù)
語法:ZINCRBY key increment member
ZINCRBY PHPScore 5 test16
ZINCRBY PHPScore -15 test16
8》ZCARD:獲得集合中元素的數(shù)量
語法:ZCARD key
ZCARD PHPScore
9》ZCONUT:獲得指定分數(shù)內(nèi)的元素的數(shù)量
語法:ZCOUNT key min max
ZCOUNT PHPScore 80 90
10》ZREM:刪除一個或者多個元素,返回刪除元素的個數(shù)
語法:ZREM key member ...
ZREM PHPScore test16
11》ZREMRANGEBYRANK:按照排名范圍刪除元素,按照分數(shù)從小到大的順序刪除所指定的排名范圍內(nèi)的所有元素
語法:ZREMRANGEBYRANK key start stop
ZADD testRem 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h
ZREMRANGEBYRANK testRem 0 2
12》ZREMRANGEBYSCORE:按照分數(shù)范圍刪除元素
語法:ZREMRANGEBYSCORE key min max
ZADD testRem1 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h
ZREMRANGEBYSCORE testRem1 3 7
13》ZRANK:獲得指定元素的排名,根據(jù)分數(shù)從小到大的順序
語法:ZRANK key member
ZRANK PHPScore king
14》ZREVRANK:獲得指定元素的排名,根據(jù)分數(shù)從大到小的順序
語法:ZREVRANK key member
ZREVRANK PHPScore king
15》ZINTERSTORE:計算有序集合的交集,并將結(jié)果保存起來
語法:ZINTERSTORE destination numkeys [WEIGHTS weight weight...] [AGGREGATE SUM | MIN | MAX]
ZADD testSortedSet1 1 a 2 b 3 c
ZADD testSortedSet2 10 a 20 b 30 c
ZINTERSTORE resTestSorted1 2 testSortedSet1 testSortedSet2
ZINTERSTORE resTestSorted2 2 testSortedSet2 testSortedSet2 AGGREGATE SUM
ZINTERSTORE resTestSorted3 2 testSortedSet1 testSortedSet2 AGGREGATE MIN
ZINTERSTORE resTestSorted4 2 testSortedSet1 testSortedSet2 AGGREGATE MAX
ZINTERSTORE resTestSorted5 2 testSortedSet1 testSortedSet2 WEIGHTS 2 0.2
16》ZUNIONSTORE:計算有序集合并集,將結(jié)果保存起來
語法:ZUNIONSTORE destination numkeys key key ... [WEIGHTS weight weight...] [AGGREGATE SUM | MIN | MAX]
ZADD TESTUNIONSET1 1 a 2 b 3 c
ZADD TESTUNIONSET2 4 d 5 e 6 f 7 a
ZUNIONSTORE uniRes1 2 TESTUNIONSET1 TESTUNIONSET2
ZUNIONSTORE uniRes2 2 TESTUNIONSET1 TESTUNIONSET2 AGGREGATE SUM
ZUNIONSTORE uniRes3 2 TESTUNIONSET1 TESTUNIONSET2 AGGREGATE MIN
ZUNIONSTORE uniRes4 2 TESTUNIONSET1 TESTUNIONSET2 AGGREGATE MAX
ZUNIONSTORE uniRes5 2 TESTUNIONSET1 TESTUNIONSET2 WEIGHTS 2 2
二、Redis中的事務
1.開啟事務
MULTI:開啟事務,事務塊中的多條語句會按照順序放入對列當中,最后由EXEC命令來執(zhí)行
MULTI
INCR counter1
INCR counter2
INCR counter3
PING
GET counter1
EXEC
2.執(zhí)行事務塊中的命令
EXEC:執(zhí)行事務塊中的命令
3.監(jiān)視一個或者多個key
WATCH:監(jiān)視一個或者多個key,如果在執(zhí)行事務之前這個key如果被其它命令改動,事務就被打斷了。
UNWATCH:取消WATCH命令對所有key的監(jiān)視
4.取消事務
DISCARD
MULTI
SET testMulti 'this is a test'
INCR counter4
INCR counter5
DISCARD
5.事務中的錯誤處理
1》語法錯誤:像命令不存在,或者參數(shù)錯誤,如果有語法錯誤,Redis接到exec后直接返回錯誤,里面正確的命令也不會被執(zhí)行
MULTI
SET test hello
SET test1
ERRORCOMMAND
2》運行錯誤,錯誤指在運行命令的時候出現(xiàn)的問題
MULTI
SET test2 1
SADD test2 2
SET test2 3
EXEC
三、連接相關
PING:測試和服務器之間是否連接有效,如果服務器運行正常的話會得到PONG
ECHO:打印一個特定信息
QUIT:請求服務器關閉與當前客戶端的連接,EXIT
SHUTDOWN:關閉服務器和客戶端
AUTH:指定Redis的身份驗證,Redis配置文件中requirepass選項的值
CONFIG SET requirepass password
登陸進來之后通過AUTH命令進行驗證
連接的時候-a pwd
SELECT:選擇數(shù)據(jù)庫
四、生存時間
EXPIRE/EXPIREAT
PEXPIRE/PEXPIREAT
PERSIST
TTL
PTTL
SET session:test1 uid1
EXPIRE session:test1 900
TTL session:test1
SET session:test2 uid2
EXPIRE session:test2 30
注意:使用SET GETSET也會清楚過期時間
SET key hello
EXPIRE key 100
TTL key
SET key world
TTL key
四、排序相關
SORT
1》按照鍵值從小到大或者從大到小的順序排序
SORT key
SORT key DESC
對數(shù)值進行排序
LPUSH testSort1 12 33 -13 45 90
SORT testSort1 #升序
SORT testSort1 DESC #降序
對字母進行排序
LPUSH testSort2 a b c test1 test2 king queen zendStudio
SORT testSort2 ALPHA
2》使用LIMIT限制返回結(jié)果
LPUSH testSort3 a b c d e f g h i j k l m n 1 2 3 4 6 8 900 23
SORT testSort3 ALPHA LIMIT 0 5
SORT testSort3 ALPHA LIMIT 0 5 DESC
3》根據(jù)外部key的權(quán)重進行排序
LPUSH uid 1
SET user_name_1 admin
SET user_level_1 9999
LPUSH uid 2
SET user_name_2 king
SET user_level_2 800
LPUSH uid 3
SET user_name_3 queen
SET user_level_3 600
LPUSH uid 4
SET user_name_4 jack
SET user_level_4 300
LPUSH uid 5
SET user_name_5 rose
SET user_level_5 860
SORT uid
SORT uid BY user_level_*
4》根據(jù)排序結(jié)果取出相應鍵值
SORT uid GET user_name_*
SORT uid BY user_level_* GET user_name_*
SORT uid GET user_name_* GET user_level_*
SORT uid GET # GET user_level_* GET user_name_*
SORT uid BY user_level_* GET # GET user_level_* GET user_name_*
SORT uid BY noExists
SORT uid BY noExists GET # GET user_level_* GET user_name_*
HMSET user_info_1 username admin level 1000
HMSET user_info_2 username king level 999
HMSET user_info_3 username king1 level 77
HMSET user_info_4 username king2 level 90
SORT uid BY user_info_*->level
SORT uid GET user_info_*->username
SORT uid BY user_info_->level GET # GET user_info_->username
5》將排序結(jié)果保存起來
RPUSH testSort4 1 2 5 8 9 20
RPUSH testSort4 43 56 90 120
SORT testSort4 DESC STORE sortRes4
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern]] [ASC|DESC|ALPHA] [STORE destination]
注意:
SORT命令的時間復雜度O(n+mlogm),n表示要排序的列表或者集合中的元素的個數(shù),m表示要返回元素的個數(shù)
1》盡可能減少帶排序中鍵的數(shù)量(使n盡可能的小)
2》使用LIMIT參數(shù)限制獲取元素的個數(shù)(使m盡可能小)
3》如果要排序的數(shù)據(jù)量比較大,盡可能通過STORE緩存結(jié)果
五、發(fā)布訂閱模式
PUBLISH/SUBSCRIBE
1》發(fā)布訂閱模式的原理
包含兩個角色,一個是發(fā)布者,一個是訂閱者
訂閱者可以訂閱一個或者多個頻道channel
發(fā)布者可以向指定頻道發(fā)布信息
通過PUBLISH發(fā)布消息
PUBLISH channel message
PUBLISH channel1.1 'maiziedu'
通過SUBSCRIBE命令訂閱頻道
SUBSCRIBE channel ...
注意:發(fā)布出去消息是不會被持久化,只有客戶端訂閱這個頻道之后才能收到之后發(fā)送消息
UNSUBSCRIBE 取消某個頻道訂閱,但是在REDIS客戶端中做了限制 沒有辦法進行驗證
UNSUBSCRIBE [channel]
PSUBSCRIBE 訂閱指定的規(guī)則
UNPSUBSCRIBE
六、管道技術(shù)
七、通過PHP操縱Redis
PRedis和phpredis,使用Predis做演示,要求PHP版本要大于5.3
https://github.com/phpredis/phpredis/downloads
1.下載安裝Redis
2.解壓,將解壓文件放到PHP的ext目錄中
3.配置PHP配置文件,php.ini,按照
extension=php_igbinary.dll
extension=php_redis.dll
4.保存,重啟服務器即可