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的密碼為 123456(下圖是修改以後的)不要看行數,看大體位置
修改運作在别的主機上通路(下圖是修改好的)不要看行數,看大體位置
如果是虛拟機
安裝寶塔頁面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 字元串(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/ 目錄下如下圖所示
在 /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.conf檔案
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
檢視主機結果
哨兵模式
在自定義目錄下建立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
啟動完畢後,正常情況下會生成如下所示檔案(在/usr/local/bin目錄下)
在解壓的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