1. 程式人生 > 其它 >帶你瞭解NOSQL之redis的配置

帶你瞭解NOSQL之redis的配置

技術標籤:快取與加速nosqlredis

NOSQL之redis的配置

資料型別與資料庫分類

儲存資料型別分類

結構化資料:可以通過二維表格形式表述這個資料

非結構化資料:不方便以二維表格形式表述的這種型別的資料。

資料庫型別分類

sql結構化資料庫:裡面儲存的資料型別是結構化資料。(關係型資料庫)
nosql非結構化資料庫:裡面儲存的資料型別是非結構化資料。(非關係型資料庫)

非關係型資料庫產生背景

1、對資料庫高併發讀寫需求
2、對海量資料高效儲存與訪問需求
3、對資料庫高可拓展性與高可用性需求

redis簡介

1、redis基於記憶體執行並支援持久化
2、採用key-value(鍵值對)的儲存形式

優點:

(1)具有極高的資料讀寫速度
(2)支援豐富的資料型別
(3)支援資料的持久化(記憶體寫到磁碟、二進位制日誌)
(4)原子性
(5)支援資料備份

redis支援五種資料型別

string(字串)
hash(雜湊)
list(列表)
set(集合)
zset(sortedset:有序集合)

Redis與Memcached差別

說到快取技術,只要有一定經驗的開發人員,肯定會想到redis和memcached這兩個。並且在BAT裡,redis已經逐漸取代了memcached,成為分散式場景廣泛使用的快取方案。接下來,我們就分析下,redis是如何取代memcached,成為開發者的寵兒的。

儲存型別不同

雖然redis和memcached都是記憶體型資料庫,並且memcached不僅能夠儲存string型別,還能夠儲存圖片、檔案、視訊等格式的檔案。然而對於更多的使用記憶體資料庫做快取以及分散式方案的程式開發者來說,memcached提供的string型別儲存的應用場景非常有限,而儲存圖片視訊的功能又十分雞肋(許多公司的使用者場景是沒這方面需求)。相比之下,redis提供set,hash,list等多種型別的儲存結構,非常適合分散式快取的實現。

資料落盤

memcached 資料不可恢復,雖然大多數人使用快取以及分散式方案都不會要求資料持久化,但是誰也不能保證不出現萬一的情況。一旦發生穩定性問題,memcached掛掉後,資料是不可恢復的,而redis除了支援在配置裡開啟資料落盤(RDB),還能通過aof來找回資料。

Redis支援五種資料型別

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

String(字串)

1.string 是 redis 最基本的型別,你可以理解成與 Memcached 一模一樣的型別,一個 key 對應一個 value。
2.string 型別是二進位制安全的。意思是 redis 的 string 可以包含任何資料。比如jpg圖片或者序列化的物件。
3.string 型別是 Redis 最基本的資料型別,string 型別的值最大能儲存 512MB。
4.set 鍵 值 設定鍵值對 get 鍵 獲取鍵的值

Hash(雜湊)

1.Redis hash 是一個鍵值(key=>value)對集合。

2.Redis hash 是一個 string 型別的 field 和 value 的對映表,hash 特別適合用於儲存物件。

3.Hset:新增hash資料 hget:獲取hash資料 hmget:獲取多個hash資料

List(列表)

1.Redis 列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。
2.lpush:從左邊推入值 lpop:從左邊彈出值 rpush:從右邊推入值 rpop:從右邊彈出值 llen:檢視某個list資料型別的長度

Set(集合)

1.Redis 的 Set 是 string 型別的無序集合。

2.集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是 o(1)。

3.sadd 命令新增一個 string 元素到 key 對應的 set 集合中,成功返回 1,如果元素已經在集合中返回 0。

zset(sorted set:有序集合)

1.Redis zset 和 set 一樣也是string型別元素的集合,且不允許重複的成員。

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

3.zset的成員是唯一的,但分數(score)卻可以重複。

專案部署

1、解壓縮

[[email protected] ~]# tar zxvf redis-5.0.4.tar.gz 

2、設定編輯檔案

