Redis資料庫的安裝與基礎命令

?普天?發表於2020-11-03

非關係型資料庫產生的背景

隨著技術不斷髮展,資料量海量的增加
對資料庫高併發的讀寫要求越來越高
對海量資料高效儲存與訪問的需求
對資料庫高可擴充套件性與高可用性的需求

優點

Redis等非關係型資料庫產生了
Redis是基於記憶體執行並支援持久化,採用key-value(鍵值對)的儲存形式
其優點如下
具有極高的資料讀寫速度
支援豐富的資料型別
支援資料的持久化
資料的原子性
支援資料備份

Redis的安裝部署

安裝程式

[root@localhost ~]# tar -zxvf redis-5.0.7.tar.gz -C /opt	
[root@localhost ~]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# yum -y install gcc gcc-c++
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make install
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh 		#配置預設回車即可
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 	
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]	 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379				#埠號
Config file    : /etc/redis/6379.conf		#配置檔案
Log file       : /var/log/redis_6379.log		#日誌檔案
Data dir       : /var/lib/redis/6379		#資料存放目錄
Executable     : /usr/local/bin/redis-server	#可執行檔案路徑
Cli Executable : /usr/local/bin/redis-cli		#客戶端命令工具
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.100.12		#新增繫結的主機地址,這樣才能支援遠端登陸
[root@localhost utils]# redis-cli 		#登入資料庫
127.0.0.1:6379> exit
[root@localhost utils]# /etc/init.d/redis_6379 restart    		#重啟資料庫
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@localhost utils]# redis-cli -h 192.168.100.12 -p 6379				#遠端登入資料庫
192.168.100.12:6379> 

配置引數解析
/etc/redis/6379.conf 配置檔案
bind 監聽主機地址
port 埠
daemonize 啟用守護程式
pidfile 指定PID檔案
loglevel notice 日誌級別
logfile 指定日誌檔案

Redis支援五種資料型別: string (字串) , hash (雜湊) , list (列表) , set (集合)及zset(sorted set: 有序集合)。

String (字串)

string是redis最基本的型別,你可以理解成與Memcached一模一樣的型別,一個key對應一個value.
string型別是二進位制安全的。redis的string 可以包含任何資料。比如jpg圖片或者序列化的物件。
string型別是Redis最基本的資料型別,string型別的值最大能儲存512MB。
示例:

192.168.195.180:6379> set name zhangsan
OK
192.168.100.12:6379> mset age 18 score 88 sex boy
OK
192.168.195.180:6379> get name
"zhangsan"

Hash (雜湊字典)

Redis hash是一個鍵值(key= >value)對集合。
Redis hash是一個string型別的field和value的對映表,hash 特別適合用於儲存物件。
每個hash可以儲存2的32次方-1鍵值對。
//作用場景:
腱值對集合,即程式語言中的Map型別
適合儲存物件,並且可以像資料庫中update一個屬性一樣只修改某一項屬性值
示例:

192.168.100.12:6379> hmset stu name lisi age 18 sex 男
OK
192.168.100.12:6379> hget stu name
"lisi"
192.168.100.12:6379> hget stu age
"18"
192.168.100.12:6379>  hget stu sex
"\xe7\x94\xb7"
192.168.100.12:6379> exit
[root@localhost utils]# redis-cli -h 192.168.100.12 -p 6379 --raw	#--raw 解析中文字元
192.168.100.12:6379>  hget stu sex
男

List (列表)

Redis列表是簡單的字串列表,按照插入順序排序,可以重複。可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)
列表最多可儲存2的32次方- 1元素。
//作用場景:
增刪快,提供了操作某-段元索的API
1,最新訊息排行等功能(比如朋友圈的時間線) 2,訊息佇列

192.168.100.12:6379> LRANGE hobby play
1
192.168.100.12:6379> LRANGE hobby read sport
3
192.168.100.12:6379> LRANGE hobby 0 0
sport
192.168.100.12:6379> LRANGE hobby 0 1
sport
read
192.168.100.12:6379> LRANGE hobby 0 10		#讀取資料順序從最後儲存進去的資料開始反向讀
sport
read
play
192.168.100.12:6379> lpush hobby play			#元素可以重複
4
192.168.100.12:6379> LRANGE hobby 0 10
play
sport
read
play

Set(集合)

Redis的Set是string型別的無序集合。
集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是0(1)。
//作用場景:
1.共同好友
2.利用唯一性,統計訪問網站的所有獨立ip
3.好友推薦時,根據tag求交集,大於某個閾值就可以推薦
sadd命令
新增一個string元素到key對應的set集合中,成功返回1,如果元素已經在集合中返回0。
示例:

192.168.100.12:6379> sadd color red green yellow
3
192.168.100.12:6379> smembers color
green
yellow
red
192.168.100.12:6379> sadd color red
0

