Redis介紹及使用

[TOC]java

NOSQL幾種類型

Berkeley

開源是嵌入式數據庫,有極好的併發伸縮,支持事務及嵌套事務,海量數據存儲等重要特性。用於存儲數據方面有極高的價值。,然而該產品的Licence爲GPL,這就意味着它不是在全部狀況下都是免費的,而且通常狀況下不能單獨使用

MongoDB

和Berkeley不一樣的是MongoDB能夠單獨使用,主要用於高併發的論壇博客使用,這些論壇博客主要特徵是併發高、多讀少寫、數據量大、邏輯關係簡單,以及文檔做爲數據主要源。和Berkeley同樣該產品的Licence爲GPL

##Redis 典型的NoSQL數據庫服務器,和BerkeleyDB相比它能夠獨立運行本身的服務器主機。它除了key/vale以外還支持List、set和OrderedSet等數據結構。它是Apache Licence 徹底免費的。它是持久化的,若是服務器宕機也不會致使數據消失。 ##memcache 數據緩存服務器。他們之間最大的區別,memcache知識提供了存儲服務,一旦服務器宕機,以前砸內存中緩存的數據全局消失。一次能夠看出memcache沒有提供任何形式的數據持久化功能。而Redis提供了這樣的功能。linux

#Redis 安裝 ##下載 可以使用wget 註解從網站下載也可在windows下下載完成經過ft'p傳到指定目錄下 wget http://download.redis.io/releases/redis-4.0.1.tar.gz 默認下載到當前目錄。 ##解壓 tar 使用tar -zxf redis-4.0.1.tar.gz 解壓c++

移動(可選) mv

若是你想給redis 安裝到指定目錄下,使用mv命令移動 mv /edis-4.0.1 /service/redis
mv:從哪->到哪redis

編譯 make

由於redis 用的是c語言編寫,因此還須要編譯一下才能安裝。 若是提示找不到yum 要先安裝 gcc-c—++使用 yum install gcc-c++spring

安裝

進入到redis解壓目錄,使用 make install prefix=安裝路徑 安裝完畢。 ##啓動服務端 使用默認配置文件 方法1 進入到解壓路徑目錄下(到bin目錄下) 或者直接指定所有路,不然找不到redis-service 命令的。 想不明白想一想windows執行命令。數據庫

[root@linux bin]# ls
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli redis-server
[root@linux bin]# redis-server

修改配置文件

vim redis.conf port 端口 daemonize yes 配置爲守護進程,後臺啓動 bind 配置指定IP訪問,若是指定全部人訪問 註釋掉bind 而且關閉保護模式 protected-mode 改爲no requirepass 設置密碼 客戶端使用 auth 密碼 才能夠訪問vim

root@linux ~]# redis-cli -p 8989
127.0.0.1:8989> set name lihai
(error) NOAUTH Authentication required.
127.0.0.1:8989> auth lixiaohai
OK
127.0.0.1:8989> set name lixiaohai
OK
127.0.0.1:8989> get name
"lixiaohai"
127.0.0.1:8989>

啓動服務器 並指定配置文件(方法2)

  • 先到解壓包裏面找到redis.confg
[root@linux bin]# cd ../../gz
[root@linux gz]# ls
redis-3.2.8 redis-3.2.8.tar.gz
[root@linux gz]# ls redis-3.2.8
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
  • 從當前目錄複製到你想存放的目錄,建議放到redis/bin下
[root@linux redis-3.2.8]# cp redis.conf ../../redis/bin/
[root@linux redis-3.2.8]# cd ../../redis/bin/
[root@linux bin]# ls
dump.rdb redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
  • 啓動redis 並使用特定的配置文件
[root@linux bin]# redis-server redis.conf

##啓動客服端windows

  • 鏈接本機的6379端口 方法1
cd /java/redis/redis/bin
[root@linux bin]# ls
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli redis-server
[root@linux bin]# redis-cli
127.0.0.1:6379>
  • 鏈接指定主機,指定端口 (/java/redis/redis/bin 個人redis 安裝目錄)
[root@linux bin]# cd /java/redis/redis/bin
[root@linux bin]# ls
dump.rdb redis-check-aof redis-cli redis-sentinel
redis-benchmark redis-check-rdb redis.conf redis-server
[root@linux bin]# redis-cli -h localhost -p 6379
localhost:6379> get name
"xiaohaili"
localhost:6379>

測試數是否可用

