redis簡介
redis定義
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。
redis特點
Redis從它的許多競爭繼承來的三個主要特點:
1).Redis數據庫完全在內存中,使用磁盤僅用于持久性。
2).相比許多鍵值數據存儲,Redis擁有一套較為豐富的數據類型。
3).Redis可以將數據復制到任意數量的從服務器。
redis優勢
異常快速:Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。
支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的數據類型更好。
操作都是原子性:所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。
多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發布/訂閱),任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數等。
redis安裝配置
redis安裝
cd /home/tools
wget http://download.redis.io/releases/redis-3.0.3.tar.gz
tar xf redis-3.0.3.tar.gz
cd redis-3.0.3
make
make install
cp redis.conf /etc/
ln -s /home/tools/redis-3.0.3 /home/redis
redis命令介紹
make install命令執行完成后,會在/usr/local/bin目錄下生成本個可執行文件,分別是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump:它們的作用如下:
redis-server:Redis服務器的daemon啟動程序
redis-cli:Redis命令行操作工具。也可以用telnet根據其純文本協議來操作
redis-benchmark:Redis性能測試工具,測試Redis在當前系統下的讀寫性能
redis-check-aof:數據修復
redis-check-dump:檢查導出工具
修改系統配置文件
echo vm.overcommit_memory=1 >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1 或執行echo vm.overcommit_memory=1 >>/proc/sys/vm/overcommit_memory
使用數字含義:
0,表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,并把錯誤返回給應用進程。
1,表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2,表示內核允許分配超過所有物理內存和交換空間總和的內存。
redis配置文件參數
daemonize yes #是否以后臺daemon方式運行
pidfile /var/run/redis.pid #pid文件位置
port 6379 #監聽端口號
tcp-backlog 511 #listen隊列的長度
bind 192.168.2.10 #綁定ip地址,多個ip用空格分隔
timeout 0 #客戶端空閑多少s后踢掉,0禁止
tcp-keepalive 0 #檢測掛掉的連接,單位s,0禁止
loglevel notice #日志的等級,debug,verbose,notice,warning
logfile "/home/log/redis" #log文件的路徑,為空的話直接顯示在終端
databases 16 #redis中有多少個數據庫
#將redis內存數據序列化到磁盤的時間和頻率,900s有1個key改變就會序列化
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes #序列化的時候是否停止寫操作
rdbcompression yes #序列化的數據是否壓縮
rdbchecksum yes #序列化的數據是否校驗其完整性
dbfilename dump.rdb #序列化的文件名,只是文件不能帶目錄
dir /tmp #序列化文件的目錄
#以下是主從備份
# slaveof <masterip><masterport>
# masterauth <master-password>
slave-serve-stale-data yes
slave-read-only yes
# repl-ping-slave-period 10
# repl-timeout 60
repl-disable-tcp-nodelay no
# repl-backlog-size 1mb
# repl-backlog-ttl 3600
slave-priority 100
# min-slaves-to-write 3
# min-slaves-max-lag 10
#客戶端連接的密碼
requirepass 123456
#限制客戶端的數量
# maxclients 10000
#設置最大可用內存
# maxmemory <bytes>
#內存替換算法
# maxmemory-policy volatile-lru
#maxmemory-samples 3
啟動redis
redis-server /etc/redis.conf
**檢查是否啟動成功
ps -ef |grep redis 或lsof -i:6379
添加啟動腳本并加入開機啟動
cd /home/scripts/
redis.sh
#!/bin/sh
# chkconfig: 2345 21 60 #定義開關機優先順序,加入chkconfig必要配置
# description:redis start and stop and restart in chkconfig
. /etc/init.d/functions
function start(){
if [ ! -f /var/run/redis.pid ]
then
/usr/local/bin/redis-server /etc/redis.conf
if [ $? -eq 0 ]
then
action "starting redis..." /bin/true
else
action "starting redis..." /bin/false
fi
else
echo "redis is running"
exit
fi
}
function stop(){
if [ -f /var/run/redis.pid ]
then
PID=`cat /var/run/redis.pid`
kill $PID
if [ $? -eq 0 ]
then
action "stoping redis..." /bin/true
else
action "stoping redis..." /bin/false
fi
else
echo "redis is stoped"
fi
}
case $1 in
start)
start
sleep 1
;;
stop)
stop
sleep 1
;;
restart)
stop
sleep 1
start
;;
*)
echo "$0 please input {start|stop|restart}"
exit
esac
添加執行權限
chmod +x redis.sh
添加到/etc/init.d/
cp redis.sh /etc/init.d/redis
添加開機自啟動
chkconfig redis on
chkconfig redis --list
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off