走進 Redis:Redis 的安裝、使用以及集群的搭建

2022-01-01 SegmentFault思否

本文作者: catalinaLi本文連結: http://catalinali.top/2017/buildredis/版權聲明: 原創文章,有問題請評論中留言。非商業轉載請註明作者及出處。

一、Redis的安裝

Redis的安裝是很簡單的,安裝之前我們需要c語言的編譯環境。如果沒有gcc需要在線安裝。 yum install gcc-c++。

安裝步驟:

第一步:redis的源碼包上傳到linux系統。

第二步:解壓縮redis。 tar-zxvf redis-3.0.0.tar.gz

第三步:編譯。進入redis源碼目錄。 make

第四步:安裝。 make install PREFIX=/usr/local/redis,PREFIX參數指定redis的安裝目錄。

二、Redis的啟動與基本操作

1.運行redis

在redis的安裝目錄下直接運行 ./redis-server就可以啟動redis,但這是前端啟動。如果我們想後臺啟動就需要:

1、進入redis-3.0.0.tar.gz解壓出來的文件夾,複製裡面的redis.conf文件到安裝目錄下。然後將daemonize改為yes

2、執行 ./redis-server redis.conf運行redis。

這樣redis就後臺運行了,我們可以使用 ps aux|grep redis來查看redis的運行狀態:

我們可以使用以下命令來進入操作redis:

./redis-cli ##進入redis客戶端

./redis-cli -h 192.168.72.121 -p 6379 ##連接指定ip和埠的redis伺服器

./redis-cli shutdown ##關閉redis客戶端

2.redis中的五種類型

先來看幾個操作資料庫的基本命令:

KEYS *                   ##獲得當前資料庫的所有鍵

EXISTS key [key ...]     ##判斷鍵是否存在,返回個數,如果key有一樣的也是疊加數

DEL key [key ...]        ##刪除鍵,返回刪除的個數

TYPE key                 ##獲取減值的數據類型(string,hash,list,set,zset)

FLUSHALL                 ##清空所有資料庫

Expire key second        ##設置key的過期時間

Ttl key                  ##查看key的有效期

Persist key              ##清除key的過期時間。Key持久化。

redis中所有的數據都是Key-value類型的,其中有五種主要數據類型:字符串類型(string),散列類型(hash),列表類型(list),集合類型(set),有序集合類型(zset)。而在這五種類型中,我們最常用的是字符串類型,散列類型。這裡簡單介紹一下字符串類型和散列類型:

字符串類型string

SET         ##賦值,用法: SET key value

GET         ##取值,用法: GET key

INCR        ##遞增數字,僅僅對數字類型的鍵有用,相當於Java的i++運算,用法: INCR key

INCRBY      ##增加指定的數字,僅僅對數字類型的鍵有用,相當於Java的i+=3,用法:INCRBY key increment,意思是key自增increment,increment可以為負數,表示減少。

DECR        ##遞減數字,僅僅對數字類型的鍵有用,相當於Java的i–,用法:DECR key

DECRBY      ##減少指定的數字,僅僅對數字類型的鍵有用,相當於Java的i-=3,用法:DECRBY key decrement,意思是key自減decrement,decrement可以為正數,表示增加。

INCRBYFLOAT ##增加指定浮點數,僅僅對數字類型的鍵有用,用法:INCRBYFLOAT key increment

APPEND      ##向尾部追加值,相當於Java中的」hello」.append(「 world」),用法:APPEND key value

STRLEN      ##獲取字符串長度,用法:STRLEN key

MSET        ##同時設置多個key的值,用法:MSET key1 value1 [key2 value2 ...]

MGET        ##同時獲取多個key的值,用法:MGET key1 [key2 ...]

散列類型hash

HSET        ##賦值,用法:HSET key field value

HMSET       ##一次賦值多個欄位,用法:HMSET key field1 value1 [field2 values]

HGET        ##取值,用法:HSET key field

HMGET       ##一次取多個欄位的值,用法:HMSET key field1 [field2]

HGETALL     ##一次取所有欄位的值,用法:HGETALL key

HEXISTS     ##判斷欄位是否存在,用法:HEXISTS key field

HSETNX      ##當欄位不存在時賦值,用法:HSETNX key field value

HINCRBY     ##增加數字,僅對數字類型的值有用,用法:HINCRBY key field increment

HDEL        ##刪除欄位,用法:HDEL key field

HKEYS       ##獲取所有欄位名,用法:HKEYS key

HVALS       ##獲取所有欄位值,用法:HVALS key

HLEN        ##獲取欄位數量,用法:HLEN key

其他的數據類型就不詳細介紹了,相關資料可以點擊傳送門

三、Redis的持久化方案

