天天看點

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

redis

是一種支援Key-Value等多種資料結構的存儲系統。可用于緩存、事件釋出或訂閱、高速隊列等場景。該資料庫使用ANSI C語言編寫,支援網絡,提供字元串、哈希、清單、隊列、集合結構直接存取,基于記憶體,可持久化。

曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):

1

 曾經沉迷在Linux上搭建環境,曾經在Linux上搭建了個MySQL和java web的環境并且成功跑起來,開心了好幾天,但是實際生活中我感覺寫代碼比搭建環境更重要,何況你既然能看到我的文章就說明不是大牛,那你搭建的環境就是自己玩玩算了,把重心用在寫代碼上

2

怎麼搭建redis環境(敲黑闆,重中之重)

     1) 首先你要有一個能聯網,能連接配接的Linux系統

      2)我用的是寶塔界面 ,官方URL:https://www.bt.cn/      我很笨,我都能用,但是這個插件是真的棒,就是是在Linux上安裝一個安裝軟體的圖形界面,類似手機的應用寶

        如果你用的是阿裡雲伺服器,并且你安裝了寶塔插件,你需要修改阿裡雲的安全組,還需要修改寶塔面闆的安全選項,才能開放端口,見下面圖檔

        如果你是虛拟機,那就要開端口6379,在寶塔面闆也配置一下,見下面圖檔

3

我曾經會遇到 一些可以事件解決的問題,卻拼命的看部落格自己推理,就像這個文法區分大小寫嗎,試試就知道了,試試就知道了,試試就知道了

4

 學習知識的時候不要太追求完美,比如java裡面的String的類,裡面有很多分割字元串的方法,沒必要全都試一遍,用到在查自然就會了,剛開始學習知識的時候把最常用的學會了我感覺就很棒了

搭建環境(用寶塔面闆)

阿裡雲伺服器搭建redis

修改安全組

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考
redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考
redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

修改redis的配置檔案

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考
redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

修改redis的密碼為 123456(下圖是修改以後的)不要看行數,看大體位置

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

修改運作在别的主機上通路(下圖是修改好的)不要看行數,看大體位置

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

如果是虛拟機

   安裝寶塔頁面https://www.bt.cn/

   修改配置檔案同上

  開放6379端口

        https://blog.csdn.net/qq_37171353/article/details/80040662  我的部落格裡有寫到,請注意看到哪結束

Redis支援五種資料類型:

string(字元串),hash(哈希),list(清單),set(集合)及zset(sorted set:有序集合)。

登入

文法:

redis-cli -h host -p port -a password
           

實踐: 

redis-cli -h 127.0.0.1 -p 6379 -a 123456
           

選擇哪個資料庫(預設16個)

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

檢視資料庫有多少個資料

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

Redis 字元串(String)

set一個關鍵字為key1的關鍵字,其值為value1

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> del key1
(integer) 0
127.0.0.1:6379>
           

Redis 哈希(Hash)

Redis hash 是一個string類型的field和value的映射表,hash特别适合用于存儲對象。

Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。(對于小白來說這是廢話)

我認為:

此資料類型和java中的     Map<String, Object> map=new HashMap<String, Object>();         相似

建立

2種建立方式,一種是hset (一次隻操作一組key-value),一種hmset(一次可以操作多組key-value)

HSET 哈希表名稱   key1  value1

127.0.0.1:6379> HSET set1 name zhangsan
           

HMSET 哈希表名稱   key1  value1 key2  value2

127.0.0.1:6379> HMSET hset1 name zhangsan age 11
OK
           

擷取在哈希表中指定 key 的所有字段和值

127.0.0.1:6379> HGETALL hset1
1) "name"
2) "zhangsan"
3) "age"
4) "11"
127.0.0.1:6379>
           

擷取hset1中key為age的value

127.0.0.1:6379> HGET hset1 age
"11"
127.0.0.1:6379>
           

删除鍵值對

127.0.0.1:6379> HDEL hset1 name
(integer) 1
127.0.0.1:6379>
           

