1. 程式人生 > 實用技巧 >linux系統redis簡介

linux系統redis簡介

Redis學習

一、Redis簡介

1.redis是什麼

Redis是一款開源的,ANSI C語言編寫的,高階鍵值(key-value)快取和支援永久儲存NoSQL資料庫產品。
Redis採用記憶體(In-Memory)資料集(DataSet) 。
支援多種資料型別。
運行於大多數POSIX系統,如Linux、*BSD、OS X等。

redis就是非關係型資料庫的一種,儲存方式是:key:value

2.redis的作用

1.會話保持(鍵過期)
2.快取(放在資料庫前面,memcache,mongodb)
3.訊息佇列(kafka)

3.為什麼要用Redis

1.redis功能全面
2.redis企業使用率高

4.redis優點

1.高速讀寫
	將所有資料儲存在記憶體,單執行緒服務,使用C語言
2.部署簡單,使用穩定
3.資料型別豐富
    String: 字串型別
    Hash: 雜湊型別
    List: 列表型別
    Set: 集合型別
    Sorted set: 順序集合型別
4.支援持久化
	將記憶體的資料寫入磁碟
5.多種記憶體分配及回收策略
6.支援事物、鎖
7.訊息佇列、訊息訂閱
8.支援高可用
	哨兵模式
9.支援分散式分片叢集
10.支援的客戶端語言很多
	java,php,python,nodejs,C語言

5.redis幫助

官方網站:https://redis.io/
下載網站:http://download.redis.io/releases/
幫助網站:http://redisdoc.com/

6.快取服務對比

#Memcached:
1.優點:高效能讀寫、單一資料型別、支援客戶端式分散式叢集、一致性hash多核結構、多執行緒讀寫效能高。
2.缺點:無持久化、節點故障可能出現快取穿透、分散式需要客戶端實現、跨機房資料同步困難、架構擴容複雜度高

#Redis:
1.優點:高效能讀寫、多資料型別支援、資料持久化、高可用架構、支援自定義虛擬記憶體、支援分散式分片叢集、單執行緒讀寫效能極高
2.缺點:多執行緒讀寫較Memcached慢

#Tair:
1.優點:高效能讀寫、支援三種儲存引擎(ddb、rdb、ldb)、支援高可用、支援分散式分片叢集、支撐了幾乎所有淘寶業務的快取。
2.缺點:單機情況下,讀寫效能較其他兩種產品較慢

#對比結論:
1.Memcached:多核的快取服務,更加適合於多使用者併發訪問次數(訪問次數較少的應用場景)。
2.Redis:單核快取服務,在單節點情況下,更加適合少量使用者,多次訪問的應用場景。

二、Redis使用場景

1.快取
	放在資料庫前面
2.會話保持
	登入cookie、session
	折扣券,代金券
3.排行榜
4.計數器
	論壇帖子點贊點踩
5.社交軟體
	QQ共同好友,微博共同愛好
6.訊息佇列
	結合ELK做日誌收集

三、redis搭建

1.下載軟體包

[root@db01 ~]# rz redis-3.2.12.tar.gz
或者
[root@db01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz

2.安裝依賴

[root@db01 ~]# yum install -y gcc gcc-c++

3.解壓移動

[root@db01 ~]# tar xf redis-3.2.12.tar.gz 
[root@db01 ~]# mv redis-3.2.12 /usr/local/
[root@db01 ~]# ln -s /usr/local/redis-3.2.12 /usr/local/redis

4.安裝

[root@db01 ~]# cd /usr/local/redis
[root@db01 redis]# make

5.啟動redis

[root@db01 redis]# ./src/redis-server &

[root@db01 redis]# netstat -lntp  
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      11759/./src/redis-s

6.連線redis

#配置環境變數
[root@db01 redis]# vim /etc/profile.d/redis.sh
export PATH=/usr/local/redis/src:$PATH

#連線
[root@db01 redis]# redis-cli 
127.0.0.1:6379> 

7.關閉redis

[root@db01 redis]# redis-cli shutdown
11759:M 03 Aug 10:20:20.535 # User requested shutdown...
11759:M 03 Aug 10:20:20.535 * Saving the final RDB snapshot before exiting.
11759:M 03 Aug 10:20:20.546 * DB saved on disk
11759:M 03 Aug 10:20:20.546 # Redis is now ready to exit, bye bye...
[1]+  Done                    ./src/redis-server


[root@db01 redis]# redis-cli 
127.0.0.1:6379> shutdown
11851:M 03 Aug 10:20:59.580 # User requested shutdown...
11851:M 03 Aug 10:20:59.580 * Saving the final RDB snapshot before exiting.
11851:M 03 Aug 10:20:59.584 * DB saved on disk
11851:M 03 Aug 10:20:59.584 # Redis is now ready to exit, bye bye...
not connected> quit
[1]+  Done                    ./src/redis-server

四、redis配置檔案

1.配置

#預設的配置檔案
[root@db01 redis]# pwd
/usr/local/redis
[root@db01 redis]# ll
-rw-rw-r--  1 root root 46695 Jun 13  2018 redis.conf

#建立reids配置檔案目錄
[root@db01 redis]# mkdir /service/redis/6379 -p

#編寫配置檔案
[root@db01 redis]# vim /service/redis/6379/redis.conf
bind 172.16.1.51 127.0.0.1							#監聽地址
port 6379										   #埠
daemonize no									   #後臺啟動
pidfile /service/redis/6379/redis_6379.pid		 	  #指定pid檔案
loglevel notice										#指定日誌級別
logfile /service/redis/6379/redis_6379.log			  #指定日誌檔案

2.指定配置檔案啟動

[root@db01 redis]# redis-server /service/redis/6379/redis.conf

五、redis操作

1.基本操作

1.連線redis
	[root@db01 redis]# redis-cli 
    127.0.0.1:6379>
2.檢視所有資料
    127.0.0.1:6379> keys *
    (empty list or set)
	#檢視時注意不要輕易使用,如想檢視資料,先檢視資料量DBSIZE
	127.0.0.1:6379> DBSIZE
	(integer) 2018041
3.新增資料
    127.0.0.1:6379> set k1 v1
    OK
4.檢視資料
    127.0.0.1:6379> keys *
    1) "k1"
    127.0.0.1:6379> get k1
    "v1"