[email protected] ~]# cd redis-5.0.4/
[[email protected] redis-5.0.4]# make  進行配置
[[email protected] redis-5.0.4]# make install PREFIX=/usr/local/redis   //更改安裝路徑可以用make PREFIX=安裝路徑 install

3、建立連結

[[email protected] redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/sbin/
[[email protected] redis-5.0.4]# cd utils/
[[email protected] 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/sbin/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/sbin/redis-server
Cli Executable : /usr/sbin/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!
六次回車

4、安裝完成

[[email protected] utils]# netstat -anpt | grep redis  //檢視埠
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      61171/redis-server  
[[email protected] utils]# cd

5、編輯配置檔案

[[email protected] ~]# vi /etc/redis/6379.conf
檢索Protected 在上面修改
 bind 192.168.188.10 172.0.0.1
預設只連線127.0.0.1,允許接收本機地址,繫結地址
[[email protected] ~]# /etc/init.d/redis_6379 stop   //停止Redis服務
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[[email protected] ~]# /etc/init.d/redis_6379 start   //啟動Redis服務
Starting Redis server...
[[email protected] ~]# redis-cli -h 192.168.188.10 -p 6379
  //連線redis資料庫
192.168.188.10:6379> 

部署五種資料型別

String(字串)

[[email protected] ~]# redis-cli -h 192.168.188.10 -p 6379
192.168.188.10:6379> set s 25  //設定s的值為25
OK
192.168.188.10:6379> get s   獲取s值 輸出返回25
"25"
192.168.188.10:6379> type s   //檢視s的狀態型別
string
192.168.188.10:6379> incr s   //自增長+1 25+1
(integer) 26                                   // integer:整數
192.168.188.10:6379> get s      
"26"
192.168.188.10:6379> decr s    //自減 -1  26-1
(integer) 25
192.168.188.10:6379> get s
"25"
192.168.188.10:6379> incrby s 25    //設定增值為25  25+25
(integer) 50
192.168.188.10:6379> decrby s 20    //設定下降值為20 50-20
(integer) 30
192.168.188.10:6379> 

Hash(雜湊)


[[email protected] ~]# redis-cli -h 192.168.188.10 -p 6379
192.168.188.10:6379> hset hash1 song1 s  //設定欄位song1 為s
(integer) 1
192.168.188.10:6379> hset hash1 song1 ss   //設定欄位song1 為ss
(integer) 0
192.168.188.10:6379> hset hash1 song2 ss   //設定song2 為ss
(integer) 1
192.168.188.10:6379> hset hash1 song3 sss  //設定song3為sss
(integer) 1
192.168.188.10:6379> hset hash1 shu1 s1 shu2 s2  設定欄位shu1為s1 shu2 為s2
(integer) 2
192.168.188.10:6379> hget hash1 song1   //獲取song1為ss
"ss"
192.168.188.10:6379> hget hash1 song2   //獲取song2為ss
"ss"
192.168.188.10:6379> hget hash1 song3  //獲取song3為sss
"sss"
192.168.188.10:6379> hmget hash1 shu1 shu2   //獲取shu1為s1 shu2為s2
1) "s1"
2) "s2"
192.168.188.10:6379> hmget hash1 song1 song2 song3 shu1 shu2  獲取song1為ss  song2為ss  song3為sss  shu1為s1 shu2為s2
1) "ss"
2) "ss"
3) "sss"
4) "s1"
5) "s2"
192.168.188.10:6379> 

List(列表)

192.168.188.10:6379> lpush list1 1  //左邊輸入第一位數字,數值為1
(integer) 1
192.168.188.10:6379> lpush list1 2   //左邊輸入第二位數字,數值為2
(integer) 2
192.168.188.10:6379> lpush list1 3  //左邊輸入第三個數字,數值為3
(integer) 3
192.168.188.10:6379> lpush list1 4  //左邊輸入第四個數字,數值為4
(integer) 4
192.168.188.10:6379> lpush list1 5
(integer) 5
192.168.188.10:6379> lpush list1 6  //左邊輸入第六個數字  數值為6
(integer) 6
192.168.188.10:6379> lpop list1  //左邊輸出左邊第一排的數字為6
"6"
192.168.188.10:6379> rpop list1  //右邊輸出右邊排列第一個數字為1
"1"
192.168.188.10:6379> llen list1  //屬豬長度為4
(integer) 4
192.168.188.10:6379> lrange list1 0 4  /列出 list1中的所有數值
1) "5"
2) "4"
3) "3"
4) "2"
192.168.188.10:6379> 

