一、redis介紹與安裝比mysql快10倍以上 redis
*****************redis適用場合****************sql
1.取最新N個數據的操做數據庫
2.排行榜應用,取TOP N 操做緩存
3.須要精確設定過時時間的應用安全
4.計數器應用服務器
5.Uniq操做,獲取某段時間全部數據排重值app
6.實時系統,反垃圾系統7.Pub/Sub構建實時消息系統dom
7.Pub/Sub構建實時消息系統8.構建隊列系統分佈式
9.緩存
=============================================
SET操做每秒鐘 110000 次,GET操做每秒鐘 81000 次,服務器配置以下:
Linux 2.6, Xeon X3320 2.5Ghz.
stackoverflow 網站使用 Redis 作爲緩存服務器。
同時也會將數據寫到硬盤上。因此數據是安全的(除忽然斷電外,重啓服務會寫到dump.rdb文件中)
1.安裝:
tar zxvf redis-2.6.9.tar.gz
cd redis-2.6.9
make
cd src && make install
2.移動配置文件位置(爲了便於管理)
cd /usr/local/
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
mv /lamp/redis-2.6.9/redis.conf /usr/local/redis/etc
cd /lamp/redis-2.6.9/src
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
3.修改配置文件
vi /usr/local/redis/etc/redis.conf
1、將daemonize no 中no改成yes[yes指後臺運行]
4.啓動/隨機啓動:
cd /usr/local/redis/bin
./redis-server /usr/local/redis/etc/redis.conf#啓動redis並指定配置文件。
#vi /etc/rc.local #設置隨機啓動。
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
5.查看是否啓動成功
ps -ef | grep redis
netstat -tunpl | grep 6379#查看端口是否佔用。
6.進入客戶端/退出
cd /usr/local/redis/bin
./redis-cli#進入
quit#退出
7.關閉redis
pkill redis-server#關閉
./redis-cli shutdown#關閉
************************************Redis安全************************************
Redis的安全性???(由如下4種方式)
1.用ACL控制器安全性。
2.在redis.conf配置文件增長下面這一行配置,便可把redis綁定在單個接口上(但並非只有接受這個網卡的數據)。
bind 127.0.0.1
3.給redis加上較長密碼(無須要記住)
4.在redis.conf配置啓用認證功能。
5.SSL代理
6.禁用指定命令。
************************************** Redis配置 **********************************************
daemonize 若是須要在後臺運行,把該項改成yes
pidfile 配置多個pid的地址 默認在/var/run/redis.pid
bind 綁定ip,設置後只接受來自該ip的請求
port 監聽端口,默認爲6379
timeout 設置客戶端鏈接時的超時時間,單位爲秒
loglevel 分爲4級,debug、verbose、notice、warning
logfile 配置log文件地址
databases 設置數據庫的個數,默認使用的數據庫爲0
save 設置redis進行數據庫鏡像的頻率
rdbcompression 在進行鏡像備份時,是否進行壓縮
Dbfilename 鏡像備份文件的文件名
Dir 數據庫鏡像備份的文件放置路徑
Slaveof 設置數據庫爲其餘數據庫的從數據庫
Masterauth 主數據庫鏈接須要的密碼驗證
Requirepass 設置登陸時須要使用的密碼
Maxclients 限制同時鏈接的客戶數量
Maxmemory 設置redis可以使用的最大內存
Appendonly 開啓append only模式
如下了解便可:
Appendfsync 設置對appendonly.aof文件同步的頻率
vm-enabled 是否開啓虛擬內存支持
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
*******************************************************************
5種數據類型:字符串、哈希、鏈表、集合、有序集合。
支持:push/pop、add/remove 、取交集、並集、差集、排序。
redis<===同步====>mysql
同時也會將數據寫到硬盤上。因此數據是安全的(除忽然斷電外,重啓服務會寫到dump.rdb文件中)
*******************************************************************
select num#選擇庫,默認在0庫,共16個庫
auth liweijie#受權用戶所需密碼(密碼就是redis.conf中配置的密碼)
flushdb#清空數據庫。
String(字符串)類型:
set name lijie#設置鍵name的值爲lijie
get name#獲取name的值。
keys *#查詢全部的鍵。
setnx name liweijie#若是鍵已存在則返回0,不更新,防止覆蓋。
setex haircolor 10 red #設置鍵的值的有效期爲10秒。
setrange email 6 lampbre.com#替換鍵的值從第6個字符開始換爲lampbre.com
mset name1 李大偉 name2 李小偉#設置多個鍵的值。
msetnxname1 張三 name3 李四#判斷鍵是否存在,不存在則設置,不然不設置返回0
mget name1 name2 name3#一次獲取多個鍵的值。
getset name1 Tom#從新設置鍵的值,並返回舊的鍵值。
getrange email 6 18#截取email鍵的值,從第6-18位間的字符。
incr uid#每次自增1 (若是key中uid不存在,則設置並從0開始,下同)
incrby uid 5#每次自增5
incrby uid -5#每次自減5
decr uid #每次自減1
decrby uid 5#每次自減5
appendname1 @126.com#給name1的值,添加字符串@126.com
strlenname1#返回鍵name1的值的長度。
*************************************************************************
Hashes(哈希)類型:
hset user:001 name liweijie#哈希設置用戶user:001的name鍵值爲liweijie
hset user:001 age 21#一樣,增長一個age鍵值爲21
hsetnx user:001 age 22#同上,但檢測鍵是否存在。若不存在建立。
hmset user:002 name liweijie2 age 26 sex 1#同時設置多個鍵的值。
hget user:001 name#哈希獲取用戶user:001的name鍵的值。
hget user:001 age #同上。
hmget user:001 name age sex#獲取多個指定的鍵的值。
hgetall user:001#獲取全部鍵的值。
hincrbyuser:001 age -8#在指定鍵上加上給定的值。
hexists user:001 sex#檢測指定的鍵值是否存在。
hlen user:001#返回指定哈希的鍵個數/字段個數。
hdel user:001 sex#刪除指定(user:001)哈希的指定字段或是鍵值。
hkeys user:003#返回哈希裏全部字段或是鍵值。
*********************************************************************
Lists(鏈表)類型及操做(棧或隊列):
lpush mylist "world"#從頭部插入字符串
lpush mylist "hello"#同上
lrange mylist 0 -1#獲取從0到最後一個如[1) "hello" 2) "world"]
rpush mylist "jiejie"#在尾部插入
linsert mylist before "hello" "this is linsert" #指定插入位置(在hello以前插入)。
lset mylist 0 "what"#設置修改指定下標的值。
lrem mylist 1 "hello"#刪除(1個)一個值爲hello的元素。(n<0從尾部刪除,n=0所有刪除)
ltrim mylist 1 2 #保留表中下標爲1/2的元素。
lpop mylist#彈出開頭元素並返回。
rpop mylist#彈出尾部元素並返回。
rpoplpush mylist mylist2 #從mylist尾部彈出插入到mylist2的頭部。
lindex mylist 0#獲取表下標爲0的元素值。
llen mylist#返回表元素個數(至關於count($arr ))。
*********************************************************************
sets(集合)類型及操做(好友推薦、blog、tag功能):
smembers myset#查看myset集合中全部元素值。
sadd myset "hello"#向mysets集合中添加一個值hello
srem myset "hello"#刪除myset集合中名稱爲hello的元素。
spop myset #隨機彈出並返回mysets中的一個元素。
sdiff myset2 myset3#返回myset2中的與myset3的差集(以myset2爲準)。
sdiffstore myset4 myset2 myset3#返回myset2中的與myset3的差集,並存入myset4中去。
sinter myset2 myset3#返回myset2與myset3的交集。
sinterstore myset5 myset2 myset3#返回myset2與myset3的交集,並存入myset5中去。
sunion myset2 myset3#求並集(去重複)
sunionstore myset6 myset2 myset3#求並集,並存入myset6中去。
smove myset2 myset3 "three"#將myset2中的three移到myset3中去。
scard myset2#返回元素個數。
sismember myset2 "one"#判斷元素one是否是myset2集合的(至關於is_array())。
srandmember myset2#隨機返回myset2集合中的一個元素,但不刪除(至關於array_rand())。
*********************************************************************
sorted sets(有序集合)類型及操做(以scores排序):
zadd myzset 1 "one"#向順序1的添加元素one
zadd myzset 2 "two"#同上。
zadd myzset 3 "two"#至關於更新順序爲2的值
zrange myzset 0 -1 withscores#查看全部元素並帶上排序(默認升序)。
zrem myzset "two"#刪除two
zincrby myzset 2 "two"#將two的順序值加上2
zrank myzset "two"#返回集合中元素的索引下標值。
zrevrank myzset two#元素反轉並返回新下標值。
zrevrange myzset 0 -1 withscores#按順序反轉(至關於降序排序)
zrangebyscore myzset 1 10 withscores#返回順序爲1-10的元素(可作分頁)。
zcount myzset 1 10 #返回順序在1-10之間元素的個數。
zcard myzset#返回集合中全部元素的個數。
zremrangebyrank myzset 1 2#刪除集合中下標爲1到2的元素。
zremrangebyscore myzset 1 10#刪除集合中順序爲1到10的元素。
Redis經常使用命令
鍵/值相關命令。
keys * #查詢全部
keys user*#查詢指定的
exists user:001#判斷是否存在。
del name#刪除指定的鍵。
expire addr 10#設置過時時間
ttl addr#查詢過時時間
select 0 #選擇數據庫
move age 1#將age移到1數據庫。
get age #獲取
persist age#移除age的過時時間。
randomkey#隨機返回一個key
rename name1 name2#重命名鍵
type myset#返回鍵的類型。
ping #測試redis鏈接是否存活。
echo lamp#輸出一個lamp
select 10#選擇數據庫。
quit/exit/crtl+C#退出客戶端
dbsize#返回庫裏的鍵的個數。
服務器相關命令:
info#顯示redis服務器的相關信息。
config get */loglevel #返回全部/指定的配置信息。
flushdb#刪除當前庫中的全部鍵/表。
flushall#刪除全部數據庫中的全部鍵/表
2、Redis高級部分:
一、Redis安全性:
1.用ACL控制器安全性。
2.給redis加上較長密碼
# requirepass foobared
requirepass beijing
3.在redis.conf配置啓用認證功能。
方式一:Auth beijing
方式二:./redis-cli -a beijing
4.在redis.conf配置文件增長下面這一行配置,便可把redis綁定在單個接口上(但並非只有接受這個網卡的數據)。
bind 127.0.0.1(單臺機器的時候能夠配置,分佈式或主從複製時最好不要配置)
5.SSL代理
6.禁用指定命令。
二、Redis主從複製:
redis只需在從服務器(slave)上配置便可:
slaveof 211.122.11.11 6379 #指定master 的ip 和端口
masterauth beijing#這是master主機的密碼
Info#查看主/從服務器的狀態。
三、Redis事務處理:
Redis事務很不完善。
四、Redis持久化機制:
1.兩種方式:1、備份數據到磁盤(快照)[ snapshotting(快照)也是默認方式]
2、記錄操做命令[ Append-only file(縮寫aof)的方式]
1、備份數據到磁盤(快照)[ snapshotting(快照)也是默認方式]
save 900 1 #900秒內若是超過1個key被修改,則發起快照保存
save 300 10 #300秒內容如超過10個key被修改,則發起快照保存
save 60 10000
2、記錄操做命令[ Append-only file(縮寫aof)的方式](較安全持久化)
appendonly yes #啓用aof 持久化方式
# appendfsync always //收到寫命令就當即寫入磁盤,最慢,可是保證徹底的持久化
appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面作了很好的折中
# appendfsync no //徹底依賴os,性能最好,持久化沒保證