127.0.0.1:6379> set name xiaohaili
OK
127.0.0.1:6379> get name
"xiaohaili"
127.0.0.1:6379>

關閉

  • 從客戶端直接使用shutdown
localhost:6379> shutdown
    not connected>
  • 從服務端直接關閉 redis-cli shutdown
[root@linux bin]# cd /java/redis/redis/bin
    [root@linux bin]# ls
    dump.rdb redis-check-aof redis-cli redis-sentinel
    redis-benchmark redis-check-rdb redis.conf redis-server
    [root@linux bin]# redis-cli shutdown
    [root@linux bin]#

查看redis進程

ps aux|grep redis
   [root@linux bin]# ps aux|grep redis
   root 10045 0.0 0.0 112708 972 pts/1 R+ 11:31 0:00 grep --color=auto redis
  [root@linux bin]#

使用redis操做

redis 數據類型

Redis數據就是以key-value形式來存儲的,key只能是字符類型,value能夠是如下五種類型,String,List,Sorted-Sets,Hash

String類型

簡介

字符串類型是Redis最爲基礎的數據存儲類型,它在Redis是二進制安全的,這便意味着該類型能夠接受任何格式的數據,如JPEG圖像格式或者JSON對象格式,在Redis中字符串類型的Value最多能夠容納數據長度是512M

操做

  • set 和get

set key value [Ex seconds] [PX milliseconds] [NX|XX] Ex 秒 PX 毫秒 NX 當key不存在的時候起做用 XX 當key存在時候才起做用 注意:EX PX NX|XX 不能同時使用 ttl key 查看過 期時間數組

127.0.0.1:8989> set xiaokey xiaovalue ex 100
OK
127.0.0.1:8989> get xiaokey
"xiaovalue"
127.0.0.1:8989> ttl xiaokey
(integer) 90
127.0.0.1:8989> ttl xiaokey
(integer) 87
127.0.0.1:8989>
  • select 1-15 切換數據庫,redis默認提供16個數據庫 ,數據庫名用數字表示。索引從0開始 select 1 切換到第二個數據庫
  • exists key 判斷是否存在當前key,若是存在返回1,不存在返回0
  • append 追加 append key value 若是當前key存在追加value,不存在建立key和value
  • strlen 查看值得長度 strlen key
  • flushdb 清空數據庫
  • incr
    incr key 遞增 每次key的vlaue遞增1
  • decr decr key 遞減 每次key遞減1
  • incrby 設置遞增步數 incrby key 5 每次給key值遞增5
  • desrby 每次遞減步數 desrby key 6 每次給key的遞減6 *getset 取到一個key 並把這個key付給一個新值
  • setex setex key seconds value 添加一個key 並指定過時時間
  • setnx setnx key vlaue 只有當一個key不存在的時候執行 *setbit 設置指定位置的值
  • getbit 獲取指定位的bit值
  • mset 一次性能夠設置多個key value mset key1 "hellow word" key2 "no"
  • mget 一次性獲取多個 mget key1 key2
  • msetnx
    一次性獲取多個,可是key不存在的時候才執行(一個key存在全部key都存儲失敗)

List類型

概述

在Redis中,List類型是按照順序插入排序的字符串鏈表。和數據結構中的普通鏈表同樣,咱們能夠再其頭部和尾部添加新的元素。在出讓時,若是該鍵並不存在,Redis姜維該鍵建立一個新的鏈表。與此相比,若是鏈表中全部的元素均被移除,name該鍵也將會從數據庫中刪除。List能夠包含的最大元素數量是4292967295,。
   從插入和刪除的效率視角看,若是咱們在鏈表的兩頭插入或者刪除,這將會是效率很是高的。即便鏈表中已經存儲了百萬數據記錄,該操做能夠在常亮內完成。然而須要說明的是沒若是元素插入或者刪除在做用於鏈表中間,name效率很是低。

操做

  • lpush 建立一個key,而後將參數中的values從左到右插入
lpush mykey a b c d e f
(integer) 6
  • rpush 建立一個key,而後將參數的values 從右開始插入
lpush mykeyright a b c d e f
(integer) 6
127.0.0.1:8989> lrange mykeyright 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
  • rpushx 當一個key已存在的時候從右邊開始增長
lrange mykeyright 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
  • lpushx key存在的時候插入,不存在時候不插入。
