Redis的簡單配置與使用
一、認識Redis
1、NoSQL概述
認識Redis之前應該先了解下NoSQL
(1)NoSQL=Not only SQL(是讀“N”“o”SQL,而不是”NO”SQL),是一種非關係型資料庫。
(2)為什麼需要用到NoSQL?
- High Performance:高併發讀寫
- High Storage: 高效率的資料儲存與訪問
- High Scalability && High Availability :高擴充套件性與高可用性
(3)NoSQL的產品:CouchDB、HBase、Redis、mongoDB……
(4)NoSQL資料庫的四大分類:
- 鍵值儲存:典型的為Redis,但是資料缺少結構化
- 列儲存:HBase、Riak等
- 文件資料庫:mongoDB,查詢效率低
- 圖形資料庫:InfoGrid、Neo4j,是圖結構
2、Redis概述
(1)Redis是由C語言開發的開源高效能的鍵值對資料庫,提供了很多的資料型別(字串、列表、雜湊、有序集合、集合型別)。
(2)應用場景
- 資料快取
- 任務佇列(秒殺、搶購等現實應用)
- 資料過期處理
- 網站訪問統計
- 分散式cluster叢集架構中session分離
二、Redis安裝與配置
1、準備工作
- 搭建環境:VMWare虛擬機器+CentOS的Linux系統(建議Redis搭建在Linux伺服器中)
- SSH客戶端:Secure CRT
- 上傳伺服器檔案客戶端:FileZilla
- CentOS需要gcc環境:編譯Redis C語言的原始檔的環境
2、安裝過程
這是需要已經安裝好了虛擬機器,並且能成功裝上能夠CentOS,能夠與本機Windos分享網路,即CentOS能聯網。但是這裡介紹的是斷網下的Redis安裝。
(1)下載redis壓縮包官網Download Redis:redis-xxx.tar.gz
選擇穩定Stable版本
(2)CentOS配置Redis
1、首先檢視CentOS伺服器主機的IP地址,用來連線伺服器。輸入命令:ip add
得到IP地址192.168.42.128
接下來登入伺服器傳檔案。利用FileZilla上傳Redis壓縮包到root目錄下:開啟FileZilla
2、 連線伺服器192.168.42.128,輸入Linux伺服器登入帳號與密碼
登入之後輸入解壓tar壓縮包命令
tar zxvf redis-4.0.2.tar.gz
之後可以在root目錄下檢視解壓後的檔案redis-4.0.2
輸入命令進入redis-4.0.2目錄下並編譯make
cd redis-4.0.2/
make
之後繼續在該目錄下輸入命令安裝,將安裝的檔案放到目錄/usr/local/redis下
make install PREFIX=/usr/local/redis
3、修改redis.conf配置檔案:進入目錄/usr/local/redis/bin
cd /usr/local/redis/bin
然後修改redis.conf檔案,先將redis.conf配置檔案copy到目錄/usr/local/redis下
cd redis-4.0.2/
cp redis.conf /usr/local/redis
之後進入/usr/local/redis目錄下修改conf
cd /usr/local/redis
vi redis.conf
進入vim 修改redis.conf中的引數,daemonize引數為yes –>按Esc->冒號:wq–>儲存退出
4、啟動redis伺服器
進入bin目錄
cd /usr/local/redis/bin
載入配置檔案啟動redis伺服器
./redis-server redis.conf
之後檢視redis是否啟動成功
ps aux|grep redis
出現如下的資訊就說明redis啟動成功了
其中4281是我的redis伺服器程序號,6379是預設的埠號
5、啟動redis客戶端,測試redis
進入bin目錄
cd /usr/local/redis/bin
啟動客戶端
./redis-cli
就會出現127.0.0.1:6379
,之後測試redis功能:
三、Jedis:Java環境下連線Redis
1、下載兩個jar包:我用的Eclipse+Maven
關於具體的Maven如何導包可以參考Maven下匯入jar包的幾種方式
2、編寫程式碼
(1)單例項的測試
public class JedisDemo {
/**
* 第一種簡單的方式: 單例項的測試
* @author Lijian
*/
@Test
public void test1(){
//1、設定IP地址與埠
Jedis jedis = new Jedis("192.168.42.128",6379);
//2、儲存資料
jedis.set("name","Lijian");
//3、獲取資料
System.out.println( jedis.get("name"));
//4、關閉資源
jedis.close();
}
}
最後測試的結果會出錯,顯示如下所示:連線超時
這是因為Linux伺服器未對埠6379開放,要進行下面的配置iptables防火牆命令才可以。
vim /etc/sysconfig/iptables
但是Centos6與7都沒有iptables。如下圖
vim /etc/sysconfig/iptables
在插入狀態下移動到埠為22(22埠已經開放)的行,然後按yy進行復制,p為貼上,修改22為6379,或者複製下列語句
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
之後重啟iptables.service,設定為開機啟動
systemctl restart iptables.service #重啟防火牆使配置生效
systemctl enable iptables.service #設定防火牆開機啟動
但是最後測試單例項時,仍然出現如下如何的錯誤
DENIED Redis is running in protected mode because protected mode is enabled........
這是因為redis.conf配置中的protect-mode保護模式為yes,我們可以關掉保護模式為no
進入redis客戶端的目錄
/usr/local/redis/bin/redis-cli
開啟客戶端redis-cli
config set protected-mode "no"
最後執行成功
(2)測試連線池連線方式
@Test
public void test2(){
//1、獲得連線池的配置物件
JedisPoolConfig config = new JedisPoolConfig();
//2、設定最大連線數:
config.setMaxTotal(100);
//3、設定最大空閒連線數
config.setMaxIdle(100);
//4、獲得連線池
JedisPool jedisPool = new JedisPool(config, "192.168.42.128",6379);
//5、獲得核心物件
Jedis jedis =null;
try{
//6、通過連線池獲得連線
jedis=jedisPool.getResource();
//7、設定資料
jedis.set("student", "Xiaoming");
String value = jedis.get("student");
System.out.println(value);
}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
jedis.close();
}
if(jedisPool !=null){
jedisPool.close();
}
}
}
最後執行成功
3、配置過程中注意的事項
(1)redis.conf中的bind引數:預設為
bind 127.0.0.1
若改為bind 0.0.0.0,就可以從其他的客戶端訪問伺服器,不光只是本機。
(2)Linux系統預設的防火牆是firewall,而不是iptables