天天看點

redis 安裝和配置

首先編譯

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>