前言
Redis是一個開源的使用ANSI C語言撰寫、支持網路、可基于記憶體亦可持久化的日志型、Key-Value資料庫,并提供多種語言的API,從2010年3月15日起,Reids的開發作業由VMware主持,Redis能運行在大多數POSIX(Linux,*BSD,OS X和Solaris等)系統上,
和普通的Key-Value結構不同,Redis的Key支持靈活的資料結構,除strings,還有hashes、lists、sets和sorted sets等結構,正是這些靈活的資料結構,豐富了Redis的應用場景,能滿足更多業務上的靈活存盤需求,
Redis的資料都保存在記憶體中,而且底層實作上是自己寫了epoll enent loop部分,而沒有采用開源的libevent等通用框架,所以讀寫效率很高,為了實作Redis的持久化,Redis支持定期重繪(可通過配置實作)或寫日志的方式來保存資料到磁盤,
公眾號:「淺羽的IT小屋」
1、Redis的核心概念
「Redis是什么:」
MySql/Oracle:是一個關系型的資料庫(關系型的資料庫中存在表以及表與表之間關聯關系
Redis:是一個no sql的資料庫--->還是資料庫(非關系型的資料庫)
非關系型的資料庫:簡單來說非關系型的資料庫不像關系型的資料庫那樣存在表以及表之間關聯關系,非關系型的資料庫中只存在鍵值對
非關系型的資料庫中實際上,只有鍵值對形式的存盤,就像Map這種集合一樣,只存在鍵值對
Redis實際上就是一個基于鍵值對形式的檔案存盤系統而已
「疑問:」
我們是否掌握Redis之后,就不會使用關系型資料庫(mysql/oracle)呢?
不是的 一般在進行開發的時候 我們一般情況下 都是使用 關系型資料庫和非關系型資料庫進行混用 各取所長 已達到用戶的好的體驗效果
不是全部用Redis也不是全部用mysql
常見的非關系型的資料庫:mogodb
2、Redis能干什么?
「主要用途:」
百度上面的單點登錄(SSO)
商城上面的評論
商城上面的積分
購物車
商城上的快取(主要是指的是:所有用戶公用的資料)
最新最熱商品的計算
訊息佇列的實作
...
3、Redis的特點
「用戶管理命令:」
基于記憶體的(資訊是在記憶體中的 訪問的速度特別快)
資料結構簡單(Key-Value)
支持資料的持久化(能夠將記憶體中的資料同步到硬碟)
4、Redis的安裝
「安裝流程:」
下載地址:http://redis.io/download
安裝步驟:
1 首先需要安裝gcc,把下載好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local檔案夾下
yum install gcc
2 進行解壓 tar -zxvf redis-3.0.0-rc2.tar.gz
3 進入到redis-3.0.0目錄下,進行編譯 make
4 進入到src下進行安裝 make install 驗證(ll查看src下的目錄,有redis-server 、redis-cil即可)
5 建立倆個檔案夾存放redis命令和組態檔
mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/bin
6 把redis-3.0.0下的redis.conf 移動到/usr/local/redis/etc下,
cp redis.conf /usr/local/redis/etc/
7 把redis-3.0.0/src里的mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-dump、redis-cli、redis-server
檔案移動到bin下,命令:
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
8 啟動時并指定組態檔:./redis-server /usr/local/redis/etc/redis.conf(注意要使用后臺啟動,所以修改redis.conf里的 daemonize 改為yes)
9 驗證啟動是否成功:
ps -ef | grep redis 查看是否有redis服務 或者 查看埠:netstat -tunpl | grep 6379
進入redis客戶端 ./redis-cli 退出客戶端quit
/exit退出redis服務:
(1)pkill redis-server 、
(2)kill 行程號、
(3)/usr/local/redis/bin/redis-cli shutdown
5、Redis中的資料型別以及資料型別的使用場景
「資料型別及使用場景:」
String
應用場景是什么?普通的資料快取這種一般就放到這里面 應用場景比較廣 因為他就是一個鍵值對的字串而已
List(可以重復的)
應用場景:這個一般用在:博客的關注、博客的評論、博客的積分
Hash
應用場景:SSO單點登錄
Set(無序但是不重復)
應用場景:這個一般用在和List一樣但是不重復的
SetSort
應用的場景:最新最熱的商品(有序)
6、Redis中的常用命令(資料型別相關)
「常用命令:」
set key value: 設定值
get key 獲取某一型別的值
keys * 查看所有的鍵
del key1,key2.. 洗掉一個或者多個資料
rename 原來的key 現在key的名字 從新給鍵命名
keys * 將當前資料庫里面的所有鍵排列出來
//在Redis中默認有16個資料庫 資料庫的下標是0-15 默認存盤資料的是會存盤到 0號資料庫里面
select index 選中某一個資料庫
keys * 支持模糊查詢
exists key 判斷當前資料資料庫中是否存在某一個特定的key(注意:不是所有資料庫 而是當前操作的這個資料庫)
type key 判斷值的型別
expire key 時間(單位秒鐘) 設定key的過期時間
ttl key 查看key的過期時間
persist key (把某一個key設定成永久有效)
set key value 存盤資料
mset key value key value key value 一次性設定多個鍵值對 注意:中間是沒有任何符號的
mget a1 a2 a3 a4 一次性獲取多個值
append key1 value 在某一個key對應的值上面追加值
getset key value 先獲取key對應的值 然后再將后面的值 賦值給key
mgetset key value key value .... 同時為多個鍵設定值
incr key 自增1
incrby key step 每一次在原來的值上面增加 步長
decr key 自減1
decrby key step 每一次在原來的值上面減少 step
Hash資料型別的方法
Hset field key value ---->設定相關的值 HSet user userToken userInfo
Hget field key value ---->獲取設定的值
hlen field ---->獲取的是當前hash里面一共的長度
hmset field key value ... --->一次性設定多個鍵值對到某一個名字中
hsetnx field key value... --->不存在的時候再來創建這個值和用戶
hkeys * ---->查看所有的鍵
hincrby field key ---->自增
hexists field ----->查看是否存在
List資料型別對應的值
lpush key value ----->向里面添加值
lset key index value --->修改某一個位置的值
lpop key ----->彈堆疊(獲取這個值)
lrem key count value ---->洗掉list集合中的值
Set集合
sadd key value... ---->向set集合中添加值
spop key ---->獲取set集合添加進去的值
smove key ---->洗掉key
SortSet
zadd key value score ---->表示的是添加元素到key中 score的意思是排序的位置
zrange value 范圍(開始-結束) --->表示的是獲取某一范圍內的資料
zrem value :洗掉某一個值
7、Redis中的資料持久化問題
「持久化方式:」
持久化方式有兩種 rdb aof
持久化:簡單來說就是記憶體和資料寫入到硬碟的程序,就叫資料的持久化
如果是記憶體的資料在斷電的情況下,資料會發生丟失,所以我們的記憶體資料是需要持久化的
「rdb模式:」
rbd模式(開發一般都不用): 是根據我們的時間片來判斷什么時候資料和硬碟進行同步 也就是說假設在一定的條件下才會將資料進行持久化(需要滿足一定的條件)、rdb模式在使用的時候會首先將記憶體資料寫入到零時檔案 、當這個記憶體的資料寫完成的時候 就會洗掉原來的rdb檔案,重新將零時檔案中的內容寫入到rdb檔案中
1>:條件要成立才寫(條件:)
2>:先寫入零時的檔案---->洗掉rdb檔案----->寫入rdb檔案
因為要將記憶體中的所有資料寫入到零時檔案 相對來說需要更加頻繁的去操作IO
rdb模式適合備份
#表示的是在900秒之內有一個key發生改變那么就要和硬碟同步
save 900 1
#在300秒時間之內 如果有10個key發生改變那么就要和硬碟同步
save 300 10
#在60秒的時間內如果有10000個key發生改變那么就要和硬碟同步
save 60 10000
「aof模式:」
aof模式:這種模式是相當于在原來的日志基礎上來進行追加、實際上就相當于是 只是同步 改變了的內容 未改變的內容不用同步
他不會頻繁的去操作IO
要使用aof模式:
appendonly yes
#只要有一個key發生改變那么立馬和后臺同步 這種模式呢不會丟資料但是 效率不高 一般不推薦
# appendfsync always
# 這個表示每秒鐘和硬碟同步一次
appendfsync everysec
# 這個和記憶體的緩沖區有關 緩沖區滿了自動同步 沒滿的話那么就只有等
# appendfsync no
8、Redis的主從復制問題(配置從服務器)
「主從復制:」
假設現在我有一種策略:這種策略就是 能夠將訪問Redis服務器的請求分成兩類(讀、寫)
然后將讀放到一部分的服務器上、寫這個操作放到另外的一部分的服務器上、這樣就能在3W并發上完成服務器的所有的請求
將服務器上的讀和寫進行分離 又稱為讀寫分離資料庫的主從復制實際上完成的最終的功能就是讀寫分離
主從復制:實際上指的是 主服務器來實作寫,從服務器來實作讀、所有的請求都經過主服務器來完成
主從復制的配置實作
「主從復制的步驟:」
clone服務器之后修改slave的IP地址
修改組態檔(從服務器的組態檔)
vim /usr/local/redis/etc/redis.conf
第一步:slaveof 主機地址(eg:119.23.220.148)
bind 0.0.0.0
第一步下:
#slaveof <masterip> <masterport>
#改的第二個地方
slaveof 112.74.49.17 6379
第二步:masterauth<master-password>(這里可以不用設定)
cd /usr/local/redis/bin/
./redis-cli
使用info 查看role角色可以知道主服務或者從服務
9、Redis的哨兵模式
「哨兵模式:」
單點問題:簡單來說就是一臺服務器掛了,所有服務器都不能用了
哨兵模式的出現就是為了解決單點問題的
哨兵:站崗的
哨兵模式實際上是個程式、這個程式呢實際上就是用來檢測主服務器的狀態的,一旦主服務器掛了、那么從服務器就會進行投票選舉,按照預先設計的選舉策略,最終選舉出新的主服務器
「哨兵模式的實作:」
哨兵模式的實作:(哨兵是一個獨立的程式和redis本身的運行是沒有關聯的)
任意的一臺機器上面去啟動哨兵的程式(從服務器上)
1>:quit shutdown 退出redis
2>:copy sentinel.xml到etc這個檔案下
3>:修改 sentinel.xml這個檔案
dir -> /usr/local/redis/etc(這個是告訴你路徑)
sentinel monitor mymaster ip 埠 投票選舉的次數
sentinel down-after-milliseconds mymaster 5000 多久進行檢測一下主節點活著沒有
啟動哨兵 就必須跟上 sentinel這個組態檔
...server/ ...sentinel.xml --sentinel &
10、Redis的集群模式
「集群搭建流程:」
1>:你可以找6臺機器來進行安裝
2>:你可以找一臺機器開6個埠來進行安裝
首先要將redis.conf 復制到我們的etc下
cp /usr/local/redis-4.0.6/redis.conf /usr/local/redis/etc/
第一步驟:
mkdir -p /usr/local/redis-cluster //創建檔案夾
第二步驟
mkdir 500* 在剛剛創建的這個檔案夾里面創建6臺服務器的 組態檔的檔案夾
第三步驟
把原來的Redis.cnf檔案copy到我們的500*當中去
第四步驟
修改配置
daemonize yes
port 500*
bind 192.168.108.135 改成 0.0.0.0
dir "/usr/local/redis-cluster/500*/" 最好打上""
cluster-enabled yes 這個需要打開注釋
cluster-config-file nodes-500*.conf 這個需要打開注釋
cluster-node-timeout 5000 這個也需要打開注釋
appendonly yes
第五步驟
安裝ruby的相關工具
yum install ruby
yum install rubygems
gem install redis (報錯版本低了就執行 安裝rvm到第9步驟....)
安裝rvm
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable
然后進入cd /usr/local/目錄下看是否多個了rvm
然后進入 /usr/local/rvm/archives
再進行壓縮檔案的解壓 tar-zxvf rvm-1.29.7.tgz
3.source /usr/local/rvm/archives/rvm-1.29.7/scripts/rvm 添加一個軟連接 相當于windows創建一個快捷方式,相當于windows添加一個環境變數,找到這個命令的
4. 查看rvm庫中已知的ruby版本
rvm list known
5. 安裝一個ruby版本
rvm install 2.3.3
6. 使用一個ruby版本
rvm use 2.3.3
7. 設定默認版本
rvm remove 2.0.0
8. 卸載一個已知版本
ruby --version
9. 再安裝redis就可以了
gem install redis
開啟每一個服務器
去阿里云服務器設定埠,并且服務器重啟下
./redis-server /usr/local/redis-cluster/700*/redis.conf
創建這個集群
進入cd /usr/local/redis-4.0.6/src/這個目錄中
./redis-trib.rb create --replicas 1 120.78.191.34:7001 120.78.191.34:7002 120.78.191.34:7003 120.78.191.34:7004 120.78.191.34:7005 120.78.191.34:7006
redis-cli --cluster create 106.54.13.167:5001 106.54.13.167:5002 106.54.13.167:5003 106.54.13.167:5004 106.54.13.167:5005 106.54.13.167:5006 --cluster-replicas 1
登錄客戶端實作驗證
./redis-cli -c -h 192.168.108.137 -p 5001
Jedis進行單單機的訪問/連接池下的訪問/訪問集群
Redis資料庫的訪問是要依賴于Jedis
結語
本篇關于Redis的介紹就先到這里結束了,后續會出更多關于Redis系列更多文章,謝謝大家支持!
如果你覺得淺羽的文章對你有幫助的話,請在微信搜索并關注「 淺羽的IT小屋 」微信公眾號,我會在這里分享一下計算機資訊知識、理論技術、工具資源、軟體介紹、后端開發、面試、作業感想以及一些生活隨想等一系列文章,所見所領,皆是生活,慢慢來,努力一點,你我共同成長...
我建立了一個技術群,如果你想了解到更多關于IT行業的技術以及生活中遇到的問題,歡迎小伙伴進群交流,只需添加我的微信,備注進群即可,期待你們的加入,
往期推薦
吐血推薦|2萬字總結Mac所有應用程式、軟體工具和相關資料
超級詳細|Linux系統下從0到1的玩法大全
簡化開發|Lombok神器帶你消除冗余代碼
異步編程|五分鐘讓你學會區域重繪Ajax技術
全面決議|搞懂Nginx這一篇就夠了
干貨|SpringBoot JMS(ActiveMQ)API實踐應用詳解
徹底了解|利用Apache CXF框架開發WebService
極速上手使用Docker,這篇文章就夠了!
淺羽
留言區
點個贊,證明你還愛我
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/218558.html
標籤:其他
