一直都說要寫一些redis,但是苦于網上資料甚少,Redis又不是基于java的,源碼也沒深究。書籍很少,看看書,都是在講基本相同。這裡以學習為目的,一實戰和我運用的一些實際場景。給大家講講redis。接下來講講mq的一些應用···希望對大家有用。
首先我非常濃重介紹一下測試網站,深深感謝,那些工具提供者。
redis練習工具:http://try.redis.io
來一段解釋:
作為 Key-value
型資料庫,Redis 也提供了鍵(Key)和鍵值(Value)的映射關系。但是,除了正常的數值或字元串,Redis的鍵值還可以是以下形式之一:
Lists(清單)
Sets(集合)
Sorted sets(有序集合)
Hashes(哈希表)
鍵值的資料類型決定了該鍵值支援的操作。Redis支援諸如清單、集合或有序集合的交集、并集、查集等進階原子操作;同時,如果鍵值的類型是普通數字,Redis則提供自增等原子操作 。本節部分類容來自摘抄REDIS入門指南2,是以直接截圖,希望大家諒解。我這裡主要講解一下練習,隻有mac和window的安裝。linux
的例子網上很多,大家可以學習,因為都是開發工程師,應該linux其實用的不是很多,畢竟隻有自己的機子(實際運用時候,運維工程師已經幫你搞定了,隻是需要了解和運用)。