lpushx mykey 1
(integer) 9
127.0.0.1:8989> lpushx mykeynotexit 1 2 3
(error) ERR wrong number of arguments for 'lpushx' command
  • lrange 根據key 取出list數據
lrange mykey 0 3
1) "f"
2) "e"
3) "d"
4) "c"

取出全部 -1 表明全部緩存

lrange mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
  • lpop 取出列表裏面第一個元素並刪除(從左開始)
lpop mykey
127.0.0.1:8989> llen mykey
(integer) 7
127.0.0.1:8989> lpop mykey
"123"
127.0.0.1:8989> llen mykey
(integer) 6

rpop 取出列表裏面的第一個元素並刪除(從右到左)

127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "cc"
4) "c"
127.0.0.1:8989> rpop mykey
"c"
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "cc"
127.0.0.1:8989>

rpoppush 從右取出第一個並刪除,放到另一個列表(從左邊放進去)

127.0.0.1:8989> lpush mykey a b 
(integer) 2
127.0.0.1:8989> lpush mykey1 e d
(integer) 2
127.0.0.1:8989> lrange mykey 0 -1
1) "b"
2) "a"
127.0.0.1:8989> lrange mykey1 0 -1
1) "d"
2) "e"
127.0.0.1:8989> rpoplpush mykey mykey1
"a"
127.0.0.1:8989> lrange mykey1 0 -1
1) "a"
2) "d"
3) "e"
  • llen 取出列表長度
llen mykey
(integer) 6
  • lrem 刪除指定個數的關鍵詞
lrem key 個數 關鍵詞
127.0.0.1:8989> lpush mykey a b c d e f a b c d e f a b c d e f
(integer) 18
127.0.0.1:8989> lrem mykey 2 b
(integer) 2
127.0.0.1:8989> lrange mykey 0 -1
 1) "f"
 2) "e"
 3) "d"
 4) "c"
 5) "a"
 6) "f"
 7) "e"
 8) "d"
 9) "c"
10) "a"
11) "f"
12) "e"
13) "d"
14) "c"
15) "b"
16) "a"
  • lindex 取出指定索引的元素
lindex mykey 2
"d"
  • lset 設置指定索引的值
lset mykey 2 ss
OK
127.0.0.1:8989> lindex mykey 2
"ss"
  • ltrim 去除指定位置兩邊的元素
lpush mykey a b c d e f
(integer) 6
127.0.0.1:8989> ltrim mykey 2 4
OK
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
  • linsert 在指定數值先後面插入元素
linsert mykey after d dd  在d後面插入dd
 lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
127.0.0.1:8989> linsert mykey after d dd
(integer) 4
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "c"
4) "b"
 linsert mykey before c cc    在c前面插入cc
127.0.0.1:8989> linsert mykey before c cc
(integer) 5
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "cc"
4) "c"
5) "b"

Set 類型

概述

在Redis中,咱們能夠將Set類型看做爲沒有排序的字符集合(java set同樣)也能夠在該類型的數據值上執行添加,刪除或判斷某一元素是否存在等操做。Set可包含的最大元素數量是4294967295.
 和List類型不一樣的是,Set結合中不能夠出現重複的元素。和List類型相比,Set類型在功能上還存在着一個很是重要的特性,即在服務器端完成多個Sets之間的聚合計算操做,如unions並,intersections交和differences差。因爲這些操做均在服務端完成,所以效率極高,並且也節省了大量的網絡IO開銷。

操做

  • sadd 給set結合裏面插入集合元素,若是已經存在再也不插入
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setkey a d
(integer) 1
127.0.0.1:8989> smembers setkey
1) "d"
2) "a"
3) "c"
4) "b"
  • smembers 查看指定set key裏面的元素
127.0.0.1:8989> smembers setkey
1) "d"
2) "a"
3) "c"
4) "b"
  • sismember 判斷某一個元素是否在set結合裏面
127.0.0.1:8989> sismember setkey a
(integer) 1
127.0.0.1:8989> sismember setkey ggg
(integer) 0

*scard 獲取結合裏面個數

127.0.0.1:8989> scard setkey
(integer) 4
  • srandmember 隨機放回集合中的元素 ,默認返回一個,可指定數量
127.0.0.1:8989> SRANDMEMBER setkey 3
1) "d"
2) "b"
3) "c"
127.0.0.1:8989> SRANDMEMBER setkey 
"d"
  • spop 隨機取出來指定元素並刪除。
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> smembers setkey
1) "a"
2) "c"
3) "b"
127.0.0.1:8989> spop setkey
"a"
127.0.0.1:8989> smembers setkey
1) "c"
2) "b"
127.0.0.1:8989>
  • srem 移除指定元素