5.刪除資料
    127.0.0.1:6379> keys *
    1) "k1"
    127.0.0.1:6379> DEL k1
    (integer) 1
    127.0.0.1:6379> keys *
    (empty list or set)
6.修改資料
	127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> set k1 v11111
    OK
    127.0.0.1:6379> get k1
    "v11111"
7.追加資料
	127.0.0.1:6379> APPEND k1 000000
    (integer) 12
    127.0.0.1:6379> get k1
    "v11111000000"
8.切換庫
    127.0.0.1:6379> SELECT 1
    OK
    127.0.0.1:6379[1]> SELECT 2
    OK
    127.0.0.1:6379[2]> SELECT 3
    OK
    127.0.0.1:6379> SELECT 16
    (error) ERR invalid DB index

2.密碼的設定

1.配置檔案配置密碼
    [root@db01 redis]# vim redis.conf 
    requirepass 123
2.使用密碼連線
	[root@db01 redis]# redis-cli -a 123
3.登陸後輸入密碼
	[root@db01 redis]# redis-cli
    127.0.0.1:6379> AUTH 123
    OK
    127.0.0.1:6379> DBSIZE
    (integer) 2018041
4.redis連線後獲取密碼
    127.0.0.1:6379> CONFIG GET requirepass
    1) "requirepass"
    2) "123"
5.redis連線後修改密碼
    127.0.0.1:6379> CONFIG set requirepass 234
    OK
    [root@db01 redis]# redis-cli
	127.0.0.1:6379> DBSIZE
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth 123
    (error) ERR invalid password
    127.0.0.1:6379> auth 234
    OK

3.通用操縱

1.判斷key是否存在
    127.0.0.1:6379> EXISTS k1
    (integer) 1						#存在則返回1
    127.0.0.1:6379> EXISTS k2
    (integer) 0						#不存在則返回0
2.修改key的名字
	127.0.0.1:6379> KEYS *
    1) "k1"
    127.0.0.1:6379> RENAME k1 k100
    OK
    127.0.0.1:6379> KEYS *
    1) "k100"
3.檢視資料型別
	127.0.0.1:6379> TYPE k100
    string
4.設定生存時間
	#以秒為單位
    127.0.0.1:6379> EXPIRE qiudao 10
    (integer) 1
    #以毫秒為單位
    127.0.0.1:6379> PEXPIRE k100 10000
	(integer) 1
5.檢視生存時間
	127.0.0.1:6379> TTL k100
    (integer) 1					#正整數生存時間倒計時
    127.0.0.1:6379> TTL k100
    (integer) -1				#-1代表沒有設定生存時間
    127.0.0.1:6379> TTL k100
    (integer) -2				#代表設定過生存時間已刪除,已過期
6.取消生存時間
	127.0.0.1:6379> TTL qiudao
    (integer) 93
    127.0.0.1:6379> PERSIST qiudao
    (integer) 1
    127.0.0.1:6379> TTL qiudao
    (integer) -1

六、持久化

1.什麼時持久化

將記憶體中的資料寫入到磁碟,永久儲存

2.持久化的模式

1.RDB模式
2.AOF模式

3.RDB模式

可以在指定的時間間隔內生成資料集的時間點快照(point-in-time snapshot)

1)RDB工作模式

1.預設情況下,Redis儲存資料集快照到磁碟,名為dump.rdb的二進位制檔案。你可以設定讓Redis在N秒內至少有M次資料集改動時儲存資料集,或者你也可以手動呼叫SAVE或者BGSAVE命令。

2.在上文中我們已經在配置檔案中做過對應的配置:
例如,這個配置會讓Redis在每個60秒內至少有1000次鍵改動時自動轉儲資料集到磁碟:
save 60 1000

3.當 Redis 需要儲存 dump.rdb 檔案時,伺服器執行以下操作:
Redis 呼叫 fork() ,同時擁有父程序和子程序。
子程序將資料集寫入到一個臨時的 RDB 檔案中。當子程序完成對新 RDB 檔案的寫入時, Redis 用新RDB 檔案替換原來的 RDB 檔案,並刪除舊的 RDB 檔案。

4.這種方式使得 Redis 可以從寫時複製機制中獲益。

2)配置RDB持久化

#編輯配置檔案
[root@db01 ~]# vim /service/redis/6379/redis.conf 
bind 172.16.1.51 127.0.0.1
port 6379
daemonize yes
pidfile /service/redis/6379/redis_6379.pid
loglevel notice
logfile /service/redis/6379/redis_6379.log
#設定redis密碼
requirepass 123
#持久化資料檔案儲存位置
dir /etc/redis/6379
#rdb持久化資料檔名
dbfilename dump.rdb
#900秒(15分鐘)內有1個更改
save 900 1
#300秒(5分鐘)內有10個更改
save 300 10
#60秒(1分鐘)內有10000個更改
save 60 10000

3)使用RDB檔案

1.先停止redis
2.將rdb檔案放到指定目錄下
3.啟動redis