zset(sorted set: 有序集合)

Redis zset和set - -樣也是string型別元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double型別的分數。 redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯- -的,但分數(score)卻可以重複。
//作用場景: .
將Set中的元素增加一個權重引數score,元素按score有序排列
資料插入集合時,已經進行天然排序
1.排行榜2.帶權重的訊息佇列
zadd命令
新增元素到集合,元素在集合中存在則更新對應score
示例:

192.168.195.180:6379> zadd color 0 red
192.168.195.180:6379> zadd color 0 blue
192.168.195.180:6379> zadd color 1 green
192.1 68.195.180:6379> zadd color 1 yellow
192.168.195.180:6379> zrangebyscore color 0 10
blue
red
green
yellow
192.168.195.180:6379> zrangebyscore color 00
blue
red
192.168.195.180:6379> zrangebyscore color 11
green
yellow
192.168.100.12:6379> zadd color 1.5 black
1
192.168.100.12:6379> zrangebyscore color 0 10
blue
red
green
yellow
black
192.168.100.12:6379> zadd color 0.5 white
1
192.168.100.12:6379> zrangebyscore color 0 10
blue
red
white
green
yellow
black

多資料庫概念

Redis支援多個資料庫,並且每個資料庫的資料是隔離的不能共享,並且基於單機才有,如果是叢集就沒有資料庫的概念。
Redis是-個字典結構的儲存伺服器,而實際上-個Redis例項提供了 多個用來儲存資料的字典,
客戶端可以指定將資料儲存在哪個字典中。這與我們熟知的在一個關聯式資料庫例項中可以建立多個資料庫類似,
所以可以將其中的每個字典都理解成一個獨立的資料庫。
每個資料庫對外都是一個從0開始的遞增數字命名,Redis預設支援16個資料庫(可以通過配置檔案支援更多,無上限) ,
可以通過配置databases來修改這一數字. 客戶端與Redis建立連線後會自動選擇0號資料庫,
不過可以隨時使用SELECT命令更換資料庫,如要選擇1號資料庫:

192.168.100.12:6379> select 1
OK
192.168.100.12:6379[1]> keys *

192.168.100.12:6379[1]> set name zhangsan
OK
192.168.100.12:6379[1]> keys *
name
192.168.100.12:6379[1]> FLUSHALL	#清空所有資料庫
OK
192.168.100.12:6379[1]> keys *

192.168.100.12:6379[1]> select 0
OK
192.168.100.12:6379> keys *

注意:
Redis不支援自定義資料庫的名字,每個資料庫都以編號命名,開發者必須自己記錄哪些資料庫儲存了哪些資料。
另外Redis也不支援為每個資料庫設定不同的訪問密碼,所以一個客戶端要麼可以訪問全部資料庫,要麼連一一個資料庫也沒有許可權訪問。
最重要的一點是多個資料庫之間並不是完全隔離的,比如FLUSHALL命令可以清空-個Redis例項中所有資料庫中的資料。
綜上所述,這些資料庫更像是一種名稱空間,而不適宜儲存不同應用程式的資料。
作用場景:
可以使用0號資料庫儲存某個應用生產環境中的資料,使用1號資料庫儲存測試環境中的資料,
但不適宜使用0號資料庫儲存A應用的資料而使用1號資料庫B應用的資料,不同的應用應該使用不同的Redis例項儲存資料。
由於Redis非常輕量級,一個空Redis例項佔用的記憶體只有1 M左右,所以不用擔心多個Redis例項會額外佔用很多記憶體。

key常規管理

驗證key是否存在 exists

192.168.100.12:6379> set name zhangsan
OK
192.168.100.12:6379> exists name
1
192.168.100.12:6379> exists names
0
192.168.100.12:6379> rename name na
OK
192.168.100.12:6379> get na
zhangsan

設定超時時間

192.168.100.12:6379> PEXPIRE na 3000
1
192.168.100.12:6379> get na

檢視剩餘時間PTTL (單位: 毫秒)

192.168.100.12:6379> set name zhangsan
OK
192.168.100.12:6379> PEXPIRE name 30000
1
192.168.100.12:6379> PTTL name	##檢視超時時間
18776
192.168.100.12:6379> PERSIST name	##取消超時時間
1
192.168.100.12:6379> PTTL name
-1				#-1表示永不超時
192.168.100.12:6379> get name
zhangsan

檢視型別type

192.168.100.12:6379>  lpush color red blue
2
192.168.100.12:6379> TYPE color
list
192.168.100.12:6379> TYPE name
string
192.168.100.12:6379> mset age 18 score 88 sex boy
OK
192.168.100.12:6379> type age
string

隨機返回key RANDOMKEY

192.168.100.12:6379>  RANDOMKEY
color
192.168.100.12:6379>  RANDOMKEY
sex

相關文章