深入淺出Redis

深入淺出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.保存,重啟服務器即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容