127.0.0.1:8989> smembers setkey
1) "c"
2) "b"
127.0.0.1:8989> srem setkey c
(integer) 1
127.0.0.1:8989> smembers setkey
1) "b"
  • smove 把一個key裏面指定的元素移動到另一個數組
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setkey1 d f
(integer) 2
127.0.0.1:8989> smove setkey setkey1 c
(integer) 1
127.0.0.1:8989> SMEMBERS setkey1
1) "d"
2) "c"
3) "f"
  • sdiff 取出多個結合裏面值不一樣的數據
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setky1 d c
(integer) 2
127.0.0.1:8989> sadd setkey2 b c d 
(integer) 3
127.0.0.1:8989> sdiff setkey setkey1 setkey2
1) "a"
  • sdiffstore 對比結合不一樣的值,並放到一個新的結合
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setky1 d c
(integer) 2
127.0.0.1:8989> sadd setkey2 b c d 
(integer) 3
127.0.0.1:8989>SDIFFSTORE setkeysdiff setkey setkey1 setkey2
(integer) 1
127.0.0.1:8989> SMEMBERS setkeysdiff
1) "a"
  • sinter 去多個集合中的交集
127.0.0.1:8989> sadd setkey a b 
(integer) 2
127.0.0.1:8989> sadd setkey1 a c
(integer) 2
127.0.0.1:8989> sadd setkey2 a e
(integer) 2
127.0.0.1:8989> sinter setkey setkey1 setkey2
1) "a"
  • sinterstore 取它們的交集,並把集合存放到一個新的key中
127.0.0.1:8989> sadd setkey a b
(integer) 2
127.0.0.1:8989> sadd setkey1 a c
(integer) 2
127.0.0.1:8989> sadd setkey2 a f
(integer) 2
127.0.0.1:8989> sinterstore newkey setkey setkey1 setkey2
(integer) 1
127.0.0.1:8989> SMEMBERS newkey
1) "a"
  • sunion 取結合中的並集
127.0.0.1:8989> sadd setkey a b
(integer) 2
127.0.0.1:8989> sadd setkey1 a c
(integer) 2
127.0.0.1:8989> sadd setkey2 a f
(integer) 2
SUNION setkey setkey1 setkey2 
1) "a"
2) "f"
3) "c"
4) "b"
  • sunionstore 取集合中的並集並放到一個新的集合中
SUNIONSTORE newkeys setkey setkey1 setkey2
(integer) 4
127.0.0.1:8989> smembers newkeys
1) "a"
2) "f"
3) "c"
4) "b"

Sorted-Sets 類型

概述:

Sorted-Sets和Sets類型極爲類似,也成爲Zset,它們都是字符集合,都不能夠重複,它們之間的區別在於Sorted-Sets中的每個成員都會有一個分數(score)與之關聯,Redis正式經過分數啦爲集合中的成員進行從小到大的排序。然而須要額外指出的是,儘管Sorted-Sets中的成員必須是惟一的。可是分數(score)確實能夠重複的。 在Sorted-Set中 添加、刪除或者更新一個成員都是很是快速的操做。因爲Sorted-Sets總的成員在集合中的位置是有序的,所以,即便是訪問位於集合中的成員也是效率很是高的。事實上,Redis具備的這一特性在不少其餘類型的數據庫中是很難實現的。換句話說,在該點上想要達到和Redis一樣的效率,在其餘數據庫中進行模建是很是困難的。

操做

  • zadd 給zset裏面添加數據,默認排序是由分數從小到大排序
127.0.0.1:8989> zadd zsetkey 8 aa
(integer) 1
127.0.0.1:8989> zadd zsetkey 6 bb
(integer) 1
127.0.0.1:8989> zadd zsetkey 10 cc
(integer) 1
127.0.0.1:8989> zrange zsetkey 0 -1
1) "bb"
2) "aa"
3) "cc"
  • zrange 獲取元素 按索引分值從低到高 查看全部分數
127.0.0.1:8989> zrange zsetkey 0 -1
1) "bb"
2) "aa"
3) "cc"
//查看數值並顯示分數
127.0.0.1:8989> zrange zsetkey 0 -1 withscores
1) "bb"
2) "6"
3) "aa"
4) "8"
5) "cc"
6) "10"
  • zrevrange 按索引分值從高到低