Redis的所有數據都是保存到內存中的。

Rdb:快照形式,定期把內存中當前時刻的數據保存到磁碟。Redis默認支持的持久化方案,一直開啟,不會被關閉。

通過上圖我們可以看到,dump.rdb會在以下情況保存一次。

900秒(15分鐘)之內至少有1個KEY進行了改變

300秒(5分鐘)之內至少有10個KEY進行了改變

60秒(1分鐘)之內至少有10000個KEY進行了改變

aof形式:append only file。把所有對redis資料庫操作的命令,增刪改操作的命令。保存到文件中。資料庫恢復時把所有的命令執行一遍即可。要想開啟aof模式需要在redis.conf配置文件中將appendonly改為yes。

四、Redis集群的搭建1.Redis集群特點

Redis集群搭建的方式有多種,例如使用zookeeper等,但從redis3.0之後版本支持redis-cluster集群,Redis-Cluster採用無中心結構,每個節點保存數據和整個集群狀態,每個節點都和其他所有節點連接。其redis-cluster架構圖如下:

其架構細節:

所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位協議優化傳輸速度和帶寬。

節點的fail是通過集群中超過半數的節點檢測失效時才生效。

客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可。

redis-cluster把所有的物理節點映射到[0-16383]slot上(不一定是平均分配),cluster 負責維護node<->slot<->value。

Redis集群預分好16384個哈希槽,當需要在 Redis 集群中放置一個 key-value 時,根據 CRC16(key) mod 16384的值,決定將一個key放到哪個槽中。

2.Redis集群環境搭建

Redis集群中至少應該有三個節點。要保證集群的高可用,需要每個節點有一個備份機。

Redis集群至少需要6臺伺服器。由於條件限制,這裡採用與淘淘商城相同的方式搭建偽分布式。在一臺虛擬機運行6個redis實例。需要修改redis的埠號7001-7006。

第一步:創建6個redis實例,每個實例運行在不同的埠。

需要修改redis.conf配置文件,將埠號修改成7001-7006。除此之外,還需要把cluster-enabled yes前的注釋去掉。

第二步:啟動每個redis實例。

這裡我們可以自己寫一個shell腳本,這裡給出我的也就是淘淘商城中所使用的腳本:

cd redis01

./redis-server redis.conf

cd ..

cd redis02

./redis-server redis.conf

cd ..

cd redis03

./redis-server redis.conf

cd ..

cd redis04

./redis-server redis.conf

cd ..

cd redis05

./redis-server redis.conf

cd ..

cd redis06

./redis-server redis.conf

cd ..

關閉集群的腳本也類似:

./redis-cli -p 7001 shutdown

./redis-cli -p 7002 shutdown

./redis-cli -p 7003 shutdown

./redis-cli -p 7004 shutdown

./redis-cli -p 7005 shutdown

./redis-cli -p 7006 shutdown

記得在運行腳本前要添加可執行(x)的權限: chmod u+x fileName.sh

第三步:使用ruby腳本搭建集群。

首先我們需要安裝ruby運行環境

yum install ruby

yum install rubygems

然後我們需要安裝ruby腳本運行使用的包,將這個文件放在集群文件根目錄下,然後運行

gem install redis-3.0.0.gem

文件我上傳在了CSDN。

這時我們就可以啟動集群環境了,運行下面這條命令:

./redis-trib.rb create --replicas 1 192.168.72.121:7001 192.168.72.121:7002 192.168.72.121:7003 192.168.72.121:7004 192.168.72.121:7005  192.168.72.121:7006

從這條命令我們可以看出使用6個節點來創建一個集群,集群中每個主節點有1個從節點。運行過程中輸入一個yes就成功了。需要注意的是在真正搭建的時候一定要關閉防火牆。這時候我們查看進程。

第四步:連接Redis集群

因為每一個節點都是互聯互通的,所以我們不論連哪個節點都是可以的。

五、使用Java操作Redis

redis的客戶端有很多,從官網中我們可以看出來,不僅支持的語言眾多,而且很多語言有不止一種連接方式。

這裡我們採用在JAVA中使用最廣泛的Jedis作為實例。

1.連接單機版

   @Test

   public void testJedis() throws Exception {

       // 第一步:創建一個Jedis對象。需要指定服務端的ip及埠。

       Jedis jedis = new Jedis("192.168.25.153", 6379);

       // 第二步:使用Jedis對象操作資料庫,每個redis命令對應一個方法。

       String result = jedis.get("hello");

       // 第三步:列印結果。

       System.out.println(result);

       // 第四步:關閉Jedis

       jedis.close();

   }

使用起來很簡單,不過通常在連接單機版的時候我們採用的是連接池的方式。