Set(集合)無序集合

192.168.188.10:6379> sadd set1 10  //新增鍵值10 10未存在 新增成功返回1
(integer) 1
192.168.188.10:6379> sadd set1 20
(integer) 1
192.168.188.10:6379> sadd set1 30
(integer) 1
192.168.188.10:6379> sadd set1 30   //新增鍵值30 30已存在  新增失敗 返回0
(integer) 0
192.168.188.10:6379> sadd set1 40
(integer) 1
192.168.188.10:6379> scard set1   //檢視set資料中 鍵值個數為4
(integer) 4
192.168.188.10:6379> sismember set1 50  //判斷50是否在set資料中  不存在輸出0
(integer) 0
192.168.188.10:6379> sismember set1 10  //判斷10 是否存在set資料中 存在輸出1
(integer) 1
192.168.188.10:6379> sismember set1 20
(integer) 1
192.168.188.10:6379> sismember set1 30
(integer) 1
192.168.188.10:6379> sismember set1 40
(integer) 1
192.168.188.10:6379> srem set1 40  //刪除鍵值40  刪除成功返回1
(integer) 1
192.168.188.10:6379> sismember set1 40  //判斷鍵值40是否存在與set資料中,不存在輸出返回0

(integer) 0
192.168.188.10:6379> 

數字列表

(integer) 1
192.168.188.10:6379> sadd set1 56
(integer) 1
192.168.188.10:6379> sadd set1 65
(integer) 1
192.168.188.10:6379> sadd set1 34
(integer) 1
192.168.188.10:6379> sadd set1 26
(integer) 1
192.168.188.10:6379> sadd set1 89
(integer) 1
192.168.188.10:6379> smembers set1  //列出set資料上的所有鍵值,數字自動進行從小到大排序列出
1) "10"
2) "20"
3) "26"
4) "30"
5) "34"
6) "40"
7) "56"
8) "65"
9) "89"
192.168.188.10:6379> 

新增字母進行列表顯示

192.168.188.10:6379> sadd set2 ss  //在set2裡面新增鍵值ss
(integer) 1
192.168.188.10:6379> sadd set2 ssf
(integer) 1
192.168.188.10:6379> sadd set2 song
(integer) 1
192.168.188.10:6379> sadd set2 shu
(integer) 1
192.168.188.10:6379> sadd set2 feng
(integer) 1
192.168.188.10:6379> sadd set2 song123
(integer) 1
192.168.188.10:6379> smembers set2  //列出set2中的所有鍵值   發現字母列出時,未自動進行排序

1) "song"
2) "ss"
3) "ssf"
4) "shu"
5) "song123"
6) "feng"
192.168.188.10:6379> 

zset(無序集合)

192.168.188.10:6379> zadd zset1 1 song1   //新增鍵值,分數為1,成員song1
(integer) 1
192.168.188.10:6379> zadd zset1 4 song2
(integer) 1
192.168.188.10:6379> zadd zset1 1.6 song3
(integer) 1
192.168.188.10:6379> zadd zset1 5.6 song4
(integer) 1
192.168.188.10:6379> zadd zset1 6.7 song5
(integer) 1
192.168.188.10:6379> zadd zset1 7.9 song6
(integer) 1
192.168.188.10:6379> zrangebyscore zset1 0 10   //只顯示成員的排序
1) "song1"
2) "song3"
3) "song2"
4) "song4"
5) "song5"
6) "song6"
192.168.188.10:6379> zrange zset1 0 10 withscores   // 連帶分數進行排序
 1) "song1"
 2) "1"
 3) "song3"
 4) "1.6000000000000001"
 5) "song2"
 6) "4"
 7) "song4"
 8) "5.5999999999999996"
 9) "song5"
10) "6.7000000000000002"
11) "song6"
12) "7.9000000000000004"
192.168.188.10:6379>