set:設(shè)置key對應(yīng)的值為string類型的value set name lijie
setnx 設(shè)置key對應(yīng)的值為string類型的value 如果key 已經(jīng)存在,返回0只酥,成功返回1 nx是not exist的意思
setex:設(shè)置key對應(yīng)的值為string類型的value飘诗,并指定此鍵值對應(yīng)的有效期 setex haircolor 10 red 有效期10秒
setrange設(shè)置指定key的value值的子字符串
例如我們希望將lijie的126郵箱替換為gmail郵箱
set email lijie@126.com
setrange email 6 gmail.com 6表示下標 表示從第6個字符開始替換
mset:一次設(shè)置多個key的值,成功返回ok表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置
msetnx:一次設(shè)置多個key的值致板,成功返回ok表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置咏窿,但是不會覆蓋已經(jīng)存在的key
getset 設(shè)置key的值 并返回key的舊值
getrange:獲取key的value值的子字符串
mget 一次獲取多個key的值斟或,如果對應(yīng)的key不存在 則對應(yīng)返回nil
incr 對key值做加加操作 并返回新的值
incrby 加指定值 key不存在會設(shè)置key,并認為原來的value是0
append:給指定的key的字符串追加value 返回新字符串的長度
strlen:取指定key的value值的長度
二 hashes類型及操作
Redis hash是一個string類型的field和value的映射表集嵌。它的添加 刪除操作是0(1)(平均)
hash特別適合用于存儲對象萝挤。相較于將對象的每個字段存成單個string類型。將一個對象存儲在hash類型中會占用更少的內(nèi)存根欧。并且可以更方便的存儲整個對象
hset:設(shè)置hash field為指定值 如果key不存在怜珍,則先創(chuàng)建
hsetnx 設(shè)置hash field為指定值 如果key不存在,則先創(chuàng)建.如果存在返回0
hmset 同時設(shè)置hash的多個field
hincrby 指定的hash field 加上給定值
hexists 測試指定field是否存在
hlen: 指定hash的field數(shù)量
hdel 刪除指定hash的field
hkeys:返回hash的所有field
hvals:返回hash的所有value
hgetall:返回某個hash中所有的field和value
三
lists 類型及操作
list是一個鏈表結(jié)構(gòu)主要功能是push pop 獲取一個范圍的所有值
操作中key理解為鏈表的名字 redis的list類型其實就是一個每個元素都是string類型的
雙向鏈表咽块。我們可以通過push pop操作從鏈表的頭部或者尾部添加刪除元素绘面,這樣list即可以作為棧,又可以作為隊列
lpush :在key對應(yīng)list的頭部添加字符串元素
lpush mylist1 word 向鏈表添加元素
lrange mylist1 0 -1 獲取mylist1所有元素
rpush :在key對應(yīng)list的尾部添加字符串元素
rpush mylist2 word
rpush mylist2 hello
lrange mylist2 0 -1
linsert 在key對應(yīng)list的特定位置前或后添加字符串元素
lpush list3 one
lpush list3 two
linsert list3 before one three
lset 設(shè)置list中指定下標的元素值
lrem 從key對應(yīng)的list中刪除n個和value相同的元素
ltrim 保留指定key的值范圍內(nèi)的數(shù)據(jù)
lpop 從list的頭部刪除元 并返回刪除元素
rpoplpush 從第一個list的尾部刪除元素 并添加到第二個list的頭部
lindex 返回名稱為key的list中index位置的元素
llen:返回key對應(yīng)list的長度
四
sets類型及操作
set是集合 它是string類型的無序集合侈沪。 set是通過hash table實現(xiàn)的 添加 刪除 和查找的復(fù)雜度都是0(1). 對集合我們可以取并集 交集 差集揭璃。通過這些操作我們可以實現(xiàn)sns中的好友推薦等
sadd 向名稱為key的set中添加元素
srem 刪除名稱為key的set中的元素
spop 隨機返回并刪除名稱為key的set中一個元素
sdiff:返回所有給定key與第一key的差集
sinter 返回所有給定key的交集
sinterstore 返回所有給定key的交集 并將結(jié)果存在另一個key
sunion 返回所有給定key的并集
smove 從第一個key對應(yīng)的set中移除member并添加到第二個對應(yīng)的set中
scard 返回名稱為key的set的元素個數(shù)
sismember 測試member是否是名稱為key的set的元素
srandmember 隨機返回名稱為key的set的一個元素,但不刪除元素
五
sorted sets類型及操作
sorted set是set的一個升級版本亭罪,它在set的基礎(chǔ)上增加了一個順序?qū)傩允葩桑@一
屬性在添加修改元素時可以指定,每次指定后应役,zset會自動重新按新的值調(diào)整順序
可以理解為有2列的mysql表 一列存value 一列存順序 操作中key理解為zset的名字情组。
zadd 向名稱為key的zset中添加元素member,score用于排序。如果該元素存在
則更新其順序
zrem 刪除名稱為key的zset中的元素member
zincrby 如果在名稱為key的zset中已經(jīng)存在元素member
zrank 返回名稱為key的zset中member元素的排名(按score從小到大排序)即下標
zrevrank 返回名稱為key的zset中member元素的排名(按score從大到小排序)即下標
zcount 返回集合中score在給定區(qū)間內(nèi)的數(shù)量
六 redis的常用命令及高級應(yīng)用
keys *
keys my*
exist:確認一個key是否存在
del 刪除一個key
expire :設(shè)置一個key的過期時間
ttl:獲取一個key的有效時長
move 把當前數(shù)據(jù)庫中的key轉(zhuǎn)移到其他數(shù)據(jù)庫中
persist:移除給定key的過期時間
rename : 重命名
rename age age_new
type 返回值的類型
type addr
ping:測試連接是否存活
echo: 在命令行打印一些內(nèi)容
select表示選擇數(shù)據(jù)庫
redis的數(shù)據(jù)庫編號從0~15 我們可以選擇任意一個數(shù)據(jù)庫進行數(shù)據(jù)的存儲
當選擇16時箩祥,報錯院崇,說明沒有編號為16的這個數(shù)據(jù)庫
quit exit 都表示退出連接
info:獲取服務(wù)器的信息和統(tǒng)計
config get 實時傳儲收到的請求
config get dir 獲取dir這個參數(shù)配置的值
獲取全部參數(shù)的配置值也很簡單 只需要執(zhí)行 config get * 即可將全部的值都顯示出來
flushdb 刪除當前選擇數(shù)據(jù)庫中所有key
flushall 刪除所有數(shù)據(jù)庫中所有key
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?redis 高級實用特性
1,安全性:設(shè)置客戶端連接后進行任何其他指定前需要使用的密碼
因為redis速度相當快袍祖,所以在一臺比較好的服務(wù)器下底瓣,一個外部的用戶可以在一秒鐘進行
150k次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
配置
requirepass bejing
usr/local/redis/bin/redis-cli
keys *
auth beijing
或者
usr/local/redis/bin/redis-cli -a beijing
取消密碼驗證后
2蕉陋,主從復(fù)制
redis主從復(fù)制配置和使用都非常簡單 通過主從復(fù)制可以允許多個slave server 擁有和master server相同的數(shù)據(jù)庫副本捐凭。
redis主從復(fù)制過程
1拨扶,slave與,master建立連接茁肠,發(fā)送sync同步命令
2患民,master會啟動一個后臺進程 將數(shù)據(jù)庫快照保存到文件中
同時master主進程會開始收集新的寫命令并緩存
3,后臺完成保存后垦梆,就將次文件發(fā)送給slave
4匹颤,slave將此文件保存到硬盤上
配置主從服務(wù)器:
配置slave服務(wù)器很簡單 只需要在slave的配置文件中加入以下配置
slaveof 192.168.2.201 6379 #指定master的ip和端口
masterauth lamp#這是主機的密碼
配置從redis
vim /etc/redis.conf
主redis
從redis
3,事務(wù)處理
redis對事務(wù)的支持目前還比較簡單 redis 只能保證一個client 發(fā)起的事務(wù)中的命令可以連續(xù)的執(zhí)行奶赔,而中間不會插入其他client的命令惋嚎。當一個client在一個連接中發(fā)出multi命令時,這個連接會進入一個事務(wù)上下文站刑,該連接后續(xù)的命令不會立即執(zhí)行,而是先放到一個隊列中鼻百,當執(zhí)行exec命令時绞旅,redis會順序的執(zhí)行隊列中的所有命令。
set age 100
get age
multi
set age 10
set age 20
exec
取消一個事務(wù):discard
multi
incr age
incr name
exec
取消事務(wù)
事務(wù)不完美
一個成功 一個失敗
4温艇,持久化機制
redis是一個支持持久化的內(nèi)存數(shù)據(jù)庫因悲,也就是說redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到硬盤來保證
持久化
1,snapshotting(快照)也是默認方式
將內(nèi)存中的數(shù)據(jù)以快照的方式寫入到二進制文件中勺爱,默認的文件名為dump.rdb.
可以通過配置設(shè)置自動做快照持久化的方式晃琳。我們可以配置redis在n秒內(nèi)如果超過m個key被修改就自動做快照
save 900 1? #900秒內(nèi)如果超過1個key被修改,則發(fā)起快照保存
save 300 10 #300秒內(nèi)如果超過10個key被修改琐鲁,則發(fā)起快照保存
2卫旱,Append-only file(縮寫aof)的方式
由于快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話围段,就會丟失最后一次快照后的所有修改顾翼。
aof比快照方式有更好的持久化性,是由于在使用aof時奈泪,redis會將每一個收到的寫命令都通過write函數(shù)追加到文件中适贸,當redis重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容
當然由于os會在內(nèi)核中緩存write做的修改,所以可能不是立即寫到磁盤上涝桅。這樣aof方式的持久化也還是有可能會丟失部分修改
可以通過配置文件告訴redis 我們想要通過fsync函數(shù)強制os寫入到磁盤的時機
appendonly yes//啟用aof持久化方式
appendfsync always //收到寫命令就立即寫入磁盤拜姿,最慢,但是保證完全的持久化
appendfsync everysec //每秒鐘寫入磁盤一次冯遂,在性能和持久化方面做了很好的折中
appendfsync no //完全依賴os 性能最好 持久化沒保證
配置文件
5蕊肥,發(fā)布訂閱消息
發(fā)布訂閱(pub/sub)是一種消息通信模式,主要的目的是解除消息發(fā)布者和消息訂閱者之間的耦合
redis作為一個pub/sub的server债蜜,在訂閱者和發(fā)布者之間起到了消息路由的功能晴埂。訂閱者可以通過
subscribe和psubscribe命令向redis server 訂閱自己感興趣的消息類型究反,redis將信息類型稱為通道。當發(fā)布者通過publish命令向redis server發(fā)送特定類型的信息時儒洛,訂閱該信息類型的全部client都會收到此消息
接收信息
接收信息
發(fā)送信息
6精耐,虛擬內(nèi)存的使用
redis的虛擬內(nèi)存就是把不經(jīng)常訪問的數(shù)據(jù)從內(nèi)存交換到磁盤中,從而騰出寶貴的內(nèi)存空間用于其他需要訪問的數(shù)據(jù)琅锻。 尤其是對于redis這樣的內(nèi)存數(shù)據(jù)庫卦停,內(nèi)存總是不夠的。除了可以將數(shù)據(jù)分割到多個redis server外 另外能夠提高數(shù)據(jù)庫容量的辦法就是使用虛擬內(nèi)存把那些不經(jīng)常訪問的數(shù)據(jù)交換到磁盤上恼蓬。
vm相關(guān)配置
vm-enabled yes //開啟vm功能
vm-swap-file /tmp/redis.swap //#交換出來的value保存的文件路徑
vm-max-memory 100000 //redis使用的最大內(nèi)存上限
vm-page-size 32 //每個頁面的大小32字節(jié)
vm-pages 134217728 最多使用多少個頁面
vm-max-threads //用于執(zhí)行value對象換入的工作線程數(shù)量