2.連接單機版使用連接池

   @Test

   public void testJedisPool() throws Exception {

       // 第一步:創建一個JedisPool對象。需要指定服務端的ip及埠。

       JedisPool jedisPool = new JedisPool("192.168.25.153", 6379);

       // 第二步:從JedisPool中獲得Jedis對象。

       Jedis jedis = jedisPool.getResource();

       // 第三步:使用Jedis操作redis伺服器。

       jedis.set("jedis", "test");

       String result = jedis.get("jedis");

       System.out.println(result);

       // 第四步:操作完畢後關閉jedis對象,連接池回收資源。

       jedis.close();

       // 第五步:關閉JedisPool對象。

       jedisPool.close();

   }

連接集群的方式就又稍微不一樣了。

3.連接集群版

   @Testjava

   public void testJedisCluster() throws Exception {

       // 第一步:使用JedisCluster對象。需要一個Set<HostAndPort>參數。Redis節點的列表。

       Set<HostAndPort> nodes = new HashSet<>();

       nodes.add(new HostAndPort("192.168.72.121", 7001));

       nodes.add(new HostAndPort("192.168.72.121", 7002));

       nodes.add(new HostAndPort("192.168.72.121", 7003));

       nodes.add(new HostAndPort("192.168.72.121", 7004));

       nodes.add(new HostAndPort("192.168.72.121", 7005));

       nodes.add(new HostAndPort("192.168.72.121", 7006));

       JedisCluster jedisCluster = new JedisCluster(nodes);

       // 第二步:直接使用JedisCluster對象操作redis。在系統中單例存在。

       jedisCluster.set("hello", "100");

       String result = jedisCluster.get("hello");

       // 第三步:列印結果

       System.out.println(result);

       // 第四步:系統關閉前,關閉JedisCluster對象。

       jedisCluster.close();

   }

相關文章推薦

Spring 註解概覽

《阿里巴巴Java開發手冊》掃描插件正式發布--插件安裝和使用分析

徹底徵服 Spring AOP 之 理論篇

相關講堂推薦