127.0.0.1:8989> zadd setkey 10 aa
(integer) 1
127.0.0.1:8989> zadd setkey 20 bb
(integer) 1
127.0.0.1:8989> zadd setkey 3 cc
(integer) 1
127.0.0.1:8989> zadd setkey 8 dd
(integer) 1
127.0.0.1:8989> ZREVRANGE setkey 0 -1
1) "bb"
2) "aa"
3) "dd"
4) "cc"
  • zrevrangebyscore 按分數從高到低

  • zcard 查看集合中元素的個數

zcard zsetkey
(integer) 3
  • zcount 查看集合中個數,可指定條件
//獲取zsetkey 分數在5-20之間的個數
zcount zsetkey 5 20
(integer) 3
  • zrank 查看某個元素所在集合的索引
zrank zsetkey aa
(integer) 1
  • zscore 根據指定數值查看分數
zscore zsetkey aa
"8"
  • zincrby 根據指定值增長分數值
127.0.0.1:8989> zadd setkey 8 aa
(integer) 1
127.0.0.1:8989> zadd setkey 9 bb
(integer) 1
127.0.0.1:8989> zincrby setkey 10 bb
"19"
127.0.0.1:8989> zrange setkey 0 -1 withscores
1) "aa"
2) "8"
3) "bb"
4) "19"
  • zrangebyscore 根據分數獲取 由低到高獲取
// 獲取分數1-20之間
ZRANGEBYSCORE setkey 1 20
1) "aa"
2) "bb"
// 獲取分數1-20之間 並顯示2條
ZRANGEBYSCORE setkey 1 20 limit 1 2
1) "bb"
2) "cc"
  • ZREVRANGEBYSCORE 根據分數獲取 由高到低獲取
ZREVRANGEBYSCORE setkey 20 8
1) "bb"
2) "aa"
3) "dd"
  • zrevrank 根據數值獲取集合索引 從高到低
zrevrank setkey dd
(integer) 2
  • zremrangebyscore 刪除指定分數元素
// 刪除1-14分的數據 返回刪除個數
127.0.0.1:8989> ZREMRANGEBYSCORE setkey 1 14
(integer) 3
127.0.0.1:8989> zrange setkey 0 -1
1) "dd"
2) "ff"
  • ZREMRANGEBYRANK 根據索引刪除元素 //刪除0到1索引之間的元素 返回刪除個數
ZREMRANGEBYRANK setkey 0 1
(integer) 2

Hash類型

概述:

能夠將Redis中的Hash類型當作具備String key和String value的map容器。因此該類型很是適合存儲於對象的信息。如username、password和Age等。若是Hash中包含不多的字段,那麼該類型也將僅佔用不多的磁盤空間。每個Hash能夠存儲4294967295個鍵值對。

操做

  • hset 新增
127.0.0.1:8989> hset hkey name tom
(integer) 1
127.0.0.1:8989> hset hkey age 10
(integer) 1
127.0.0.1:8989> hset hkey sex '男'
(integer) 1
127.0.0.1:8989> hget hkey name
"tom"
  • hget 根據file獲取值
127.0.0.1:8989> hget hkey name
"tom"
  • hlen 判斷集合裏面的個數
127.0.0.1:8989> hset hkey name tom
(integer) 1
127.0.0.1:8989> hset hkey age 10
(integer) 1
127.0.0.1:8989> hset hkey sex '男'
(integer) 1
127.0.0.1:8989> hlen hkey
(integer) 3
  • hexists 判斷是否存在
hexists hkey name
(integer) 1
  • hdel 在指定key中根據file刪除
hdel hkey name
(integer) 1
  • hsetnx 這指定key中file不存在的時候才生效
127.0.0.1:8989> hset hkey name tom
(integer) 1
127.0.0.1:8989> hset hkey age 10
(integer) 1
127.0.0.1:8989> hsetnx hkey name tom
(integer) 0
  • hincrby 對指定數值進行增加
127.0.0.1:8989> hget hkey age
"30"
127.0.0.1:8989> hincrby hkey age 10
(integer) 40
127.0.0.1:8989> hget hkey age
"40"
127.0.0.1:8989>
  • hmset 一次性設置多個值
hmset hashkey name toms age 10 sex '男'

