21.9 redis介紹

21.9 redis介紹

Redis和Memcached相似,也屬於k-v數據存儲
Redis官網redis.io, 當前最新穩定版4.0.1
支持更多value類型,除了和string外,還支持hash、lists(鏈表)、sets(集合)和sorted sets(有序集合)
redis使用了兩種文件格式:全量數據(RDB)和增量請求(aof)。全量數據格式是把內存中的數據寫入磁盤,便於下次讀取文件進行加載。增量請求文件則是把內存中的數據序列化爲操做請求,用於讀取文件進行replay獲得數據,這種相似於mysql binlog。
redis的存儲分爲內存存儲、磁盤存儲和log文件三部分mysql

21.10 redis安裝

下載最新穩定版
cd /usr/local/src/
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
cd redis-4.0.1
make && make install
cp redis.conf /etc/redis.conf
vim /etc/redis.conf //修改以下配置
daemonize yes
logfile "/var/log/redis.log"
dir /data/redis_data/
appendonly yes
mkdir /data/redis_data
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
redis-server /etc/redis.confredis

安裝redis:sql

[root@Dasoncheng ~]# cd /usr/local/src/
[root@Dasoncheng src]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz
[root@Dasoncheng src]# ll
-rw-r--r--  1 root root   1711660 Jul 24 21:59 redis-4.0.1.tar.gz
[root@Dasoncheng src]# tar -zxf redis-4.0.1.tar.gz
[root@Dasoncheng src]# ll
drwxrwxr-x  6 root root       309 Jul 24 21:58 redis-4.0.1
[root@Dasoncheng redis-4.0.1]# make
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-4.0.1/src'
    CC adlist.o
/bin/sh: cc: command not found
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/usr/local/src/redis-4.0.1/src'
make: *** [all] Error 2
[root@Dasoncheng redis-4.0.1]# yum install -y gcc    ##缺乏gcc庫,安裝:
[root@Dasoncheng redis-4.0.1]# make
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-4.0.1/src'
    CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
 #include <jemalloc/jemalloc.h>
                               ^
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/usr/local/src/redis-4.0.1/src'
make: *** [all] Error 2
[root@Dasoncheng redis-4.0.1]# less README.md     ##搜索關鍵詞jemalloc,參考說明 安裝:
[root@Dasoncheng redis-4.0.1]# make MALLOC=libc
[root@Dasoncheng redis-4.0.1]# echo $?
0
[root@Dasoncheng redis-4.0.1]# make install

修改配置文件/etc/redis.conf:數據庫

[root@Dasoncheng redis-4.0.1]# cp redis.conf /etc/
[root@Dasoncheng redis-4.0.1]# vim /etc/redis.conf
# bind 192.168.1.100 10.0.0.1   設置監聽ip,多個用空格分開;
protected-mode yes      打開保護模式;
port 6379    監聽的端口;
daemonize yes    ##修改成yes,後臺啓動;no的話就是前臺啓動;(daemonize中文:守護進程;)
pidfile /var/run/redis_6379.pid    指定運行的pid文件;
loglevel notice    指定日誌級別;
logfile "/var/log/redis.log"    ##定義日誌文件;(這裏咱們定義一下)
databases 16    redis的庫數量默認總共16個;默認在0 庫裏面;
save 900 1
save 300 10
save 60 10000    這三個都是用來設置rdb的持久化的;
rdbcompression yes    是否壓縮rdb文件;
dbfilename dump.rdb    定義rdb文件名;
dir /data/redis    ##定義rdb文件存放的目錄(包括aof文件也會放到這裏);
slave-serve-stale-data yes    配置主從的參數;
appendonly yes    ##開啓aof的日誌;
appendfilename "appendonly.aof"    定義文件名;
# appendfsync always
appendfsync everysec
# appendfsync no    這三個是何時記錄日誌;一、老是;二、每second秒一次;三、隔一段時間記錄(是Linux系統默認定時同步內存到磁盤);

啓動redis:vim

[root@Dasoncheng redis-4.0.1]# mkdir /data/redis
[root@Dasoncheng redis-4.0.1]# redis-server /etc/redis.conf 
[root@Dasoncheng redis-4.0.1]# ps aux |grep redis
root       5395  0.8  0.1 141760  1972 ?        Ssl  16:17   0:00 redis-server 127.0.0.1:6379
root       5400  0.0  0.0 112660   968 pts/1    S+   16:17   0:00 grep --color=auto redis
[root@Dasoncheng redis-4.0.1]# tail /var/log/redis.log 
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

5395:M 12 Oct 16:17:40.761 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
5395:M 12 Oct 16:17:40.761 # Server initialized
5395:M 12 Oct 16:17:40.762 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
5395:M 12 Oct 16:17:40.765 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
5395:M 12 Oct 16:17:40.766 * Ready to accept connections
##有兩條內存報錯問題;經過下面兩條命令解決 不解決也沒什麼問題;
[root@Dasoncheng redis-4.0.1]# sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
[root@Dasoncheng redis-4.0.1]#  echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@Dasoncheng redis-4.0.1]# vim /etc/rc.local    ##將這兩條命令添加到啓動腳本里面;
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

提示:安裝redis並非那麼順利;
一、沒有gcc工具,沒法編譯;
yum install -y gcc
二、安裝報錯: error: jemalloc/jemalloc.h: No such file or directory;
less README.md 搜索關鍵詞‘jemalloc’ 找到答案;
https://my.oschina.net/Sheamus/blog/712431
http://blog.csdn.net/libraryhu/article/details/64920124安全

21.11 redis持久化

Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)
RDB,簡而言之,就是在不一樣的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上。
AOF,則是換了一個角度來實現持久化,那就是將redis執行過的全部寫指令記錄下來,在下次redis從新啓動時,只要把這些寫指令從前到後再重複執行一遍,就能夠實現數據恢復了。
其實RDB和AOF兩種方式也能夠同時使用,在這種狀況下,若是redis重啓的話,則會優先採用AOF方式來進行數據恢復,這是由於AOF方式的數據恢復完整度更高。
若是你沒有數據持久化的需求,也徹底能夠關閉RDB和AOF方式,這樣的話,redis將變成一個純內存數據庫,就像memcache同樣。app

相關參數:less

save 900 1 #表示每15分鐘且至少有1個key改變,就觸發一次持久化 
save 300 10 #表示每5分鐘且至少有10個key改變,就觸發一次持久化
save 60 10000 #表示每60秒至少有10000個key改變,就觸發一次持久
save 「」 #這樣能夠禁用rdb持久化
appendonly yes #若是是yes,則開啓aof持久化
appendfilename 「appendonly.aof」 # 指定aof文件名字
appendfsync everysec #指定fsync()調用模式,有三種no(不調用fsync),always(每次寫都會調用fsync),everysec(每秒鐘調用一次fsync)。第一種最快,第二種數據最安全,但性能會差一些,第三種爲這種方案,默認爲第三種。工具

相關文章
相關標籤/搜索