相關焦點

  • Docker 搭建 Redis Cluster 集群環境
    使用 Docker 搭建 Redis Cluster,最重要的環節就是容器通信的問題,這一塊我們在之前的文章中已經給大家解決了《Docker 網絡模式詳解及容器間網絡通信》,本篇文章主要練習使用多個容器完成 Redis Cluster 集群環境的搭建,順便為學習 Docker Compose 鋪鋪路。
  • Redis的集群搭建,原來這麼簡單
    回歸正題,上篇主要說了下Redis的主從複製是如何做的,高可用集群有幾種方式部署(傳送門《原來你是這樣的高可用呀》)。其中針對Redis高可用cluster集群說明時,有一些遺漏的東西,會在本篇前半部分進行說明,後面的內容主要是說怎麼來搭建cluster集群。
  • 在Kubernetes上部署一套 Redis 集群
    在集群中,我們需要使用共享文件系統 + PV(持久卷)的方式來讓整個集群中的所有pod都可以共享同一份持久化儲存二、概念介紹在開始之前先來詳細介紹一下幾個概念和原理。在K8s上搭建Mysql集群1、創建ConfigMap先創建redis.conf配置文件appendonly yescluster-enabled yescluster-config-file /var/lib/redis/nodes.confcluster-node-timeout 5000dir /
  • REDIS 如何利用python 操作redis 集群 (投稿文章)
    ## 利用python操作redis集群redis的cluster模式為大型應用中常用的方式,今天學習如何使用redis-py-cluster來操作redis集群首先安裝redis-py-cluster```pip install redis-py-cluster```基本用法``
  • Spring Data Redis使用
    本文是Redis系列的第十四篇文章,了解前面的文章有助於更好的理解本文:1.Linux上安裝Redis2.Redis中的五種數據類型簡介3.Redis字符串(STRING)介紹4.Redis字符串(STRING)中BIT相關命令5.Redis列表與集合6.Redis散列與有序集合7.Redis中的發布訂閱和事務8.Redis
  • docker搭建redis集群(3主3從、4主4從、擴容、縮容、容錯切換遷移)
    --net host 使用宿主機的IP和埠,默認--privileged=true 獲取宿主機root用戶權限-v /data/redis/share/redis-node-6:/data 容器卷,宿主機地址:docker
  • acl 框架中的 Redis 庫已經支持集群版 Redis 3.0
    redis 進行分庫了,之前人們為了使單機版的 redis 能支持集群方式,往往是在客戶端或通過加一個中間的代理層(比如使用 tweaproxy)做很多工作,現在有了集群版的 redis3.0 ,這些額外的操作都不再需要。
  • Redis安裝教程
    3、安裝gcc和gcc-c++。安裝完成:[root@ip-192-168-1-111 etc]# vi redis.conf[root@ip-192-168-1-111 etc]# redis-server /usr/local/redis/redis-2.6.16/etc/redis.conf服務端啟動成功後,執行redis-cli啟動Redis 客戶端,查看埠號以及驗證redis
  • Redis服務​之Redis Cluster
    概述 在之前的分享中我們聊到了redis的高可用組件sentinel的相關配置,回顧請參考Redis服務之高可用組件sentinel;sentinel在redis主從同步架構中主要起到了監控集群master是否正常,如果master不正常,或者宕機,那麼sentinel會提升一個slave當選新的master,從而保證了redis服務的正常使用
  • Redis安裝筆記
    準備工作3.1 本地化如果是新環境,我們需要設置時區以保證時間顯示正確timedatectl set-timezone Asia/Shanghai3.2 安裝wget如果環境裡沒有wget,通過yum安裝一下3.3 安裝gcc如果環境裡沒有編譯工具,通過yum安裝一下
  • 認識Redis集群——Redis Cluster
    之前沒有好好的全面理解Redis集群,特別是Redis Cluster,以為這就是redis集群的英文表達啊,故寫本篇博文來儘可能全面加深理解Redis Cluster。主要參考資料《Redis設計與實現》,主要是PDF電子版,有需要的朋友評論或者私聊! 一、Redis Cluster簡單概述1.
  • 輕鬆搞定redis的安裝和配置
    我會按照redis的安裝、redis配置參數、redis命令、redis的性能指標、如何自己開發redis監控腳本等4個方面,逐一會和大家分享,至少能夠幫助你基本掌握redis的大部分常用內容了,不過還是需要你自己去實踐和總結。我自己的伺服器作業系統是centos6.6,完整的傻瓜式的redis安裝步驟如下,期間未遇到問題,還是比較順利的。
  • Redis服務之高可用組件sentinel
    的常用數據類型相關命令的使用和說明,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13419690.html;今天我們來聊一下redis的高可用組件sentinel;首先來回顧下redis的主從同步,主從同步最主要的作用是讓master的數據在其他伺服器上實時存在副本,起到了備份的效果;對於redis的讀寫來說,主從架構能夠讓讀的請求分散到多個從伺服器上,從而降低了單臺
  • window中安裝redis
    java實戰幹活項目,最新文檔首發網址java一號1.首先在Window下下載安裝Redis下載地址:https://github.com/MicrosoftArchive/redis/releases
  • Redis(一)入門安裝篇
    3.啟動另一個命令行界面,在該Redis目錄下,使用命令:redis-cli.exe 啟動客戶端,連接伺服器。出現下圖效果,證明連接伺服器成功。安裝之前的服務5.安裝為Windows服務安裝命令: redis-server.exe --service-install redis.windows.conf
  • Redis簡介及安裝教程
    Redis 安裝Windows 下安裝下載地址:https://github.com/tporadowski/redis/releases。Redis 支持 32 位和 64 位。這個需要根據你系統平臺的實際情況選擇,這裡我們下載 Redis-x64-xxx.zip壓縮包到 C 盤,解壓後,將文件夾重新命名為 redis。打開文件夾,內容如下:
  • Redis 單例、主從模式、sentinel 以及集群的配置方式及優缺點對比
    redis主從模式解決了數據備份和單例可能存在的性能問題,但是其也引入了新的問題。由於主從模式配置了三個redis實例,並且每個實例都使用不同的ip(如果在不同的機器上)和埠號。根據前面所述,主從模式下可以將讀寫操作分配給不同的實例進行從而達到提高系統吞吐量的目的,但也正是因為這種方式造成了使用上的不便,因為每個客戶端連接redis實例的時候都是指定了ip和埠號的,如果所連接的redis實例因為故障下線了,而主從模式也沒有提供一定的手段通知客戶端另外可連接的客戶端地址,因而需要手動更改客戶端配置重新連接。
  • Redis從入門到精通:初級篇
    不過微軟開放技術小組開發和維護了Windows版本的Redis,下載地址為https://github.com/MicrosoftArchive/redis/releases,感興趣的可以自己去試下,LZ在自己筆記本上安裝啟動過,沒有問題,但就不細說了。
  • 雲計算核心技術Docker教程: Docker 安裝 Redis
    Redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value 的 NoSQL 資料庫,並提供多種語言的 API。本文介紹通過docker安裝redis。
  • laravel框架中使用redis
    一、簡介Redis是一個nosql資料庫,現在用的比較多,PHP中直接操作redis大家都很熟悉了,在laravel中如何操作redis呢?本專題內容來講解。二、特性redis是一個key-value存儲系統。