OK
127.0.0.1:8989> hgetall hashkey
1) "name"
2) "toms"
3) "age"
4) "10"
5) "sex"
6) "\xe7\x94\xb7"
  • hmget 一次性獲取多個值
hmget hashkey name age 
1) "toms"
2) "10"
  • hgetall 獲取全部key和value
hgetall hashkey
1) "name"
2) "toms"
3) "age"
4) "10"
5) "sex"
6) "\xe7\x94\xb7"
  • hkeys 取出全部的key
127.0.0.1:8989> hkeys hashkey
1) "name"
2) "age"
3) "sex"
  • hvals 取出全部的value 127.0.0.1:8989> hvals hashkey
  1. "toms"
  2. "10"
  3. "\xe7\x94\xb7"

其餘命令

keys

keys * 獲取全部的key
也可使用通配符
keys  s*

del

刪除 指定key del key

exists

判斷key是否存在

move

把當前數據庫中的key 移動到指定位置
move zset 2
(integer) 1
127.0.0.1:8989> select 2
OK
127.0.0.1:8989[2]> exists zset

rename 修改key名

127.0.0.1:8989[2]> rename zset newzset
OK

ttl 查看key的過時時間

presist 設置一個key永不過時

expire 設置過時時間

type 查看key的類型

randomkey 隨機獲取一個key

事務

multi 開始事務

exec 提交事務

discard 回滾事務

主從請求

概述

在Redis中配置Master-Slave模式很是簡單,Redis中主從複製的特色和優點

  • 同一個Master能夠同步多個Slaves
  • Slaves一樣能夠接受其餘Slaves的鏈接和同步請求,能夠有效地肥仔Master的同步壓力,因此能夠將Redis的Replicaiton架構視爲圖結構
  • Master Server是以非租塞的方式爲Slaves提供服務,因此在Master-Slave同步期間,客戶端仍然能夠提交查詢或者修改請求 *Slave Server一樣是以非租塞的方式完成數據庫同步,在同步期間,若是有客戶端提交查詢請求,Redis則放回同步以前的數據
  • 爲了分在Master的讀操做壓力,Slave服務器能夠爲客戶端提供只讀的操做服務,寫服務仍然必須有Master完成。即使如此,系統的伸縮性仍是獲得了很大的提升。
  • Master能夠將數據保存操做交給Slaves完成,從而避免在Master中要有獨立的進程來完成此操做。

配置

  • 配置
    • 在從服務器上使用以下命令
      salveof ip 端口號 服務器重啓以後再也不從主服務器上配置,
  • 在conf配置 永久生效 slaveof ip 端口 若是主服務器有密碼,須要指定密碼 masterauth 密碼

持久化

概述

Redis 提供了持久化方式

  • RDB 該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤
  • AOF 該機制將以日誌的形式記錄服務器所處理的每個寫操做。在Redis服務器啓動之初會讀取該配置文件來從新構造數據庫,保證啓動後數據庫的數據是完整的。

RDB

  • Redis database 經過單文件的方式來持久化
  • RDB是默認的持久化方式,默認存儲在啓動redis服務器時所在當前目錄下dump.rdb文件中,通常都會修改存儲在一個固定的目錄下 編輯redis.conf 文件 dbfilename :文件名(默認是dump.rdb) 能夠修改 #dir ./默認位置 dir /路徑 保存咋指定位置。

持久化的機制

  • 在數據庫關閉時會持久化(須要注意的是數據庫宕機時不會生成,數據可能會丟失)
  • 知足特定條件時會持久化 編輯配置文件 save 900 1 //在900秒內,只要有1個key發生變化,就會dump持久化
  • RDB 優缺點 缺點:可能會丟失數據 優勢:效率比較高

AOF

  • Append Only File 經過操做日誌的方式持久化 編輯配置文件 appendonly yes appendfilename 默認appendonly.aof 能夠修更名字 dir 修改目錄 appendfsync
    • always 每次寫操做都會同步 慢 可是安全
    • no 放到內存中,不會持久存儲 快 但不安全 容易丟失
    • everysec 美妙存儲一次。
  • AOF 優缺點 缺點: 效率比較差 優勢:丟失數據量比較少。

在Java中使用redis

  • 使用Jedis Jedis是一個封裝了redis的java客戶端,繼承了redis的一些命令操做,提供了鏈接池管理功能。

  • 使用Spring data Redis 簡稱SDR,在spring應用中讀寫Redis數據庫更簡單

相關文章
相關標籤/搜索