檢視hset1中是否有key為name的鍵值對

127.0.0.1:6379> HEXISTS hset1 name
(integer) 0
127.0.0.1:6379>
           

擷取key清單

127.0.0.1:6379> HKEYS hset1
1) "age"
2) "name1"
3) "name2"
           

Redis 清單(List)

Redis清單是簡單的字元串清單,按照插入順序排序。你可以添加一個元素到清單的頭部(左邊)或者尾部(右邊)

一個清單最多可以包含 232 - 1 個元素 (4294967295, 每個清單超過40億個元素)。

我認為: 和java中的        List<String> list=new ArrayList<String>();            相似

基本操作

LPUSH   在list1中的左邊添加zhangsan關鍵字,傳回清單的長度

127.0.0.1:6379> LPUSH list1 zhangsan
(integer) 1
           

RPUSH   在list1中的右邊邊添加llisi關鍵字,傳回清單的長度

127.0.0.1:6379> RPUSH list1 lisi
(integer) 2
           

LPOP 在左邊移除,移除,移除并擷取清單的第一個元素,RPOP一樣

127.0.0.1:6379> LPOP list1
"111"
           

檢視清單裡面所有的資料

127.0.0.1:6379> LRANGE list1 0 -1
1) "zhangsan"
2) "lisi"
           

Redis 集合(Set)

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的資料。

Redis 中集合是通過哈希表實作的,是以添加,删除,查找的複雜度都是 O(1)。

集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

SADD set集合名詞  value

127.0.0.1:6379> SADD set1 zhangsan
(integer) 1
           

擷取set裡面的所有資料 

  SMEMBERS set集合名稱

127.0.0.1:6379> SMEMBERS set1
1) "zhangsan"
           

檢視set集合裡面所有的資料

127.0.0.1:6379> SMEMBERS set1
1) "zhangsan"
           

判斷 zhangsan元素是否是集合 set1 的成員

127.0.0.1:6379> SISMEMBER set1 zhangsan
(integer) 1
127.0.0.1:6379> SISMEMBER set1 lisi
(integer) 0
           

Redis 有序集合(sorted set)

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重複。

添加資料

127.0.0.1:6379> ZADD sset1 1 zhangsan
(integer) 1
127.0.0.1:6379> ZADD sset1 2 lisi
(integer) 1
127.0.0.1:6379> ZADD sset1 2 lisi2
(integer) 1
127.0.0.1:6379> ZADD sset1 3 wangwu
(integer) 1
           

顯示資料

127.0.0.1:6379> ZRANGE sset1 0 -1
1) "zhangsan"
2) "lisi"
3) "lisi2"
4) "wangwu"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES
1) "zhangsan"
2) "1"
3) "lisi"
4) "2"
5) "lisi2"
6) "2"
7) "wangwu"
8) "3"
127.0.0.1:6379>
           

Redis單機版環境搭建(要聯網)

安裝步驟

下載下傳安裝包

wget http://download.redis.io/releases/redis-5.0.8.tar.gz
           

解壓壓縮包

tar -zxvf redis-5.0.8.tar.gz
           

進入解壓的目錄

cd redis-5.0.8/
           

 執行make指令

yum install gcc
           
yum install gcc-c++
           
make distclean
           
make
           

 執行make install 指令

make install
           

安裝完畢後會在 /usr/local/bin/ 目錄下如下圖所示

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

在 /usr/local/bin/下啟動redis-server ,其中後面的路徑為剛開始解壓的壓縮包中配置檔案的位置

./redis-server /opt/module/redis-5.0.8/redis.conf 
           

在 /usr/local/bin/下啟動redis-client 

./redis-cli
           

設定服務端為背景啟動

修改redis.conf檔案

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

運作遠端用戶端通路

修改redis.conf檔案

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

Redis主從複制(一台機器開3個redis)

步驟

 前提:此文檔是在一台機器開3個redis服務,進而完成主從複制

把redis.conf複制3份 ,redis6379.conf    redis6380.conf      redis6381.conf

修改redis6379.conf 檔案

