Redis基础知识点总结
Redis默認端口6379
一、安裝
1.去redis.cn看看最新的穩定版下載地址,http://download.redis.io/releases/redis-6.0.6.tar.gz
2.下載 wget http://download.redis.io/releases/redis-6.0.6.tar.gz
3.解壓 tar -zxvf redis-6.0.6.tar.gz
4.移動 放到/usr/local/redis目錄下 sudo mv redis-6.0.6 /usr/local/redis/ 由于redis目錄不存在,所以相當于重命名
5.進入redis目錄 cd /usr/local/redis-6.0.6
6.生成 sudo make 由于redis是C語言編寫的,這個步驟相當于編譯
? 如果出錯,大概率是沒安裝gcc和make,安裝后先make distclean 除編譯內容重新編譯*
7.測試 sudo make test
8.安裝 sudo make install 將redis的命令安裝到/usr/local/bin/目錄
9.進入/usr/local/bin中查看 cd /usr/local/bin ls -all
10.將配置文件復制到/etc/目錄下 配置文件為/usr/local/redis/redis.conf
? sudo cp /usr/local/redis/redis.conf /etc/redis/
二、基本使用
啟動服務端
redis-server 啟動服務端
ps aux|grep redis 查看是否啟動
redis-server --help 查看啟動的幫助
sudo redis-server /etc/redis/redis.conf 指定加載的配置文件
啟動客戶端
redis-cli 啟動客戶端
redis-cli --help 查看啟動幫助,可添加參數(主機、端口等等)
redis-cli -h ip地址 -p 端口號
ping
啟動客戶端后輸入ping 如果結果為PONG則表示客戶端成功連接redis服務端
select
切換數據庫
select 數字 數字范圍是0-databases最大值減1
默認是在select 0
help
help 命令名 查看此命令的使用幫助
核心配置選項
配置信息在/etc/redis/redis.conf
bind 127.0.0.1 如果需要遠程訪問,可將此行注釋或者綁定一個真實ip
port 6379 端口號,默認6379
daemonize yes 設置以守護進程運行,no為非守護進程
? 如果以守護進程運行,則不會在命令行阻塞,類似于服務,保證了redis服務在后臺的穩定運行
? 如果以非守護進程運行,則當前終端被阻塞
databases 16 redis默認有16個數據庫
logfile 日志路徑
dbfilename dump.rdb 數據文件,默認存放在家目錄下
dir /var/lib/redis 數據文件存儲路徑
slaveof 主從復制,類似于雙機備份
三、基本數據結構
redis是key:value的數據結構,每條數據都是一個鍵值對
鍵的類型的字符型,且不能重復
值的類型可以有一定的數據結構,可以為字符串string、列表list、哈希hash、集合set、有序集合zset
四、增刪改查
string類型
在redis中字符串類型的value最多可以容納的數據長度是512M
set 設置
set name LiKang
set age 22
get 獲取
get name
get age
del 刪除
del name
del age
插入的時候設置key的過期時間
setex key 秒數 value
ttl key 查看此key的有效期,-1為永久存在
mset 設置多個key-value
mset name Liang age 22 注意:如果后面還設置了name之前name的值會被覆蓋
mget key1 key2 獲取多個值
append 追加
append key value
鍵命令
del key1 key2 刪除此key的鍵值對
keys * 查看都有哪些key
keys a* 查看a開頭的key
exists key 查看key是否存在,1則存在,0則不存在
type key 查看此key的value的類型
expire key 秒數 給key設置過期時間
hash類型
key的值為 屬性:值,這樣的鍵值對,屬性值為string類型
hset key field value 設置
? 例如hset person name LiKang
hget key field 獲取value值
? 例如hget person name
hmset key field1 value1 field2 value2 設置多個值
hmget key field1 field2 獲取多個值
hgetall key 獲取此key下的所有鍵值對
hkeys key 獲取此key下的所有屬性
hvals key 獲取此key下的所有屬性值
hdel key field1 field2 刪除某個屬性
del key 刪除此key的鍵值對
更新的話再hset key field value插入就行,相同字段會自動覆蓋原來數據實現更新
list類型
列表元素類型為string,且數據按照插入順序排序,元素可以重復
lpush 從左邊插入
? lpush key value1 value2 返回值為key中value的個數
? lrange key num1 num2 從左到右獲取從num1到num2之間的元素值(包括num2),0代表第一個元素,-1代表最后一個元素,l代表list,不是left
rpush 從右邊插入
? rpush key value1 value2 返回值為key中value的個數
? 無rrange命令
lrem key count value 移除數據,l代表list,不是left
? count:0 代表刪除key中的所有值為value的元素
? count>0 刪除左邊的值為value的元素,刪除的個數是count
? count<0 刪除右邊的值為value的元素,刪除的個數是count
lset key 下標 value 更新數據
linsert key before(after) value1 value2 在value1的前面(后面)插入value2
set類型
無序集合,元素為string類型,元素具有唯一性,不重復,對于集合沒有修改操作
sadd key member1 member2 增加數據
smembers key 獲取數據
srem key member 移除數據
zset類型
有序集合,元素類型為string,元素具有唯一性,不重復,每個元素都會關聯一個double類型的score,表示權重,通過權重將元素從小到大排序,且沒有對于集合修改操作
zadd key score1 member1 score2 member2 增加數據
? 如果score的值已經存在,則會將新元素插入到與它score值相同的元素的后面或者前面
? 如果member的值已經存在,則會修改其socre的值為新值
zrange key num1 num2 獲取num1到num2之間的數據(包括num2)
zrangeby score key min max 獲取score值在min到max之間的成員(包括min和max)
zscore key member 返回member的score值
zrem key member1 member2 刪除指定元素
zremrangebyscore key min max 刪除score值在min到max范圍內的元素(包括min和max)
五、搭建主從
一個master可以擁有多個slave,一個slave又可以擁有多個slave,如此下去,形成來強大的多級服務器集群架構。
master用來寫數據,slave用來讀數據,經統計,網站的讀寫比率是10:1,也就是11個用戶中只有一個用戶在寫數據。
通過主從配置可以實現讀寫分離。
配置主服務器
查看當前主機的ip地址 ifconfig
修改/etc/redis/redis.conf文件 bind 當前主機ip
重啟redis服務
? sudo service redis stop
? sudo redis-server redis.conf
配置從服務器
復制/etc/redis/redis.conf文件 sudo cp redis.conf ./slave.conf
修改slave.conf文件
? bind 主機ip (如果是和主服務器為不同電腦,綁定本機ip即可)
? port 6378
? 添加一行slaveof 當前主機ip 主服務器端口(默認6379)
啟動redis服務 sudo redis-server slave.conf
查看主從關系 redis-cli -h 當前主機ip info Replication
PS:主服務器可讀寫,從服務器只能讀,且主從服務器數據可同步顯示
啟動redis-cli -h 主機ip -p 端口號
六、搭建集群
雖然一主可以多從,但如果同時的訪問量過大(1000w),主服務肯定就會掛掉;獲取發生自然災難,數據服務就掛掉了
大公司都會有很多的服務器。
集群的概念
集群是一組相互獨立的,通過高速網絡互聯的計算機,它們構成了一個組,并以單一系統的模式加以管理。一個客戶端與集群相互作用時,集群像是一個獨立的服務器,集群配置是用于提高可用性和可縮放性。當請求到來時首先由負載均衡服務器處理,把請求轉發到另外的一臺服務器上。
分類
軟件層面:只有一臺電腦,在這一臺電腦上啟動了多個redis服務
硬件層面:存在多臺實體的電腦,每臺電腦上都啟動了一個redis或者多個redis服務
集群的搭建
在一臺ubuntu機器上面搭建集群
配置機器1
在Desktop目錄下創建一個文件夾“redis_cluster",在此文件夾下創建7000.conf,內容如下
# 端口號 port 7000 # 主機ip bind 192.168.37.129 # 是否以守護(后臺)進程方式運行 daemonize yes # pid文件 pidfile 7000.pid # 是否使用集群 cluster-enabled yes # 集群的文件 cluster-config-file 7000_node.conf # 集群的超時時間 cluster-node-timeout 15000 # 備份相關 appendonly yes在”redis_cluster“文件夾下創建7001.conf、7002.conf,除了7000改一下之外,內容和上面一樣
配置機器2
和配置機器1一樣,在Desktop目錄下創建redis_cluster文件夾,里面創建7003.conf、7004.conf、7005.conf,除了把主機ip和7000改一下之外,其他內容都一樣。
但是這里只有一臺機器,所以也將7003.conf、7004.conf、7005.conf兩個文件放在了機器1上
創建集群
先在redis_cluster文件夾下啟動redis服務
sudo redis-server 7000.conf sudo redis-server 7001.conf sudo redis-server 7002.conf sudo redis-server 7003.conf sudo redis-server 7004.conf sudo redis-server 7005.confredis的安裝包中包含了redis-trib.rb,用于創建集群
接下來的操作在機器1上進行
將命令復制,這樣可以在任何目錄下調用此命令
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/redis 5.0之前的版本創建集群
安裝ruby環境,因為redis-trib.rb是用ruby開發的
sudo apt-get install ruby創建集群(必須先開啟redis服務)
–replicas 1 表示創建的集群模式是“一主一從”,共三個節點(Node)
redis-trib.rb create --replicas 1 192.168.37.129:7000 192.168.37.129:7001 192.168.37.129:7002 192.168.37.129:7003 192.168.37.129:7004 192.168.37.129:7005redis 5.0之后的版本創建集群
5.0版本拋棄了redis-trib
直接運行如下命令,–cluster-replicas 1 表示創建的集群模式是“一主一從”,共三個節點(Node)
redis-cli --cluster create 192.168.37.129:7000 192.168.37.129:7001 192.168.37.129:7002 192.168.37.129:7003 192.168.37.129:7004 192.168.37.129:7005 --cluster-replicas 1
(0 slots)為slave服務,不是0的為master服務(redis 5.0之前的版本不管是slave還是master都顯示為master)
連接到集群
redis-cli -h 主機ip -p 端口號 -c
get key 獲取數據,如果數據不在當前節點會自動重定向
集群的注意點
在插入數據時,如果是連接的是從服務器,則會通過CRC16算法重定向到其他的一個主服務器進行插入。
如果是連接的是主服務器,也會通過CRC16算法重定向到其他的一個主服務器進行插入。
集群中每個節點都是平等的關系,每個節點都保存了各自的數據和整個集群的狀態,每個節點和其他所有節點連接,而且這些連接保持活躍,保證了我們只需要連接集群中的任意一個節點,就可以獲取到其他節點的數據。
集群會把數據存在一個master節點,然后在這個master和其對應的slave之間進行數據同步,只有當一個master掛掉之后,才會啟動一個對應的slave節點,充當master
必須要有三個或者以上的主節點,否則在創建集群時會失敗,并且當存活的主節點數小于總節點數的一半時,整個集群就無法提供服務了。
總結
以上是生活随笔為你收集整理的Redis基础知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB基础知识总结
- 下一篇: 使用元数据分析数据库