十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
近年來(lái),redis得到了廣泛使用,多用做內(nèi)存數(shù)據(jù)庫(kù),緩存重要信息;也可以作為NoSQL數(shù)據(jù)庫(kù),支持string(字符串)、list(鏈表)、set(集合)、zset(sorted set 有序集合)和hash(哈希類(lèi)型)的存儲(chǔ)。本文內(nèi)容是編寫(xiě)于2018年11月的內(nèi)部培訓(xùn)講稿一個(gè)篇章,演示平臺(tái)是windows操作系統(tǒng),Linux下的按照配置約有不同。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了瑪多免費(fèi)建站歡迎大家使用!
本文不包括reidis集群的配置和使用。
以下摘錄:
地址:https://redis.io/download
下載文件:redis-5.0.0.tar.gz,解壓到:D:\redis-5.0.0,然后使用gcc編譯。
如果使用vs2017編譯,需要下載:https://github.com/MicrosoftArchive/redis。
克隆到D:\redis-3.0.504。
使用VS2017打開(kāi)sln文件:
生成解決方案:
得到debug版的redis系統(tǒng)文件:
D:\redis-3.0.504\redis\msvs\x64\Debug
也有編譯好的,下載網(wǎng)址:https://github.com/ServiceStack/redis-windows
在path中增加D:\redis-3.0.504\redis\msvs\x64\Debug。
進(jìn)入D:\redis-3.0.504\redis\msvs\x64\Debug新增文件:redis.windows.conf。
加入文本內(nèi)容:
啟動(dòng)redis:
啟動(dòng)redis-cli命令行:
測(cè)試:
啟動(dòng)第一個(gè)cmd窗口:
啟動(dòng)第二個(gè)cmd窗口:
回過(guò)頭來(lái)看第一個(gè)cmd窗口:
一、Redis 連接命令
1、redis啟動(dòng):
本地啟動(dòng):redis-cli
遠(yuǎn)程啟動(dòng):redis-cli -h host -p port -a password
2、AUTH password
驗(yàn)證密碼是否正確
3、ECHO message
打印字符串
4、PING
查看服務(wù)是否運(yùn)行
5、QUIT
關(guān)閉當(dāng)前連接
6、SELECT index
切換到指定的數(shù)據(jù)庫(kù)
?
二、redis keys命令
1、DEL key
DUMP key
序列化給定的key并返回序列化的值
?
2、EXISTS key
檢查給定的key是否存在
?
3、EXPIRE key seconds
為key設(shè)置過(guò)期時(shí)間
?
4、EXPIRE key timestamp
用時(shí)間戳的方式給key設(shè)置過(guò)期時(shí)間
?
5、PEXPIRE key milliseconds
設(shè)置key的過(guò)期時(shí)間以毫秒計(jì)
?
6、KEYS pattern
查找所有符合給定模式的key
?
7、MOVE key db
將當(dāng)前數(shù)據(jù)庫(kù)的key移動(dòng)到數(shù)據(jù)庫(kù)db當(dāng)中
?
8、PERSIST key
移除key的過(guò)期時(shí)間,key將持久保存
?
9、PTTL key
以毫秒為單位返回key的剩余過(guò)期時(shí)間
?
10、TTL key
以秒為單位,返回給定key的剩余生存時(shí)間
?
11、RANDOMKEY
從當(dāng)前數(shù)據(jù)庫(kù)中隨機(jī)返回一個(gè)key
?
12、RENAME key newkey
修改key的名稱(chēng)
?
13、RENAMENX key newkey
僅當(dāng)newkey不存在時(shí),將key改名為newkey
?
14、TYPE key
返回key所存儲(chǔ)的值的類(lèi)型
?
三、reids字符串命令
?
1、SET key value
設(shè)置鍵值
2、GET key
得到鍵值
3、GETRANGE key start end
返回key中字符串值的子字符
?
4、GETSET key value
將給定key的值設(shè)為value,并返回key的舊值
?
5、GETBIT KEY OFFSET
對(duì)key所儲(chǔ)存的字符串值,獲取指定偏移量上的位
?
6、MGET KEY1 KEY2
獲取一個(gè)或者多個(gè)給定key的值
?
7、SETBIT KEY OFFSET VALUE
對(duì)key所是存儲(chǔ)的字符串值,設(shè)置或清除指定偏移量上的位
?
8、SETEX key seconds value
將值 value關(guān)聯(lián)到 key,并將 key的過(guò)期時(shí)間設(shè)為 seconds (以秒為單位)。
?
9、SETNX key value
只有在 key不存在時(shí)設(shè)置 key的值。
?
10、SETRANGE key offset value
用 value參數(shù)覆寫(xiě)給定 key所儲(chǔ)存的字符串值,從偏移量 offset開(kāi)始。
?
11、STRLEN key
返回 key所儲(chǔ)存的字符串值的長(zhǎng)度。
?
12、MSET key value [key value ...]
同時(shí)設(shè)置一個(gè)或多個(gè) key-value對(duì)。
?
13、MSETNX key value [key value ...]
同時(shí)設(shè)置一個(gè)或多個(gè) key-value對(duì),當(dāng)且僅當(dāng)所有給定 key都不存在。
?
14、PSETEX key milliseconds value
這個(gè)命令和 SETEX命令相似,但它以毫秒為單位設(shè)置 key的生存時(shí)間,而不是像 SETEX命令那樣,以秒為單位。
?
15、INCR key
將 key中儲(chǔ)存的數(shù)字值增一。
?
16、INCRBY key increment
將 key所儲(chǔ)存的值加上給定的增量值(increment) 。
?
17、INCRBYFLOAT key increment
將 key所儲(chǔ)存的值加上給定的浮點(diǎn)增量值(increment) 。
?
18、DECR key
將 key中儲(chǔ)存的數(shù)字值減一。
?
19、DECRBY key decrement
key所儲(chǔ)存的值減去給定的減量值(decrement) 。
?
20、APPEND key value
如果 key已經(jīng)存在并且是一個(gè)字符串, APPEND命令將 指定value追加到改 key原來(lái)的值(value)的末尾。
?
四、Redis hash 命令
1、HDEL key field1 [field2]
刪除一個(gè)或多個(gè)哈希表字段
2、HEXISTS key field
查看哈希表 key中,指定的字段是否存在。
/3、HGET key field
獲取存儲(chǔ)在哈希表中指定字段的值。
/4、HGETALL key
獲取在哈希表中指定 key的所有字段和值
/5、HINCRBY key field increment
為哈希表 key中的指定字段的整數(shù)值加上增量 increment。
/6、HINCRBYFLOAT key field increment
為哈希表 key中的指定字段的浮點(diǎn)數(shù)值加上增量 increment。
/7、HKEYS key
獲取所有哈希表中的字段
/8、HLEN key
獲取哈希表中字段的數(shù)量
/9、HMGET key field1 [field2]
獲取所有給定字段的值
/10、HMSET key field1 value1 [field2 value2 ]
同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key中。
/11、HSET key field value
將哈希表 key中的字段 field的值設(shè)為 value。
/12、HSETNX key field value
只有在字段 field不存在時(shí),設(shè)置哈希表字段的值。
/13、HVALS key
獲取哈希表中所有值
/14、HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的鍵值對(duì)。
?
五、Redis 列表命令
/1、BLPOP key1 [key2 ] timeout
移出并獲取列表的第一個(gè)元素, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
/2、BRPOP key1 [key2 ] timeout
移出并獲取列表的最后一個(gè)元素, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
/3、BRPOPLPUSH source destination timeout
從列表中彈出一個(gè)值,將彈出的元素插入到另外一個(gè)列表中并返回它; 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
/4、LINDEX key index
通過(guò)索引獲取列表中的元素
/5、LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
/6、LLEN key
獲取列表長(zhǎng)度
/7、LPOP key
移出并獲取列表的第一個(gè)元素
/8、LPUSH key value1 [value2]
將一個(gè)或多個(gè)值插入到列表頭部
/9、LPUSHX key value
將一個(gè)值插入到已存在的列表頭部
/10、LRANGE key start stop
獲取列表指定范圍內(nèi)的元素
/11、LREM key count value
移除列表元素
/12、LSET key index value
通過(guò)索引設(shè)置列表元素的值
/13、LTRIM key start stop
對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說(shuō),讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。
/14、RPOP key
移除并獲取列表最后一個(gè)元素
/15、RPOPLPUSH source destination
移除列表的最后一個(gè)元素,并將該元素添加到另一個(gè)列表并返回
/16、RPUSH key value1 [value2]
在列表中添加一個(gè)或多個(gè)值
/17、RPUSHX key value
為已存在的列表添加值
?
六、Redis 集合命令
/1、SADD key member1 [member2]
向集合添加一個(gè)或多個(gè)成員
/2、SCARD key
獲取集合的成員數(shù)
/3、SDIFF key1 [key2]
返回給定所有集合的差集
/4、SDIFFSTORE destination key1 [key2]
返回給定所有集合的差集并存儲(chǔ)在 destination中
/5、SINTER key1 [key2]
返回給定所有集合的交集
/6、SINTERSTORE destination key1 [key2]
返回給定所有集合的交集并存儲(chǔ)在 destination中
/7、SISMEMBER key member
判斷 member元素是否是集合 key的成員
/8、SMEMBERS key
返回集合中的所有成員
/9、SMOVE source destination member
將 member元素從 source集合移動(dòng)到 destination集合
/10、SPOP key
移除并返回集合中的一個(gè)隨機(jī)元素
/11、SRANDMEMBER key [count]
返回集合中一個(gè)或多個(gè)隨機(jī)數(shù)
/12、SREM key member1 [member2]
移除集合中一個(gè)或多個(gè)成員
/13、SUNION key1 [key2]
返回所有給定集合的并集
/14、SUNIONSTORE destination key1 [key2]
所有給定集合的并集存儲(chǔ)在 destination集合中
/15、SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素
?
七、Redis 有序集合命令
/1、ZADD key score1 member1 [score2 member2]
向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)
/2、ZCARD key
獲取有序集合的成員數(shù)
/3、ZCOUNT key min max
計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)
/4、ZINCRBY key increment member
有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量 increment
/5、ZINTERSTORE destination numkeys key [key ...]
計(jì)算給定的一個(gè)或多個(gè)有序集的交集并將結(jié)果集存儲(chǔ)在新的有序集合 key中
/6、ZLEXCOUNT key min max
在有序集合中計(jì)算指定字典區(qū)間內(nèi)成員數(shù)量
/7、ZRANGE key start stop [WITHSCORES]
通過(guò)索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員
/8、ZRANGEBYLEX key min max [LIMIT offset count]
通過(guò)字典區(qū)間返回有序集合的成員
/9、ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通過(guò)分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員
/10、ZRANK key member
返回有序集合中指定成員的索引
/11、ZREM key member [member ...]
移除有序集合中的一個(gè)或多個(gè)成員
/12、ZREMRANGEBYLEX key min max
移除有序集合中給定的字典區(qū)間的所有成員
/13、ZREMRANGEBYRANK key start stop
移除有序集合中給定的排名區(qū)間的所有成員
/14、ZREMRANGEBYSCORE key min max
移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員
/15、ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定區(qū)間內(nèi)的成員,通過(guò)索引,分?jǐn)?shù)從高到底
/16、ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的成員,分?jǐn)?shù)從高到低排序
/17、ZREVRANK key member
返回有序集合中指定成員的排名,有序集成員按分?jǐn)?shù)值遞減(從大到小)排序
/18、ZSCORE key member
返回有序集中,成員的分?jǐn)?shù)值
/19、ZUNIONSTORE destination numkeys key [key ...]
計(jì)算給定的一個(gè)或多個(gè)有序集的并集,并存儲(chǔ)在新的 key中
/20、ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成員和元素分值)
?
八、Redis 發(fā)布訂閱命令
/1、PSUBSCRIBE pattern [pattern ...]
訂閱一個(gè)或多個(gè)符合給定模式的頻道。
/2、PUBSUB subcommand [argument [argument ...]]
查看訂閱與發(fā)布系統(tǒng)狀態(tài)。
/3、PUBLISH channel message
將信息發(fā)送到指定的頻道。
4、PUNSUBSCRIBE [pattern [pattern ...]]
退訂所有給定模式的頻道。
/5、SUBSCRIBE channel [channel ...]
訂閱給定的一個(gè)或多個(gè)頻道的信息。
/6、UNSUBSCRIBE [channel [channel ...]]
指退訂給定的頻道。
?
九、Redis 事務(wù)命令
1、DISCARD
取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令。
2、EXEC
執(zhí)行所有事務(wù)塊內(nèi)的命令。
3、MULTI
標(biāo)記一個(gè)事務(wù)塊的開(kāi)始。
4、UNWATCH
取消 WATCH命令對(duì)所有 key的監(jiān)視。
5、WATCH key [key ...]
監(jiān)視一個(gè)(或多個(gè)) key,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key被其他命令所改動(dòng),那么事務(wù)將被打斷。
?
十、Redis 腳本命令
1、EVAL script numkeys key [key ...] arg [arg ...]
執(zhí)行 Lua腳本。
/2、EVALSHA sha1 numkeys key [key ...] arg [arg ...]
執(zhí)行 Lua腳本。
/3、SCRIPT EXISTS script [script ...]
查看指定的腳本是否已經(jīng)被保存在緩存當(dāng)中。
4、SCRIPT FLUSH
從腳本緩存中移除所有腳本。
/5、SCRIPT KILL
殺死當(dāng)前正在運(yùn)行的 Lua腳本。
/6、SCRIPT LOAD script
將腳本 script添加到腳本緩存中,但并不立即執(zhí)行這個(gè)腳本。
?
十一、Redis 服務(wù)器命令
/1、BGREWRITEAOF
異步執(zhí)行一個(gè) AOF(AppendOnly File) 文件重寫(xiě)操作
/2、BGSAVE
在后臺(tái)異步保存當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)到磁盤(pán)
/3、CLIENT KILL [ip:port] [ID client-id]
關(guān)閉客戶(hù)端連接
/4、CLIENT LIST
獲取連接到服務(wù)器的客戶(hù)端連接列表
/5、CLIENT GETNAME
獲取連接的名稱(chēng)
/6、CLIENT PAUSE timeout
在指定時(shí)間內(nèi)終止運(yùn)行來(lái)自客戶(hù)端的命令
/7、CLIENT SETNAME connection-name
設(shè)置當(dāng)前連接的名稱(chēng)
/8、CLUSTER SLOTS
獲取集群節(jié)點(diǎn)的映射數(shù)組
/9、COMMAND
獲取 Redis命令詳情數(shù)組
/10、COMMAND COUNT
獲取 Redis命令總數(shù)
/11、COMMAND GETKEYS
獲取給定命令的所有鍵
/12、TIME
返回當(dāng)前服務(wù)器時(shí)間
/13、COMMAND INFO command-name [command-name ...]
獲取指定 Redis命令描述的數(shù)組
/14、CONFIG GET parameter
獲取指定配置參數(shù)的值
/15、CONFIG REWRITE
對(duì)啟動(dòng) Redis服務(wù)器時(shí)所指定的 redis.conf配置文件進(jìn)行改寫(xiě)
/16、CONFIG SET parameter value
修改 redis配置參數(shù),無(wú)需重啟
/17、CONFIG RESETSTAT
重置 INFO命令中的某些統(tǒng)計(jì)數(shù)據(jù)
/18、DBSIZE
返回當(dāng)前數(shù)據(jù)庫(kù)的 key的數(shù)量
/19、DEBUG OBJECT key
獲取 key的調(diào)試信息
/20、DEBUG SEGFAULT
讓 Redis服務(wù)崩潰
/21、FLUSHALL
刪除所有數(shù)據(jù)庫(kù)的所有key
/22、FLUSHDB
刪除當(dāng)前數(shù)據(jù)庫(kù)的所有key
/23、INFO [section]
獲取 Redis服務(wù)器的各種信息和統(tǒng)計(jì)數(shù)值
/24、LASTSAVE
返回最近一次 Redis成功將數(shù)據(jù)保存到磁盤(pán)上的時(shí)間,以 UNIX時(shí)間戳格式表示
/25、MONITOR
實(shí)時(shí)打印出 Redis服務(wù)器接收到的命令,調(diào)試用
/26、ROLE
返回主從實(shí)例所屬的角色
/27、SAVE
同步保存數(shù)據(jù)到硬盤(pán)
/28、SHUTDOWN [NOSAVE] [SAVE]
異步保存數(shù)據(jù)到硬盤(pán),并關(guān)閉服務(wù)器
/29、SLAVEOF host port
將當(dāng)前服務(wù)器轉(zhuǎn)變?yōu)橹付ǚ?wù)器的從屬服務(wù)器(slave server)
/30、SLOWLOG subcommand [argument]
管理 redis的慢日志
/31、SYNC
用于復(fù)制功能(replication)的內(nèi)部命令
1、Redis和Memcache都是將數(shù)據(jù)存放在內(nèi)存中,都是內(nèi)存數(shù)據(jù)庫(kù)。不過(guò)memcache還可用于緩存其他東西,例如圖片、視頻等等;
2、Redis不僅僅支持簡(jiǎn)單的k/v類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ);
3、虛擬內(nèi)存--Redis當(dāng)物理內(nèi)存用完時(shí),可以將一些很久沒(méi)用到的value交換到磁盤(pán);
4、過(guò)期策略--memcache在set時(shí)就指定,例如set key1 0 0 8,即永不過(guò)期。Redis可以通過(guò)例如expire 設(shè)定,例如expire name 10;
5、分布式--設(shè)定memcache集群,利用magent做一主多從;redis可以做一主多從,即都可以一主一從;
6、存儲(chǔ)數(shù)據(jù)安全--memcache掛掉后,數(shù)據(jù)沒(méi)了;redis可以定期保存到磁盤(pán)(持久化);
7、災(zāi)難恢復(fù)--memcache掛掉后,數(shù)據(jù)不可恢復(fù); redis數(shù)據(jù)丟失后可以通過(guò)aof恢復(fù);
8、Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份;
9、應(yīng)用場(chǎng)景不一樣:Redis出來(lái)作為NOSQL數(shù)據(jù)庫(kù)使用外,還能用做消息隊(duì)列、數(shù)據(jù)堆棧和數(shù)據(jù)緩存等;Memcached適合于緩存SQL語(yǔ)句、數(shù)據(jù)集、用戶(hù)臨時(shí)性數(shù)據(jù)、延遲查詢(xún)數(shù)據(jù)和session等。
10、Redis使用最佳方式是全部數(shù)據(jù)in-memory。
Redis更多場(chǎng)景是作為Memcached的替代者來(lái)使用。
當(dāng)需要除key/value之外的更多數(shù)據(jù)類(lèi)型支持時(shí),使用Redis更合適。
當(dāng)存儲(chǔ)的數(shù)據(jù)不能被剔除時(shí),使用Redis更合適。