[ Redis](https://cloud.tencent.com/product/crs?from=10680)公式ウェブサイトhttp://redis.io
中国のマニュアルhttp://www.cnblogs.com/stephen-liu74/archive/2012/02/27/2370212.html
1.最新バージョンのredisをダウンロードします
http://redis.io/downloadをダウンロード
現在、redis3.2.11の最新バージョン
cd /usr/local/src
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
tar -zxvf redis-3.2.11.tar.gz
cd redis-3.2.11
make
makeコマンドが実行された後、6つの実行可能ファイルがsrcディレクトリに生成されます。つまり、redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel、およびそれらのファイルです。役割は次のとおりです。
redis-server:Redisサーバーのデーモン起動プログラム
redis-cli:Redisコマンドライン操作ツール。もちろん、telnetを使用してプレーンテキストプロトコルに従って操作することもできます
redis-benchmark:システムおよび構成でのRedisの読み取りおよび書き込みパフォーマンスをテストするためのRedisパフォーマンステストツール
redis-check-aof:ログチェックの更新
redis-check-dump:ローカルデータベースチェックに使用されます
redis-sentinel:クラスター管理ツール
インストール:
make PREFIX=/usr/local/redis install
テスト
make test
tclによって異なりますが、インストールされていない場合は、最初にインストールしてください
yum -y install tcl tcl-devel
3、Redisを構成します
mkdir -p / usr / local / redis / etc / usr / local / redis / log / usr / local / redis / data#構成ファイル、ログファイル、データベースストレージディレクトリを作成します
cp /usr/local/src/redis-3.2.11/redis.conf /usr/local/redis/etc/
touch /usr/local/redis/log/redis.log
daemonize yes
pidfile /var/run/redis.pid
bind 0.0.0.0
port 6379
timeout 300
loglevel notice
logfile "/usr/local/redis/log/redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/data
pidfile /usr/local/redis/redis.pid
########### Replication #####################
requirepass foobared
maxclients 30000
appendonly no
appendfsync everysec
################ VIRTUAL MEMORY ###########
vm-enabled no
vm-swap-file /tmp/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
activerehashing yes
注:Redisの公式ドキュメントでは、VMの使用に関するいくつかの提案が示されています。
キーが小さく、値が大きい場合、VMを使用した場合の効果が高くなります。これにより、より多くのメモリを節約できます。
キーが小さくない場合は、いくつかの方法を使用して大きなキーを大きな値に変換することを検討できます。たとえば、キーと値を新しい値に結合することを検討できます。
スワップファイルを保存するには、linuxext3などのスパースファイルをサポートするファイルシステムを使用することをお勧めします。
パラメータvm-max-threadsは、スワップファイルにアクセスするスレッドの数を設定できます。マシンのコア数を超えないようにすることをお勧めします。0に設定すると、スワップファイルに対するすべての操作がシリアルになります。時間がかかる場合があります。時間遅延がありますが、データの整合性には十分な保証があります。
メモリの状況が厳しい場合は、カーネルパラメータを設定する必要があります。
echo 1 > /proc/sys/vm/overcommit_memory
この構成の意味について説明します:/ proc / sys / vm / overcommit_memory
このファイルは、メモリ割り当てに関するカーネルの戦略を指定し、その値は0、1、2にすることができます。
0 、これは、カーネルがアプリケーションプロセスに十分な使用可能なメモリがあるかどうかをチェックすることを意味します。十分な使用可能なメモリがある場合、メモリアプリケーションは許可されます。そうでない場合、メモリアプリケーションは失敗し、エラーがアプリケーションプロセスに返されます。
1 、これは、現在のメモリ状態に関係なく、カーネルがすべての物理メモリの割り当てを許可することを意味します。
2 、これは、カーネルがすべての物理メモリとスワップスペースの合計を超えるメモリの割り当てを許可することを意味します
Redisがデータをダンプすると、子プロセスがフォークされます。理論的には、子プロセスが占有するメモリは親のメモリと同じです。たとえば、親が占有するメモリは8Gです。このとき、8Gのメモリも子に割り当てる必要があります。余裕がない場合、redisサーバーがダウンしたり、IO負荷が高すぎたりして、効率が低下することがよくあります。したがって、ここでのより最適化されたメモリ割り当て戦略は1に設定する必要があります(つまり、カーネルでは、現在のメモリ状態に関係なく、すべての物理メモリを割り当てることができます)。
4.Redisを実行します
環境変数を追加する
echo "export PATH=$PATH:/usr/local/redis/bin" >> /etc/profile
. /etc/profile
redis-server /etc/redis/redis.conf
redisサービスはバックグラウンドで開始できます。実行されていることを確認したら、redis-benchmarkコマンドを使用してテストおよび確認するか、次のようにredis-cliコマンドを使用して実際に操作できます。
redis-cli set foo bar
OK
redis-cli get foo
bar
redis-cli shutdown
ポートが変更された場合は、ポートを指定できます。
redis-cli -p 6380 shutdown
データのバックアップは、ファイルを定期的にバックアップすることで実現できます。
redisはディスクに非同期で書き込まれるため、メモリ内のデータをすぐにハードディスクに書き込みたい場合は、次のコマンドを実行できます。
redis-clisaveまたはredis-cli-p 6380 save(ポートを指定)
上記の展開操作には、カーネルパラメータのコピーや設定など、特定の権限が必要であることに注意してください。
redis-benchmarkコマンドを実行すると、メモリデータもハードディスクに書き込まれます。
redisによって実装される同期メカニズムは比較的単純であり、同期メカニズムの共通のチェックポイントと検証メカニズムがありません。
実行時に、マスター->スレーブ同期要求の転送が破棄された場合、データがマスターから完全にロードされたときにスレーブが再起動するまで、スレーブは要求の関連情報を復元できません。したがって、redisを使用して、そのキー/値と値を使用して複数のタイプの機能をサポートし、比較的重要でないデータを格納することをお勧めします。
5.ランダムスタートを設定します
vi /etc/init.d/redis#以下を追加
#! /bin/bash
source /etc/init.d/functions
BIN="/usr/local/redis/bin"
CONFIG="/usr/local/redis/etc/redis.conf"
PIDFILE="/usr/local/redis/redis.pid"
[ - r "
RETVAL=0
prog="redis-server"
desc="Redis Server"
start() {
if [ -e
exit 1
fi
echo -n $"Starting $desc: "
daemon
echo
[
return $RETVAL
}
stop() {
echo -n $"Stop $desc: "
killproc
echo
[
return $RETVAL
}
restart() {
stop
start
}
case "
RETVAL=$?
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
RETVAL=1
esac
exit $RETVAL
このスクリプトを使用して管理する前に、次のカーネルパラメータを設定する必要があります。そうしないと、Redisスクリプトは、redisを再起動または停止するときにエラーを報告し、サービスを停止する前にデータをディスクに自動的に同期できません。
vi /etc/sysctl.conf
vm.overcommit_memory = 1
その後、アプリケーションが有効になります。
sysctl -p
( メモリを調整します(メモリの状況が厳しい場合は、カーネルパラメータを設定する必要があります)
echo 1 > /proc/sys/vm/overcommit_memory
説明:
このファイルは、メモリ割り当てに関するカーネルの戦略を指定し、その値は0、1、2にすることができます。
0 カーネルがアプリケーションプロセスに十分な使用可能なメモリがあるかどうかをチェックすることを示します。十分な使用可能なメモリがある場合、メモリアプリケーションは許可されます。そうでない場合、メモリアプリケーションは失敗し、エラーがアプリケーションプロセスに返されます。
1 現在のメモリ状態に関係なく、カーネルがすべての物理メモリの割り当てを許可することを示します。
2 カーネルがすべての物理メモリとスワップスペースの合計を超えるメモリの割り当てを許可することを示します
)
次に、サービスを追加して自動的に開始します。
chmod 755 /etc/init.d/redis
chkconfig redis on
chkconfig --list redis
Centos7起動スクリプト
/usr/lib/systemd/system/redis.service
#####################################
[ Unit]
Description=Startup script for the Redis
Documentation=http://redis.io
After=network.target remote-fs.target nss-lookup.target
[ Service]
Type=forking
PIDFile=/usr/local/redis/redis.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[ Install]
WantedBy=multi-user.target
実行中のユーザーを指定します
useradd -M -s /sbin/nologin redis
chown -R redis:redis / usr / local / redis / log / usr / local / redis / data pidfile
cat /usr/lib/systemd/system/redis.service
[ Unit]
Description=Startup script for the Redis
Documentation=http://redis.io
After=network.target remote-fs.target nss-lookup.target
[ Service]
User=redis
Group=redis
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[ Install]
WantedBy=multi-user.target
systemctl enable redis; systemctl start redis
Recommended Posts