進入下載下傳網站直接下載下傳redis:http://redis.io/download,總之window的安裝隻要有下一步下一步就ok。
安裝完畢之後點選next
1、使用指令:redis-server 開啟
2、使用指令:redis-cli
開啟用戶端
3、使用reads-cli客服端 關閉服務 :shutdown
這個就是應用程式,一直開着據ok,關閉的話,redis就關閉了,就這麼簡單。當然也可以用redis-cli指令關閉
1、redis指令屬性讀(REDIS_CMD_WRITE) 寫(REDIS_CMD_RANDOW) 例如:set del等
2、redis指令屬性:REDIS_CMD_DENYOOM 可能可以增加redis記憶體的指令 例如:set 等但是沒有del
3、redis指令屬性:REDIS_CMD_NOSCRIPT 無法在腳步中執行 例如:eval save 等
4、redis指令屬性:REDIS_CMD_RAMDOM 不能執行寫權限指令:spop 、srandmember、randomkey、time
5、reids指令屬性:REDIS_CMD_SORT_FOR_SCRIPT 産生随機結果 ,進行排序:sinter、sunion、smembers、hkeys、hvals、keys
6、redis指令屬性:REDIS_CMD_LOADING 加載指令:info、subscribe、unsubscribe、psubscribe、unsubscribe、publish
quit:關閉連接配接(connection)
auth:簡單密碼認證
exists(key):确認一個key是否存在
del(key):删除一個key
type(key):傳回值的類型
keys(pattern):傳回滿足給定pattern的所有key
randomkey:随機傳回key空間的一個key
rename(oldname, newname):将key由oldname重命名為newname,若newname存在則删除newname表示的key
dbsize:傳回目前資料庫中key的數目
expire:設定一個key的活動時間(s)
ttl:獲得一個key的活動時間
select(index):按索引查詢
move(key, dbindex):将目前資料庫中的key轉移到有dbindex索引的資料庫
flushdb:删除目前選擇資料庫中的所有key
flushall:删除所有資料庫中的所有key
set(key, value):給資料庫中名稱為key的string賦予值value
get(key):傳回資料庫中名稱為key的string的value
getset(key, value):給名稱為key的string賦予上一次的value
mget(key1, key2,…, key N):傳回庫中多個string(它們的名稱為key1,key2…)的value
setnx(key, value):如果不存在名稱為key的string,則向庫中添加string,名稱為key,值為value
setex(key, time, value):向庫中添加string(名稱為key,值為value)同時,設定過期時間time
mset(key1, value1, key2, value2,…key N, value N):同時給多個string指派,名稱為key i的string指派value i
msetnx(key1, value1, key2, value2,…key N, value N):如果所有名稱為key i的string都不存在,則向庫中添加string,
名稱key i指派為value i
incr(key):名稱為key的string增1操作
incrby(key, integer):名稱為key的string增加integer
decr(key):名稱為key的string減1操作
decrby(key, integer):名稱為key的string減少integer
append(key, value):名稱為key的string的值附加value
substr(key, start, end):傳回名稱為key的string的value的子串
rpush(key, value):在名稱為key的list尾添加一個值為value的元素
lpush(key, value):在名稱為key的list頭添加一個值為value的 元素
llen(key):傳回名稱為key的list的長度
lrange(key, start, end):傳回名稱為key的list中start至end之間的元素(下标從0開始,下同)
ltrim(key, start, end):截取名稱為key的list,保留start至end之間的元素
lindex(key, index):傳回名稱為key的list中index位置的元素
lset(key, index, value):給名稱為key的list中index位置的元素指派為value
lrem(key, count, value):删除count個名稱為key的list中值為value的元素。
count為0,删除所有值為value的元素,count>0從頭至尾删除count個值為value的元素,count<0從尾到頭删除|count|個值為value的元素。
lpop(key):傳回并删除名稱為key的list中的首元素 rpop(key):傳回并删除名稱為key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop指令的block版本。
即當timeout為0時,若遇到名稱為key i的list不存在或該list為空,則指令結束。
如果timeout>0,則遇到上述情況時,等待timeout秒,如果問題沒有解決,則對keyi+1開始的list執行pop操作。
brpop(key1, key2,… key N, timeout):rpop的block版本。參考上一指令。
rpoplpush(srckey, dstkey):傳回并删除名稱為srckey的list的尾元素,并将該元素添加到名稱為dstkey的list的頭部
sadd(key, member):向名稱為key的set中添加元素member
srem(key, member) :删除名稱為key的set中的元素member
spop(key) :随機傳回并删除名稱為key的set中一個元素
smove(srckey, dstkey, member) :将member元素從名稱為srckey的集合移到名稱為dstkey的集合
scard(key) :傳回名稱為key的set的基數
sismember(key, member) :測試member是否是名稱為key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, key1, key2,…key N) :求交集并将交集儲存到dstkey的集合
sunion(key1, key2,…key N) :求并集
sunionstore(dstkey, key1, key2,…key N) :求并集并将并集儲存到dstkey的集合
sdiff(key1, key2,…key N) :求差集
sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集儲存到dstkey的集合
smembers(key) :傳回名稱為key的set的所有元素
srandmember(key) :随機傳回名稱為key的set的一個元素
6、對zset(sorted set)操作的指令
zadd(key, score, member):向名稱為key的zset中添加元素member,score用于排序。如果該元素已經存在,則根據score更新該元素的順序。
zrem(key, member) :删除名稱為key的zset中的元素member
zincrby(key, increment, member) :如果在名稱為key的zset中已經存在元素member,則該元素的score增加increment;
否則向集合中添加該元素,其score的值為increment
zrank(key, member) :傳回名稱為key的zset(元素已按score從小到大排序)中member元素的rank(即index,從0開始),
若沒有member元素,傳回“nil”
zrevrank(key, member) :傳回名稱為key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),
zrange(key, start, end):傳回名稱為key的zset(元素已按score從小到大排序)中的index從start到end的所有元素
zrevrange(key, start, end):傳回名稱為key的zset(元素已按score從大到小排序)中的index從start到end的所有元素
zrangebyscore(key, min, max):傳回名稱為key的zset中score >= min且score <= max的所有元素
zcard(key):傳回名稱為key的zset的基數 zscore(key, element):傳回名稱為key的zset中元素element的
score zremrangebyrank(key, min, max):删除名稱為key的zset中rank >= min且rank <= max的所有元素
zremrangebyscore(key, min, max) :删除名稱為key的zset中score >= min且score <= max的所有元素
zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):對N個zset求并集和交集,
并将最後的集合儲存在dstkeyN中。對于集合中每一個元素的score,在進行AGGREGATE運算前,都要乘以對于的WEIGHT參數。
如果沒有提供WEIGHT,預設為1。預設的AGGREGATE是SUM,即結果集合中元素的score是所有集合對應元素進行SUM運算的值,而MIN和MAX是指,
結果集合中元素的score是所有集合對應元素中最小值和最大值。
hset(key, field, value):向名稱為key的hash中添加元素field<—>value
hget(key, field):傳回名稱為key的hash中field對應的value
hmget(key, field1, …,field N):傳回名稱為key的hash中field i對應的value
hmset(key, field1, value1,…,field N, value N):向名稱為key的hash中添加元素field i<—>value i
hincrby(key, field, integer):将名稱為key的hash中field的value增加integer
hexists(key, field):名稱為key的hash中是否存在鍵為field的域
hdel(key, field):删除名稱為key的hash中鍵為field的域
hlen(key):傳回名稱為key的hash中元素個數
hkeys(key):傳回名稱為key的hash中所有鍵
hvals(key):傳回名稱為key的hash中所有鍵對應的value
hgetall(key):傳回名稱為key的hash中所有的鍵(field)及其對應的value
save:将資料同步儲存到磁盤
bgsave:将資料異步儲存到磁盤
lastsave:傳回上次成功将資料儲存到磁盤的Unix時戳
shundown:将資料同步儲存到磁盤,然後關閉服務
info:提供伺服器的資訊和統計
monitor:實時轉儲收到的請求
slaveof:改變複制政策設定
config:在運作時配置Redis伺服器
1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
#在Shell指令行下啟動Redis用戶端工具。
/> redis-cli
#清空目前選擇的資料庫,以便于對後面示例的了解。
redis 127.0.0.1:6379> flushdb
OK
#添加String類型的模拟資料。
redis 127.0.0.1:6379> set mykey 2
redis 127.0.0.1:6379> set mykey2 "hello"
#添加Set類型的模拟資料。
redis 127.0.0.1:6379> sadd mysetkey 1 2 3
(integer) 3
#添加Hash類型的模拟資料。
redis 127.0.0.1:6379> hset mmtest username "stephen"
(integer) 1
#根據參數中的模式,擷取目前資料庫中符合該模式的所有key,從輸出可以看出,該指令在執行時并不區分與Key關聯的Value類型。
redis 127.0.0.1:6379> keys my*
1) "mysetkey"
2) "mykey"
3) "mykey2"
#删除了兩個Keys。
redis 127.0.0.1:6379> del mykey mykey2
(integer) 2
#檢視一下剛剛删除的Key是否還存在,從傳回結果看,mykey确實已經删除了。
redis 127.0.0.1:6379> exists mykey
(integer) 0
#檢視一下沒有删除的Key,以和上面的指令結果進行比較。
redis 127.0.0.1:6379> exists mysetkey
#将目前資料庫中的mysetkey鍵移入到ID為1的資料庫中,從結果可以看出已經移動成功。
redis 127.0.0.1:6379> move mysetkey 1
#打開ID為1的資料庫。
redis 127.0.0.1:6379> select 1
#檢視一下剛剛移動過來的Key是否存在,從傳回結果看已經存在了。
redis 127.0.0.1:6379[1]> exists mysetkey
#在重新打開ID為0的預設資料庫。
redis 127.0.0.1:6379[1]> select 0
#檢視一下剛剛移走的Key是否已經不存在,從傳回結果看已經移走。
(integer) 0
#準備新的測試資料。
redis 127.0.0.1:6379> set mykey "hello"
#将mykey改名為mykey1
redis 127.0.0.1:6379> rename mykey mykey1
#由于mykey已經被重新命名,再次擷取将傳回nil。
redis 127.0.0.1:6379> get mykey
(nil)
#通過新的鍵名擷取。
redis 127.0.0.1:6379> get mykey1
"hello"
#由于mykey已經不存在了,是以傳回錯誤資訊。
(error) ERR no such key
#為renamenx準備測試key
redis 127.0.0.1:6379> set oldkey "hello"
redis 127.0.0.1:6379> set newkey "world"
#由于newkey已經存在,是以該指令未能成功執行。
redis 127.0.0.1:6379> renamenx oldkey newkey
#檢視newkey的值,發現它也沒有被renamenx覆寫。
redis 127.0.0.1:6379> get newkey
"world"
2. PERSIST/EXPIRE/EXPIREAT/TTL:
#為後面的示例準備的測試資料。
#将該鍵的逾時設定為100秒。
redis 127.0.0.1:6379> expire mykey 100
#通過ttl指令檢視一下還剩下多少秒。
redis 127.0.0.1:6379> ttl mykey
(integer) 97
#立刻執行persist指令,該存在逾時的鍵變成持久化的鍵,即将該Key的逾時去掉。
redis 127.0.0.1:6379> persist mykey
#ttl的傳回值告訴我們,該鍵已經沒有逾時了。
(integer) -1
#為後面的expire指令準備資料。
redis 127.0.0.1:6379> del mykey
#設定該鍵的逾時被100秒。
#用ttl指令看一下目前還剩下多少秒,從結果中可以看出還剩下96秒。
(integer) 96
#重新更新該鍵的逾時時間為20秒,從傳回值可以看出該指令執行成功。
redis 127.0.0.1:6379> expire mykey 20
#再用ttl确認一下,從結果中可以看出果然被更新了。
(integer) 17
#立刻更新該鍵的值,以使其逾時無效。
redis 127.0.0.1:6379> set mykey "world"
#從ttl的結果可以看出,在上一條修改該鍵的指令執行後,該鍵的逾時也無效了。
3. TYPE/RANDOMKEY/SORT:
#由于mm鍵在資料庫中不存在,是以該指令傳回none。
redis 127.0.0.1:6379> type mm
none
#mykey的值是字元串類型,是以傳回string。
redis 127.0.0.1:6379> type mykey
string
#準備一個值是set類型的鍵。
redis 127.0.0.1:6379> sadd mysetkey 1 2
#mysetkey的鍵是set,是以傳回字元串set。
redis 127.0.0.1:6379> type mysetkey
set
#傳回資料庫中的任意鍵。
redis 127.0.0.1:6379> randomkey
"oldkey"
#清空目前打開的資料庫。
#由于沒有資料了,是以傳回nil。