1. 程式人生 > >redis基本介紹搭建篇

redis基本介紹搭建篇

限制 服務 隨機 /var/ active 長度 memecache ati zip

1.redis基本介紹

1.1 redis介紹

  • Redis屬於非關系型數據庫和Memcached類似,redis也是一個key-value型存儲系統。
  • 但redis支持的存儲value類型相對更多,包括string(字符串)、list(列表)、set(集合)和zset(有序集合)等。
  • 這些數據類型都支持push/pop、add/remove及取交集、並集和差集及更豐富的操作,而且這些操作都是原子性的。為了保證效率,redis的數據都是緩存在內存中。
  • 區別是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在基礎上實現了master-slave(主從)同步。

1.2
Redis和Memecache的不同

  • 存儲方式:memecache 把數據全部存在內存之中,斷電後會掛掉,數據不能超過內存大小, Redis有部份存在硬盤上,這樣能保證數據的持久性,支持數據的持久化(筆者註:有RDB快照和AOF日誌兩種持久化方式,在實際應用的時候,要特別註意配置文件快照參數,要不就很有可能服務器頻繁滿載做dump)
  • 數據支持類型:redis在數據支持上要比memecache多的多。
  • 使用底層模型不同:新版本的redis直接自己構建了VM 機制,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
  • 運行環境不同:redis目前官方只支持Linux 上去行,從而省去了對於其它系統的支持,這樣的話可以更好的把精力用於本系統環境上的優化,雖然後來微軟有一個小組為其寫了補丁。但是沒有放到主幹上

總結:對於兩者的選擇還是要看具體的應用場景,如果需要緩存的數據只是key-value這樣簡單的結構時,我在項目裏還是采用memcache,它也足夠的穩定可靠。如果涉及到存儲,排序等一系列復雜的操作時,毫無疑問選擇redis。

1.3 redis應用場景

redis最佳使用場景是全部數據in-memory
redis更多場景最為memcached的替代品來使用
需要除key/value之外的更多數據類型支持時,使用redis更合適
當存儲的數據不能被剔除時,使用redis更合適

1.4 Redis支持的鍵值類型

  • String 字符串類型
  • Hash散列類型
  • List列表類型
  • Set集合類型
  • Zset有序集合類型

2. 安裝redis

[root@redis01 ~]# cd /usr/local/src/
[root@redis01 src]#  wget  -q http://download.redis.io/releases/redis-3.2.8.tar.gz  #-q隱藏
[root@redis01 src]# tar xf redis-3.2.8.tar.gz
[root@redis01 src]# cd redis-3.2.8/
[root@redis01 src]# make
[root@redis01 src]# make PREFIX=/usr/local/redis01  install
[root@redis01 redis01]# tree /usr/local/redis01/
/usr/local/redis01/
└── bin
    ├── redis-benchmark           #redis性能讀寫測試工具
    ├── redis-check-aof           #對更新日誌appenonly.aof檢查,類似於mysql binlog
    ├── redis-check-rdb           #用於本地數據庫rdb文件的檢查
    ├── redis-cli                 #redis命令行客戶端操作工具
    ├── redis-sentinel -> redis-server   
    └── redis-server              #redis服務器daemon啟動程序

1 directory, 6 files
[root@redis01 redis01]# echo "export PATH=/usr/local/redis01/bin:$PATH" >>/etc/profile
[root@redis01 redis01]# source /etc/profile
[root@redis01 redis01]# redis-server &  #啟動
[root@redis01 redis01]# redis-cli       #進入到客戶端
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exit
[root@redis01 redis01]# redis-cli shutdown #關閉

2.1 指定配置文件啟動  

[root@redis01 redis01]# pwd
/usr/local/redis01
[root@redis01 redis01]# mkdir -p conf
[root@redis01 redis01]# cp /usr/local/src/redis-3.2.8/redis.conf conf/
[root@redis01 redis01]# redis-server /usr/local/redis01/conf/redis.conf &

解決啟動報warning信息:

可選值:0、1、2

0  內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
1  內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2  內核允許分配超過所有物理內存和交換空間總和的內存

三種設置方法:

  1. 編輯/etc/sysctl.conf ,改vm.overcommit_memory=1,然後sysctl -p 生效
  2. sysctl vm.overcommit_memory=1
  3. echo 1 > /proc/sys/vm/overcommit_memory

2.2 redis配置文件介紹