##注意:我redis的版本裡的配置檔案是下面的行号,其他版本不一定
# bind 127.0.0.1     #大約69行,運作其他IP通路
port 6379  #大約92行
daemonize yes  #大約136行  背景啟動
pidfile /var/run/redis_6379.pid  #大約158行
logfile "6379.log"  #大約171行
dbfilename dump6379.rdb #大約253行
           

修改6380和6381 配置檔案,添加主機節點,不僅添加上面的代碼,而且還修改自己單獨的代碼

# replicaof <masterip> <masterport>   #大約286行
replicaof 127.0.0.1 6379
           

啟動3台redis伺服器(在/usr/local/bin目錄下)

./redis-server /opt/module/redis-5.0.8/redis6381.conf
           
./redis-server /opt/module/redis-5.0.8/redis6380.conf
           
./redis-server /opt/module/redis-5.0.8/redis6379.conf
           

 啟動三台用戶端

./redis-cli -p 6379
           
./redis-cli -p 6380
           
./redis-cli -p 6381
           

 檢視主機結果

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

 哨兵模式

在自定義目錄下建立sentinel.conf,其中參數為主機IP和端口

sentinel monitor mymaster 127.0.0.1 6379 1
           

 (在/usr/local/bin目錄下)開啟哨兵模式

./redis-sentinel /opt/module/redis-5.0.8/sentinel.conf
           

Redis叢集搭建(一台機器開3個redis)

一台機器開3個redis伺服器,然後redis端口分别是 6379 7380 6381

安裝ruby環境

yum install ruby
yum install rubygems
           

修改redis6389.conf的配置檔案

protected-mode no    #大約88行
# bind 127.0.0.1     #大約69行,運作其他IP通路
port 6379  #大約92行
daemonize yes  #大約136行  背景啟動
pidfile /var/run/redis_6379.pid  #大約158行
logfile "6379.log"  #大約171行
dbfilename dump6379.rdb #大約253行
cluster-enabled yes #大約832行    #打開叢集模式
cluster-config-file nodes-6379.conf   #大約840行  #設定節點配置檔案名
cluster-node-timeout 15000   #大約840行  #設定節點失聯時間,超過該時間,叢集自動進行主從切換
           

修改redis6390.conf、redis6391.conf的配置檔案

同上,省略,把數字改改

啟動3個redis

./redis-server /opt/module/redis-5.0.8/redis6379.conf 
./redis-server /opt/module/redis-5.0.8/redis6380.conf 
./redis-server /opt/module/redis-5.0.8/redis6381.conf 
           
redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

啟動完畢後,正常情況下會生成如下所示檔案(在/usr/local/bin目錄下)

redis之基礎文法redis曾經走過的坑(可以不看下面,但是這一段我感覺是最用心的):搭建環境(用寶塔面闆)Redis支援五種資料類型:登入Redis 字元串(String)Redis 哈希(Hash)Redis 清單(List)Redis 集合(Set)Redis 有序集合(sorted set)Redis單機版環境搭建(要聯網)Redis主從複制(一台機器開3個redis)Redis叢集搭建(一台機器開3個redis)緩存政策參考

在解壓的redis目錄下的src下執行下面指令,不能寫localhost,不能寫127.0.0.1,其中後面的0是主從複制,一個主節點有幾個從節點

redis-cli --cluster create 39.105.30.146:6379 39.105.30.146:6380 39.105.30.146:6381 --cluster-replicas 0
           

緩存政策

# volatile-lru -> 在過期的key中使用最近最久未使用.
# allkeys-lru -> 在所有的key中使用最近最久未使用
# volatile-lfu -> 在過期的key中使用最近最少使用原則.
# allkeys-lfu -> 在所有的key中使用最近最少使用原則
# volatile-random -> 在過期的key中随機删除.
# allkeys-random -> 在所有的key中随機删除.
# volatile-ttl -> 删除快要過期的key
# noeviction -> 什麼都不做,抛錯.
           

參考

https://segmentfault.com/a/1190000010131816

繼續閱讀