首先編譯
make完成後,有産生可執行檔案(綠色的)
redis-server:redis伺服器的啟動程式
redis-cli:redis指令行工具,也可為用戶端
redis-benchmark:redis性能測試工具(讀寫)
redis-stat:redis狀态檢測工具(狀态參數延遲)
移動檔案,便于管理
修改redis.conf 配置監聽端口port 6379改為 port 6378
指定配置檔案啟動redis
預設是前台運作
redis的背景啟動并運作需要通過配置檔案中的參數設定。
redis的配置檔案中有哪些配置呢?
daemonize 如果需要在背景運作,把該項改為yes
pidfile 當redis在背景運作的時候,redis預設會把pid檔案放在/var/run/redis.pid,你可以配置到其他位址。當運作多個redis服務時,需要指定不同的pid檔案和端口
bind 綁定ip,設定後隻接受來自該ip的請求
port 監聽端口,預設是6379
loglevel 分為4個等級:debug verbose notice warning
logfile 用于配置log檔案位址
databases 設定資料庫個數,預設使用的資料庫為0
save 設定redis進行資料庫鏡像的頻率。
rdbcompression 在進行鏡像備份時,是否進行壓縮
dbfilename 鏡像備份檔案的檔案名
dir 資料庫鏡像備份的檔案放置路徑
slaveof 設定資料庫為其他資料庫的從資料庫
masterauth 主資料庫連接配接需要的密碼驗證
requriepass 設定 登陸時需要使用密碼
maxclients 限制同時使用的客戶數量
maxmemory 設定redis能夠使用的最大記憶體
appendonly 開啟append only模式
appendfsync 設定對appendonly.aof檔案同步的頻率(對資料進行備份的第二種方式)
vm-enabled 是否開啟虛拟記憶體支援 (vm開頭的參數都是配置虛拟記憶體的)
vm-swap-file 設定虛拟記憶體的交換檔案路徑
vm-max-memory 設定redis使用的最大實體記憶體大小
vm-page-size 設定虛拟記憶體的頁大小
vm-pages 設定交換檔案的總的page數量
vm-max-threads 設定vm io同時使用的線程數量
glueoutputbuf 把小的輸出緩存存放在一起
hash-max-zipmap-entries 設定hash的臨界值
activerehashing 重新hash
一、string 類型(redis的string可以包含任何資料,比如jpg圖檔或者序列化的對象)
set name lijie
setnx name lijie 如果key已經存在,傳回0,不更新資料,nx是not exist的意思
get name 取出資料
setex 指定鍵的有效期
setex haicolor 10 red
setrange email 6 li-jie.me 設定子字元串從第6位開始替換
mset/mget 批量設定 ok表示所有值都被設定了,失敗傳回零表示沒有任何值被設定
mset key1 lijie1 key2 lijie2
msetnx跟setnx類似
getset 設定key的值并且傳回key的舊值
getrange擷取子字元串(前6個字元)
getrange email 0 5
incr/decr 遞增/遞減(步長為1)
incr key1
incrby/decrby 已指定的步長遞增或遞減,key不存在時設定key,并認為原來的value為0
incrby key1 6
incrby key1 -6
append 給指定key的value追加字元串,傳回新字元串長度
strlen 檢視key的value長度
二、hash類型(映射表,特别适用于存儲對象)
hset user:001 name lijie
hget user:001 name
hsetnx user:001 name lijie
hmset 同時設定hash的多個字段
hmset user:002 name lijie age 20 sex 1
hincrby user:003 age 5
hexists判斷hash表裡某個字段是否存在
hlen代表hash表裡所有字段的數量
hdel删除某個字段
hdel user:003 age
hkeys傳回hash表的所有field
hvals傳回hash表的所有value
同時傳回hash表中的全部字段和值
hgetall user:003
三、list類型(連結清單)
lpush mylist "world"//在key對應的list頭部添加元素
lpush mylist "hello"
lrange mylist 0 -1 //從頭取到尾
rpush 向尾部壓入元素
//在特定位置前後添加元素
linsert mylist before "world" "middle"
lset //将指定下标的元素替換掉
lset mylist 0 "change"
lrem //從list中删除n個和value相同的元素,傳回删除掉的個數
n<0從尾部删除,n=0全部删除
lrem mylist 3 "one"
保留指定範圍的元素,兩端都删除
ltrim mylist 1 -1
lpop從頭彈出一個元素
rpop從尾彈出一個元素
rpoplpush//從第一個list的尾部移除元素并添加到第二個list的頭部
rpoplpush list5 list6
傳回指定索引的元素
lindex mylist 0
llen 傳回指定list的長度
四、set集合(無序集合,交集、并集、差集sns中好友推薦,共同好友)
添加元素
sadd myset hello
檢視元素
smembers myset
删除集合中的某個元素
srem myset hello
spop随機彈出删除元素
spop myset
sdiff兩個集合取差集
sdiff myset1 myset2
sdiffstore将傳回的差集存到另一個集合裡(myset3)
sdiffstore myset3 myset1 myset2
sinter 傳回兩個集合的交集
sinterstore 将傳回的交集存到另一個集合裡
取并集
sunion myset1 myset2
取并集并且存儲
sunionstore myset3 myset1 myset2
将一個集合中的元素移動到第二個集合
smove myset1 myset2 three
scard 檢視集合中元素個數
scard myset
判斷某元素是否為集合的元素
sismember myset one//判斷one元素是不是集合myset中的元素
srandmember 随機傳回集合中一個元素但不删除
五、sorted set(有序集合,可以了解為有兩列的mysql表,加了個順序字段)
zadd zset1 1 one
zadd zset1 2 two
zrange zset1 0 -1
zrange zset1 0 -1 withscores //帶順序号檢視
zrem zset1 one//删除有序集合中元素
zincrby zset1 2 two 對順序号增加
zrank zset1 two//傳回元素的索引值,升序排序
zrevrank zset1 two//傳回元素的索引值,降序排序
zrevrange zset1 0 -1 withscores
zrangebyscore zset1 2 4 withscores//傳回score在給定區間的元素(2-4)
zcount zset1 2 4//傳回集合中socre在給定區間的數量
zcard zset1 //傳回集合中所有元素的個數
zremrangebyrank zset1 2 3//删除索引在指定區間的元素
zremrangebyscore zset1 2 5//删除順序在指定區間的元素
六、redis常用指令
1.鍵值相關指令
keys * 傳回所有鍵
exists key1 判斷某個key是否存在
del key1 删除某鍵
expire key1 10 設定過期時間10s
ttl key1 擷取key的有效時長,直到-1說明此值已過期
select 0 選擇目前資料庫(預設總共16個資料庫)
move key1 1 移動到1資料庫
persist key1 移除指定key的過期時間
randomkey 随機傳回一個key
rename key1 key_new 重命名
type 傳回鍵的資料類型
2.伺服器相關指令
直接輸入ping 測試連接配接是否存活,連接配接正常傳回pong
quit 退出用戶端
dbsize傳回資料庫中鍵的數量
info 擷取redis伺服器的資訊
config get * 傳回所有配置選項
flushdb 删除目前資料庫中的所有key
flushall 删除所有資料庫中的所有key
3.進階特性
(1) 安全性
requirepass yuanhai//配置檔案中設定密碼
auth yuanhai 用戶端輸入密碼進行連接配接或者用戶端啟動時 redis-cli -a yuanhai
(2)主從複制
隻需在slave的配置檔案中加入以下配置:
slaveof 192.168.1.1 6379 #指定master的ip和端口
masterauth yuanhai #這是master的密碼
(3)事務處理
multi指令進入事務上下文,該指令後續的指令不會立即執行,而是先放到一個隊列中,當執行exec時,redis會順序執行隊列中的所有指令
multi
set age 10
set age 20
exec
discard //取消事務,事務復原
redis樂觀鎖執行個體
watch key //監控某個鍵是否被修改過,如果修改過目前的事務不允許執行
相當于加了個樂觀鎖
exec discard unwatch 都會清除連接配接中的所有監視
(4)持久化機制
一、snapshotting 快照預設方式,存資料,預設檔案名dump.rdb
save 900 1 #900秒内如果超過1個key被修改,則發起快照儲存
save 300 10
save 60 10000
dbfilename dump.rdb
快照存在丢失資料的缺點
二、append-only aof方式,存操作指令
appendonly yes//啟用aof持久化方式
#fsync函數強制os寫入到磁盤的時機
appendfsync always//收到指令就立即寫入磁盤,最慢,但是保證完全的持久化
appendfsync everysec//每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折衷
appendfsync no//完全依賴os,性能最好,持久化沒保證
(6)釋出及訂閱消息(解除耦合,可用于聊天系統)
subscribe tv1 tv2//訂閱兩個通道的消息
publish tv1 lijie//tv1釋出消息
(7)虛拟記憶體(vm)
vm-enabled yes #開啟vm功能
vm-swap-file /tmp/redis.swap #交換出來的value儲存的檔案路徑
vm-max-memory 100000 #redis使用的最大記憶體上限
vm-page-size 32 #每個頁面的大小32位元組
vm-pages 134217728 #最多使用多少頁面
vm-max-threads 4 #用于執行value對象換入的工作線程數量
參考文章:
redis多資料庫:databases 設定資料庫個數
<a href="http://www.ttlsa.com/redis/redis-database/" target="_blank">http://www.ttlsa.com/redis/redis-database/</a>
redis安裝
<a href="http://www.open-open.com/lib/view/open1426468117367.html" target="_blank">http://www.open-open.com/lib/view/open1426468117367.html</a>
redis配置檔案解析
<a href="http://www.cnblogs.com/huangjacky/p/3700473.html" target="_blank">http://www.cnblogs.com/huangjacky/p/3700473.html</a>
<a href="http://www.2cto.com/database/201307/225113.html" target="_blank">http://www.2cto.com/database/201307/225113.html</a>
jedis代碼操作;
<a href="http://my.oschina.net/lilw/blog/169635" target="_blank">http://my.oschina.net/lilw/blog/169635</a>
<a href="http://www.cnblogs.com/liuling/p/2014-4-19-04.html" target="_blank">http://www.cnblogs.com/liuling/p/2014-4-19-04.html</a>
redis叢集搭建
<a href="http://www.redis.cn/topics/cluster-tutorial.html" target="_blank">http://www.redis.cn/topics/cluster-tutorial.html</a>
redis用戶端緩沖區和主從複制
<a href="http://blog.csdn.net/jiangguilong2000/article/details/38436941" target="_blank">http://blog.csdn.net/jiangguilong2000/article/details/38436941</a>