daemonize yes #是否以後臺進程運行
pidfile /var/run/redis/redis-server.pid    #pid文件位置
port 6379#監聽端口
bind 127.0.0.1   #綁定地址,如外網需要連接,設置0.0.0.0 空格分隔
timeout 300     #連接超時時間,單位秒
loglevel notice  #日誌級別,分別有:
        # debug :適用於開發和測試
        # verbose :更詳細信息
        # notice :適用於生產環境
        # warning :只記錄警告或錯誤信息
logfile /var/log/redis/redis-server.log   #日誌文件位置
syslog-enabled no    #是否將日誌輸出到系統日誌
databases 16#設置數據庫數量,默認數據庫為0
############### 快照方式 ###############
    save 900 1    #在900s(15m)之後,至少有1個key發生變化,則快照
    save 300 10   #在300s(5m)之後,至少有10個key發生變化,則快照
    save 60 10000  #在60s(1m)之後,至少有1000個key發生變化,則快照
    rdbcompression yes   #dump時是否壓縮數據
    dir /var/lib/redis   #數據庫(dump.rdb)文件存放目錄
############### 主從復制 ###############
    slaveof <masterip> <masterport>  #主從復制使用,用於本機redis作為slave去連接主redis
    masterauth <master-password>   #當master設置密碼認證,slave用此選項指定master認證密碼
    slave-serve-stale-data yes     #當slave與master之間的連接斷開或slave正在與master進行數據同步時,如果有slave請求,當設置為yes時,slave仍然響應請求,此時可能有問題,如果設置no時,slave會返回"SYNC with master in progress"錯誤信息。但INFO和SLAVEOF命令除外。
############### 安全 ###############
    requirepass foobared   #配置redis連接認證密碼
############### 限制 ###############
    maxclients 128#設置最大連接數,0為不限制
    maxmemory <bytes>#內存清理策略,如果達到此值,將采取以下動作:
        # volatile-lru :默認策略,只對設置過期時間的key進行LRU算法刪除
        # allkeys-lru :刪除不經常使用的key
        # volatile-random :隨機刪除即將過期的key
        # allkeys-random :隨機刪除一個key
        # volatile-ttl :刪除即將過期的key
        # noeviction :不過期,寫操作返回報錯
    maxmemory-policy volatile-lru#如果達到maxmemory值,采用此策略
    maxmemory-samples 3   #默認隨機選擇3個key,從中淘汰最不經常用的
############### 附加模式 ###############
    appendonly no    #AOF持久化,是否記錄更新操作日誌,默認redis是異步(快照)把數據寫入本地磁盤
    appendfilename appendonly.aof  #指定更新日誌文件名
        # AOF持久化三種同步策略:
        # appendfsync always   #每次有數據發生變化時都會寫入appendonly.aof
        # appendfsync everysec  #默認方式,每秒同步一次到appendonly.aof
        # appendfsync no       #不同步,數據不會持久化
    no-appendfsync-on-rewrite no   #當AOF日誌文件即將增長到指定百分比時,redis通過調用BGREWRITEAOF是否自動重寫AOF日誌文件。
############### 虛擬內存 ###############
    vm-enabled no      #是否啟用虛擬內存機制,虛擬內存機將數據分頁存放,把很少訪問的頁放到swap上,內存占用多,最好關閉虛擬內存
    vm-swap-file /var/lib/redis/redis.swap   #虛擬內存文件位置
    vm-max-memory 0    #redis使用的最大內存上限,保護redis不會因過多使用物理內存影響性能
    vm-page-size 32    #每個頁面的大小為32字節
    vm-pages 134217728  #設置swap文件中頁面數量
    vm-max-threads 4    #訪問swap文件的線程數
############### 高級配置 ###############
    hash-max-zipmap-entries 512   #哈希表中元素(條目)總個數不超過設定數量時,采用線性緊湊格式存儲來節省空間
    hash-max-zipmap-value 64     #哈希表中每個value的長度不超過多少字節時,采用線性緊湊格式存儲來節省空間
    list-max-ziplist-entries 512  #list數據類型多少節點以下會采用去指針的緊湊存儲格式
    list-max-ziplist-value 64    #list數據類型節點值大小小於多少字節會采用緊湊存儲格式
    set-max-intset-entries 512   #set數據類型內部數據如果全部是數值型,且包含多少節點以下會采用緊湊格式存儲
    activerehashing yes        #是否激活重置哈希

redis基本介紹搭建篇