日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java分布式篇4——Redis

發布時間:2025/3/12 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java分布式篇4——Redis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java分布式篇4——Redis

1、互聯網架構的演變歷程

1.1、第一階段

數據訪問量不大,簡單的架構即可搞定!

1.2、第二階段

  • 數據訪問量大,使用緩存技術來緩解數據庫的壓力
  • 不同的業務訪問不同的數據庫

1.3、第三階段

  • 主從讀寫分離。 之前的緩存確實能夠緩解數據庫的壓力,但是寫和讀都集中在一個數據庫上,壓力又來了,一個數據庫負責寫,一個數據庫負責讀,分工合作,讓master(主數據庫)來響應事務性(增刪改)操作,讓slave(從數據庫)來響應非事務性 (查詢)操作,然后再采用主從復制來把master上的事務性操作同步到slave數據庫中

1.4、第四階段

  • mysql集群

2、Redis介紹

Redis 是一種運行速度很快,并發性能很強,并且運行在內存上的NoSql(not only sql)數據庫

redis的瓶頸是內存和帶寬,不是CPU

2.1、適用場景

  • 緩存,毫無疑問這是Redis當今最為人熟知的使用場景。在提升服務器性能方面非常有效;一 些頻繁被訪問的數據,經常被訪問的數據如果放在關系型數據庫,每次查詢的開銷都會很 大,而放在redis中,因為redis 是放在內存中的可以很高效的訪問
  • 排行榜,在使用傳統的關系型數據庫(mysql oracle 等)來做這個事兒,非常的麻煩,而利 用Redis的SortSet(有序集合)數據結構能夠簡單的搞定
  • 計算器/限速器,利用Redis中原子性的自增操作,我們可以統計類似用戶點贊數、用戶訪問 數等,這類操作如果用MySQL,頻繁的讀寫會帶來相當大的壓力;限速器比較典型的使用場 景是限制某個用戶訪問某個API的頻率,常用的有搶購時,防止用戶瘋狂點擊帶來不必要的壓力
  • 好友關系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好 友、共同愛好之類的功能
  • 簡單消息隊列,除了Redis自身的發布/訂閱模式,我們也可以利用List來實現一個隊列機制, 比如:到貨通知、郵件發送之類的需求,不需要高可靠,但是會帶來非常大的DB壓力,完全 可以用List來完成異步解耦
  • Session共享,以jsp為例,默認Session是保存在服務器的文件中,如果是集群服務,同一個 用戶過來可能落在不同機器上,這就會導致用戶頻繁登陸;采用Redis保存Session后,無論 用戶落在那臺機器上都能夠獲取到對應的Session信息

2.2、 Redis/Memcache/MongoDB對比

  • Redis和Memcache都是內存數據庫。不過memcache還可用于緩存其他東西,例如圖片、視頻等
  • memcache 數據結構單一kv,redis 更豐富一些,還提供 list,set, hash 等數據結構的存儲,有 效的減少網絡IO的次數
  • 虛擬內存–Redis當物理內存用完時,可以將一些很久沒用到的value交換到磁盤
  • 存儲數據安全–memcache掛掉后,數據沒了(沒有持久化機制);redis可以定期保存到磁盤(持久化)
  • mongodb本質上還是硬盤數據庫,在復雜查詢時仍然會有大量的資源消耗,而且在處理復雜邏輯 時仍然要不可避免地進行多次查詢,這時就需要redis或Memcache這樣的內存數據庫來作為中間層進行緩存和加速

3、CAP原理

  • C(Consistency):強一致性
    • “all nodes see the same data at the same time”,即更新操作成功并返回客戶端后,所 有節點在同一時間的數據完全一致,這就是分布式的一致性。一致性的問題在并發系統 中不可避免,對于客戶端來說,一致性指的是并發訪問時更新過的數據如何獲取的問 題。從服務端來看,則是更新如何復制分布到整個系統,以保證數據最終一致
  • A(Availability):高可用性
    • 可用性指“Reads and writes always succeed”,即服務一直可用,而且要是正常的響應 時間。好的可用性主要是指系統能夠很好的為用戶服務,不出現用戶操作失敗或者訪問 超時等用戶體驗不好的情況
  • P(Partition tolerance):分區容錯性
    • 即分布式系統在遇到某節點或網絡分區故障時,仍然能夠對外提供滿足一致性或可用性 的服務。 分區容錯性要求能夠使應用雖然是一個分布式系統,而看上去卻好像是在一個可以運轉 正常的整體。比如現在的分布式系統中有某一個或者幾個機器宕掉了,其他剩下的機器 還能夠正常運轉滿足系統需求,對于用戶而言并沒有什么體驗上的影響

3.1、CAP總結

根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三大類

  • CA - 單點集群,滿足一致性,可用性的系統,通常在可擴展性上不太強大
  • CP - 滿足一致性,分區容忍性的系統,通常性能不是特別高
  • AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些

4、下載安裝(linux)

redis官網:https://www.redis.net.cn/

redis5.0.4 百度云:https://pan.baidu.com/s/1BfWTbuSQuBAiRK7CWS73Ow提取碼:2b45

4.1、解壓

tar -zxvf redis-5.0.4.tar.gz

4.2、安裝gcc

yum -y install gcc

4.3、進入redis目錄,編譯

make make install

4.4、redis默認不會使用后臺運行,如果你需要,修改配置文件daemonize=yes

vim redis.conf daemonize yes

4.5、默認安裝到的位置為

/usr/local/bin

4.6、拷貝配置文件,并指定配置文件啟動redis

[root@VM-8-13-centos bin]# cp /usr/local/redis-5.0.4/redis.conf redis.conf [root@VM-8-13-centos bin]# ls busybox-x86_64 redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server [root@VM-8-13-centos bin]# redis-server redis.conf 14566:C 31 Jul 2021 21:54:44.185 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 14566:C 31 Jul 2021 21:54:44.185 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=14566, just started 14566:C 31 Jul 2021 21:54:44.185 # Configuration loaded

4.7、測試

[root@VM-8-13-centos bin]# redis-cli -p 6379 127.0.0.1:6379> ping PONG 127.0.0.1:6379> exit

4.8、關閉

單實例

redis-cli shutdown

多實例

redis-cli -p 6379 shutdown

4.9、常用命令

檢測6379端口是否在監聽

netstat -lntp | grep 6379

檢測后臺進程是否存在

ps -ef|grep redis

5、性能測試

[root@VM-8-13-centos bin]# redis-benchmark ====== PING_INLINE ======# 1.8秒處理了10萬個請求100000 requests completed in 1.37 seconds50 parallel clients3 bytes payloadkeep alive: 199.79% <= 1 milliseconds 99.93% <= 2 milliseconds 100.00% <= 2 milliseconds # 每秒處理的請求 72886.30 requests per second====== PING_BULK ======100000 requests completed in 1.35 seconds50 parallel clients3 bytes payloadkeep alive: 199.66% <= 1 milliseconds 99.83% <= 2 milliseconds 99.85% <= 3 milliseconds 99.94% <= 4 milliseconds 100.00% <= 4 milliseconds 74349.44 requests per second

6、基礎命令

6.1、測試是否連通

127.0.0.1:6379> ping PONG

6.2、存值取值

127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> get k1 "v1"

6.3、數據庫大小

127.0.0.1:6379> dbsize (integer) 5

6.4、數據庫所有值

127.0.0.1:6379> keys * 1) "mylist" 2) "key:__rand_int__" 3) "k2" 4) "k1" 5) "counter:__rand_int__"

6.5、清空數據庫

清空單一數據庫

127.0.0.1:6379> flushdb OK 127.0.0.1:6379> dbsize (integer) 0

清空所有數據庫

127.0.0.1:6379> flushall OK

6.6、存在值

127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k2 (integer) 0

6.7、過期時間

127.0.0.1:6379> expire k1 30 (integer) 1 127.0.0.1:6379> ttl k1 (integer) 19

ttl查看鍵還有多久過期

6.8、判斷數據類型

127.0.0.1:6379> set k1 123 OK 127.0.0.1:6379> get k1 "123" 127.0.0.1:6379> type k1 string

6.9、移除鍵

127.0.0.1:6379> del k1 (integer) 1 127.0.0.1:6379> get k1 (nil)

6.10、移動鍵到其他數據庫

127.0.0.1:6379> set k1 zhangsan OK 127.0.0.1:6379> move k1 1 (integer) 1 127.0.0.1:6379> get k1 (nil) 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> get k1 "zhangsan"

7、五大基本數據類型

7.1、String

7.1.1、存取刪

127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> del k1 (integer) 1

7.1.2、追加

若不存在,則會新建

127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> append k1 zhangsan (integer) 10 127.0.0.1:6379> get k1 "v1zhangsan"

7.1.3、字符串長度

127.0.0.1:6379> strlen k1 (integer) 10

7.1.4、自增自減

127.0.0.1:6379> set k1 1 OK 127.0.0.1:6379> incr k1 (integer) 2 127.0.0.1:6379> get k1 "2" 127.0.0.1:6379> decr k1 (integer) 1 127.0.0.1:6379> get k1 "1" 127.0.0.1:6379> incrby k1 10 (integer) 11 127.0.0.1:6379> get k1 "11" 127.0.0.1:6379> decrby k1 10 (integer) 1 127.0.0.1:6379> get k1 "1"

7.1.5、截取字符串

127.0.0.1:6379> set k1 abhbfhbysydvsd OK 127.0.0.1:6379> getrange k1 0 -1 "abhbfhbysydvsd" 127.0.0.1:6379> getrange k1 0 3 "abhb"

7.1.6、替換值

127.0.0.1:6379> setrange k1 0 HHHH (integer) 14 127.0.0.1:6379> get k1 "HHHHfhbysydvsd"

7.1.7、添加數據并設置生命周期

setex(set with expir)

127.0.0.1:6379> setex k1 30 abc OK 127.0.0.1:6379> ttl k1 (integer) 24

7.1.8、如果不存在才添加

setnx(set if not exist)

127.0.0.1:6379> setnx k2 v2 (integer) 0 127.0.0.1:6379> get k2 "v2"

7.1.9、一次添加多個值

mset/mget/msetnx

127.0.0.1:6379> mset k1 v1 k2 v2 OK 127.0.0.1:6379> keys * 1) "k2" 2) "k1" 127.0.0.1:6379> mget k1 k2 1) "v1" 2) "v2"

7.1.10、先取后存

127.0.0.1:6379> getset k1 vv1 "v1"

7.2、List

允許有重復元素

7.2.1、lpush存(—>)

127.0.0.1:6379> lpush list1 1 2 3 4 5 (integer) 5

7.2.2、查(—>)

127.0.0.1:6379> lrange list1 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1"

7.2.3、rpush存

127.0.0.1:6379> rpush list1 0 (integer) 6 127.0.0.1:6379> lrange list1 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 6) "0"

7.2.4、lpop取(<—)

127.0.0.1:6379> lpop list1 "5" 127.0.0.1:6379> lrange list1 0 -1 1) "4" 2) "3" 3) "2" 4) "1" 5) "0"

7.2.4、rpop取(—>)

127.0.0.1:6379> rpop list1 "0" 127.0.0.1:6379> lrange list1 0 -1 1) "4" 2) "3" 3) "2" 4) "1"

7.2.5、按下標取(<—)

127.0.0.1:6379> lrange list1 0 -1 1) "4" 2) "3" 3) "2" 4) "1" 127.0.0.1:6379> lindex list1 0 "4"

7.2.6、集合長度

127.0.0.1:6379> lrange list1 0 -1 1) "4" 2) "3" 3) "2" 4) "1" 127.0.0.1:6379> llen list1 (integer) 4

7.2.7、刪除指定個數指定的值

127.0.0.1:6379> lpush list2 1 1 2 2 2 3 3 3 4 4 4 (integer) 11 127.0.0.1:6379> lrange list2 0 -11) "4"2) "4"3) "4"4) "3"5) "3"6) "3"7) "2"8) "2"9) "2" 10) "1" 11) "1" 127.0.0.1:6379> lrem list2 2 2 (integer) 2 127.0.0.1:6379> lrange list2 0 -1 1) "4" 2) "4" 3) "4" 4) "3" 5) "3" 6) "3" 7) "2" 8) "1" 9) "1"

7.2.8、修建集合

127.0.0.1:6379> lrange list2 0 -1 1) "4" 2) "4" 3) "4" 4) "3" 5) "3" 6) "3" 7) "2" 8) "1" 9) "1" 127.0.0.1:6379> ltrim list2 1 8 OK 127.0.0.1:6379> lrange list2 0 -1 1) "4" 2) "4" 3) "3" 4) "3" 5) "3" 6) "2" 7) "1" 8) "1"

7.2.9、彈出一個元素加入另外一個list集合

127.0.0.1:6379> lpush list1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> lpush list2 one two three four five (integer) 5 127.0.0.1:6379> rpoplpush list1 list2 "1" 127.0.0.1:6379> lrange list1 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "five" 3) "four" 4) "three" 5) "two" 6) "one"

7.2.10、設置指定索引的值

127.0.0.1:6379> lrange list1 0 -1 1) "555" 2) "4" 3) "3" 4) "2" 127.0.0.1:6379> lset list1 1 444 OK 127.0.0.1:6379> lrange list1 0 -1 1) "555" 2) "444" 3) "3" 4) "2"

7.2.11、在指定值前插入數值

127.0.0.1:6379> lrange list1 0 -1 1) "555" 2) "444" 3) "3" 4) "2" 127.0.0.1:6379> linsert list1 before 555 999 (integer) 5 127.0.0.1:6379> lrange list1 0 -1 1) "999" 2) "555" 3) "444" 4) "3" 5) "2" 127.0.0.1:6379> linsert list1 after 555 999 (integer) 6 127.0.0.1:6379> lrange list1 0 -1 1) "999" 2) "555" 3) "999" 4) "444" 5) "3" 6) "2"

7.3、Set

無序不重復(此無序不是指的set無序,而是指沒有插入順序)

7.3.1、存

127.0.0.1:6379> sadd set1 5 8 6 3 1 9 (integer) 6

7.3.2、取

127.0.0.1:6379> smembers set1 1) "1" 2) "3" 3) "5" 4) "6" 5) "8" 6) "9"

7.3.3、判斷值是否存在

127.0.0.1:6379> smembers set1 1) "1" 2) "3" 3) "5" 4) "6" 5) "8" 6) "9" 127.0.0.1:6379> sismember set1 9 (integer) 1 127.0.0.1:6379> sismember set1 7 (integer) 0

7.3.4、元素個數

127.0.0.1:6379> smembers set1 1) "1" 2) "3" 3) "5" 4) "6" 5) "8" 6) "9" 127.0.0.1:6379> sismember set1 9 (integer) 1 127.0.0.1:6379> scard set1 (integer) 6

7.3.5、移除元素

127.0.0.1:6379> srem set 6 (integer) 0 127.0.0.1:6379> smembers set1 1) "1" 2) "3" 3) "5" 4) "6" 5) "8" 6) "9"

7.3.6、隨機選值

127.0.0.1:6379> smembers set1 1) "1" 2) "3" 3) "5" 4) "6" 5) "8" 6) "9" 127.0.0.1:6379> srandmember set1 "5" 127.0.0.1:6379> srandmember set1 3 1) "6" 2) "3" 3) "9"

7.3.7、隨機移除值

127.0.0.1:6379> spop set1 "3" 127.0.0.1:6379> spop set1 3 1) "1" 2) "9" 3) "6" 127.0.0.1:6379> smembers set1 1) "5" 2) "8"

7.3.8、將指定的值從源set集合移動到目標set集合

127.0.0.1:6379> smembers set1 1) "5" 2) "8" 127.0.0.1:6379> sadd set2 one two (integer) 2 127.0.0.1:6379> smove set1 set2 5 (integer) 1 127.0.0.1:6379> smembers set1 1) "8" 127.0.0.1:6379> smembers set2 1) "5" 2) "one" 3) "two"

7.3.9、set集合1中set集合2沒有的元素

127.0.0.1:6379> sadd set1 1 5 6 9 7 3 (integer) 6 127.0.0.1:6379> sadd set2 3 5 8 4 10 2 (integer) 6 127.0.0.1:6379> sdiff set1 set2 1) "1" 2) "6" 3) "7" 4) "9"

7.3.10、set集合1中set集合2有的元素

127.0.0.1:6379> sadd set1 1 5 6 9 7 3 (integer) 6 127.0.0.1:6379> sadd set2 3 5 8 4 10 2 (integer) 6 127.0.0.1:6379> sinter set1 set2 1) "3" 2) "5"

7.3.11、set集合、set集合2所有的元素

127.0.0.1:6379> sadd set1 1 5 6 9 7 3 (integer) 6 127.0.0.1:6379> sadd set2 3 5 8 4 10 2 (integer) 6 127.0.0.1:6379> sunion set1 set21) "1"2) "2"3) "3"4) "4"5) "5"6) "6"7) "7"8) "8"9) "9" 10) "10"

7.4、Hash

7.4.1、存取

127.0.0.1:6379> hset hash1 k1 v1 (integer) 1 127.0.0.1:6379> hget hash1 k1 "v1" 127.0.0.1:6379> hmset hash1 k2 v2 k3 v3 OK 127.0.0.1:6379> hmget hash1 k1 k2 k3 1) "v1" 2) "v2" 3) "v3"

7.4.2、獲取所有鍵值對

127.0.0.1:6379> hgetall hash1 1) "k1" 2) "v1" 3) "k2" 4) "v2" 5) "k3" 6) "v3"

7.4.3、獲取長度

127.0.0.1:6379> hlen hash1 (integer) 3

7.4.4、判斷鍵是否存在

127.0.0.1:6379> hexists hash1 k1 (integer) 1 127.0.0.1:6379> hexists hash1 k4 (integer)

7.4.5、獲取所有鍵

127.0.0.1:6379> hkeys hash1 1) "k1" 2) "k2" 3) "k3"

7.4.6、獲取所有值

127.0.0.1:6379> hvals hash1 1) "v1" 2) "v2" 3) "v3"

7.4.7、如果不存在設置值

127.0.0.1:6379> hsetnx hash1 k4 v4 (integer) 1

7.5、Zset

有序set

7.5.1、存取

127.0.0.1:6379> zadd zset1 1 zhangsan (integer) 1 127.0.0.1:6379> zadd zset1 3 lisi 2 wangwu 4 zhaoliu (integer) 3 127.0.0.1:6379> zrange zset1 0 -1 1) "zhangsan" 2) "wangwu" 3) "lisi" 4) "zhaoliu" #逆序 127.0.0.1:6379> zrevrange zset1 0 -1 1) "zhaoliu" 2) "lisi" 3) "wangwu" 4) "zhangsan"

7.5.2、范圍

127.0.0.1:6379> zrangebyscore zset1 1 3 1) "zhangsan" 2) "wangwu" 3) "lisi" #取排序依據在1-3之間的值,跳過一個,取一個 127.0.0.1:6379> zrangebyscore zset1 1 3 limit 1 1 1) "wangwu"

7.5.3、刪除

127.0.0.1:6379> zrange zset1 0 -1 1) "zhangsan" 2) "wangwu" 3) "lisi" 4) "zhaoliu" 127.0.0.1:6379> zrem zset1 wangwu (integer) 1 127.0.0.1:6379> zrange zset1 0 -1 1) "zhangsan" 2) "lisi" 3) "zhaoliu"

7.5.4、集合長度

127.0.0.1:6379> zcard zset1 (integer) 3

7.5.5、獲取指定分數間元素的個數

127.0.0.1:6379> zcount zset1 2 3 (integer) 1

7.5.6、獲取指定元素的下標(從上到下)

127.0.0.1:6379> zrange zset1 0 -1 1) "zhangsan" 2) "lisi" 3) "zhaoliu" 127.0.0.1:6379> zrank zset1 lisi (integer) 1 127.0.0.1:6379> zrank zset1 zhangsan (integer) 0 #(從下到上) 127.0.0.1:6379> zrevrank zset1 zhangsan (integer) 2

7.5.7、獲取元素分數

127.0.0.1:6379> zscore zset1 lisi "3"

7.5.8、范圍查找

127.0.0.1:6379> zadd zset1 11 zhangsan 21 lisi 62 wangwu 30 zhaoliu 52 qianmqi (integer) 5 127.0.0.1:6379> zrangebyscore zset1 20 40 1) "lisi" 2) "zhaoliu" 127.0.0.1:6379> zrevrangebyscore zset1 40 20 1) "zhaoliu" 2) "lisi"

8、三大特殊數據類型

geospatial(地理位置)

  • geoadd 鍵 經度 緯度 名稱(添加一個地理位置)
  • geopos 鍵 名稱(獲取地理位置的經緯度)
  • geodist 鍵 名稱1 名稱2(獲取兩地的距離,單位m)
  • geodist 鍵 名稱1 名稱2 km(獲取兩地的距離,單位km)
  • georadius 鍵 經度 緯度 半徑 單位(根據指定經緯度和半徑查詢附近的人)
  • georadius 鍵 經度 緯度 半徑 單位 withdist(根據指定經緯度和半徑查詢附近的人,并攜帶距離)
  • georadius 鍵 經度 緯度 半徑 單位 withcoord(根據指定經緯度和半徑查詢附近的人,并攜帶經緯度)
  • georadius 鍵 經度 緯度 半徑 單位 withcoord count 1(根據指定經緯度和半徑查詢附近指定數量的人)
  • georaduisbymember 鍵 值 距離 單位(尋找指定位置指定距離內的城市)
  • geohash 鍵 值(將2維的經緯度轉換為1維的字符串,若字符串越接近,則距離越近)

hyperloglog(類似zset)

基數

  • pfadd 鍵 值1 值2 … 值n
  • pfcount 鍵
  • pfmerge 新hyperloglog hyperloglog1 hyperloglog2(合并hyperloglog)

Bitmaps(位存儲)

  • setbit 鍵 偏移 值
  • getbit 鍵 偏移
  • bitcount 鍵(統計為1的值)

9、持久化技術

9.1、RDB(redis默認選擇)

Redis DataBase

9.1.1、觸發機制

  • 使用shutdown命令,redis會自動將數據庫備份
  • 數據變更滿足redis.conf里的條件
    • save 900 1 # 900秒內,至少變更1次,會自動備份
    • save 300 10 # 120秒內,至少變更10次,會自動備份
    • save 60 10000 # 60秒內,至少變更10000次,會自動備份
  • save命令

9.1.2、配置詳解

  • stop-writes-on-bgsave-error:
    • yes:當后臺備份時候反生錯誤,前臺停止寫入
    • no:不管是否錯誤,都往里寫數據
  • rdbcompression:對于存儲到磁盤中的快照,是否啟動LZF壓縮算法,一般都會啟動
    • yes:啟動
    • no:不啟動(不想消耗CPU資源,可關閉)
  • rdbchecksum:在存儲快照后,是否啟動CRC64算法進行數據校驗;
    • yes:啟動
    • no:不啟動(不想消耗CPU資源,可關閉)
  • dbfilename:快照備份文件名字
  • dir:快照備份文件保存的目錄,默認為當前目錄

9.1.3、優缺點

優:適合大規模數據恢復,對數據完整性和一致行要求不高

劣:一定間隔備份一次,意外down掉,就失去最后一次快照的所有修改

9.2、AOF

Append Only File(將redis執行過的寫指令全部記錄下來讀操作不記錄,redis在啟動之初會讀取該文件從頭到尾執行一遍,這樣來重新構建數據)

9.2.1、開啟

redis.conf

appendonly yes appendfilename appendonly.aof

9.2.2、觸發機制

根據appendfsync規則

9.2.3、配置詳解

  • appendonly:是否開啟aof
    • yes
    • no
  • appendfilename:appendonly.aof aof備份的文件
  • appendfsync:追加策略
    • always:每次數據變更,就會立即記錄到磁盤,性能較差,但數據完整性好
    • everysec:默認設置,異步操作,每秒記錄,如果一秒內宕機,會有數據丟失
    • no:不追加
  • no-appendfsync-on-rewrite:重寫時是否運用Appendfsync追寫策略;用默認no即可,保證數據安全性
  • auto-aof-rewrite-percentage:如果AOF文件大小已經超過原來的100%,也就是一倍,才重寫壓縮
  • auto-aof-rewrite-min-size:64mb 如果AOF文件已經超過了64mb,才重寫壓縮

9.2.4、優缺點

  • 在最惡劣的情況下,也只丟失不超過2秒的數據,數據完整性比較高
  • 代價太大,會帶來持續的IO

10、事務

一次執行多個命令,是一個命令組,一個事務中,所有命令都會序列化(排隊),不會被插隊

三特性

  • 隔離性:所有命令都會按照順序執行,事務在執行的過程中,不會被其他客戶端送來的命令 打斷
  • 沒有隔離級別:隊列中的命令沒有提交之前都不會被實際的執行,不存在“事務中查詢要看到 事務里的更新,事務外查詢不能看到”這個頭疼的問題
  • 不保證原子性:冤有頭債有主,如果一個命令失敗,但是別的命令可能會執行成功,沒有回滾

10.1、提交事務

127.0.0.1:6379> multi OK 127.0.0.1:6379> set k1 v1 QUEUED 127.0.0.1:6379> set k2 v2 QUEUED 127.0.0.1:6379> set k3 v3 QUEUED 127.0.0.1:6379> get k3 QUEUED 127.0.0.1:6379> set k4 v4 QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) OK 4) "v3" 5) OK

10.2、取消提交

127.0.0.1:6379> multi OK 127.0.0.1:6379> get k1 QUEUED 127.0.0.1:6379> set k2 v222 QUEUED 127.0.0.1:6379> discard OK 127.0.0.1:6379> get k2 "v2"

10.3、命令出錯(編譯出錯)

取消所有執行內容

127.0.0.1:6379> multi OK 127.0.0.1:6379> set1231213 (error) ERR unknown command `set1231213`, with args beginning with: 127.0.0.1:6379> set k1 v111 QUEUED 127.0.0.1:6379> exec (error) EXECABORT Transaction discarded because of previous errors. 127.0.0.1:6379> get k1 "v1"

10.4、命令出錯(運行出錯)

錯誤的不執行,其他照舊執行

127.0.0.1:6379> multi OK 127.0.0.1:6379> set k1 v1 QUEUED 127.0.0.1:6379> incr k1 QUEUED 127.0.0.1:6379> set k2 v2 QUEUED 127.0.0.1:6379> exec 1) OK 2) (error) ERR value is not an integer or out of range 3) OK 127.0.0.1:6379> get k2 "v2" 127.0.0.1:6379> get k1 "v1"

11、監控

  • watch 鍵
  • multi(開啟事務)
  • exec(執行事務)

exec后會解鎖

12、發布訂閱

進程間的一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息

接收端

127.0.0.1:6379> subscribe cctv1 cctv9 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "cctv1" 3) (integer) 1 1) "subscribe" 2) "cctv9" 3) (integer) 2 1) "message" 2) "cctv1" 3) "xinwenlianbo" 1) "message" 2) "cctv9" 3) "xiongchumo"

發送端

127.0.0.1:6379> publish cctv1 xinwenlianbo (integer) 1 127.0.0.1:6379> publish cctv9 xiongchumo (integer) 1

13、主從復制的配置

13.1、修改配置文件

bind 0.0.0.0

13.2、配置主從復制

小弟可以選擇誰是大哥,但大哥沒有權利去選擇小弟

slaveof 81.70.1.65 6379 127.0.0.1:6379> info replication # Replication role:master connected_slaves:0 master_replid:30d46f6b4ef072f1feff943f6ed9cba15bdf6546 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6379> slaveof 81.70.1.65 6379 OK 127.0.0.1:6379> info replication # Replication role:slave master_host:81.70.1.65 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:1932 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:2357d52fcf39762c8d1ce3005b3e435e8efe1a69 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1932 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1919 repl_backlog_histlen:14

13.3、數據同步問題

只要跟隨后,數據立即同步(不論是跟隨前的數據還是跟隨后的數據都會同步)

13.4、讀寫問題

跟隨后,主機負責寫,從機負責讀(從機無法寫數據)

13.5、主從問題

  • 主機關閉,從機仍是從機(會顯示主機已經掉線,master_link_status:down)
  • 主機再次啟動后從,機仍是從機(會顯示主機已經上線,master_link_status:up)
  • 從機關閉后,對于主機而言僅僅是少了一個從機
  • 從機再次重啟,身份轉變為master,不在在原來的集群,需重新配置

13.6、主從復制原理

  • 全量復制:Slave初始化階段,這時Slave需要將Master上的所有數據都復制一份slave接收到數據 文件后,存盤,并加載到內存中;(步驟1234)
  • 增量復制:Slave初始化后,開始正常工作時主服務器發生的寫操作同步到從服務器的過程;(步驟56)
  • Redis主從同步策略:主從剛剛連接的時候,進行全量同步;全同步結束后,進行增量同步
  • 如果有需要,slave 在任何時候都可以發起全量同步
  • redis 策略是,無論如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步

13.7、繼承

一個主機理論上可以多個從機,但是這樣的話,這個主機會很累,可以使用java面向對象繼承中的傳遞性來解決這個問題,減輕主機的負擔

13.8、重選主機

當1個主機掛掉了,從2個從機中再次選1個主機,1為master,2和3為slave,當1掛掉后,2篡權為master,3跟2

slaveof no one

13.9、哨兵模式

自動版重選主機

有個哨兵一直在巡邏,突然發現!!!!!老大掛了,小弟們會自動投票,從眾小弟中選出新的老大

cp /usr/local/redis-5.0.4/sentinel.conf sentinel.conf

修改配置項(僅在主機配置即可)

daemonize yes # 服務器名 服務器ip sentinel monitor redis3 101.34.116.9 6379 1

啟動哨兵

[root@VM-16-14-centos bin]# redis-sentinel sentinel.conf 24628:X 01 Aug 2021 23:34:12.366 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 24628:X 01 Aug 2021 23:34:12.366 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=24628, just started 24628:X 01 Aug 2021 23:34:12.366 # Configuration loaded

自己斷掉主redis,查看從redis的狀態,自動轉為master表示成功

主機重新啟動后,哨兵發現主機連接后,主機會變成小弟,重新加入集群

缺點

  • 所有的寫操作都是在master上完成的,然后再同步到slave上,兩臺機器之間通信會有延遲
  • 當系統很繁忙的時候,延遲問題會加重
  • slave機器數量增加,問題也會加重

13.10、多哨兵模式

待補

14、Redis.conf詳細配置

# 注意單位: 當需要配置內存大小時, 可能需要指定像1k,4M,5GB,等常見格式 # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # redis是對單位大小寫不敏感的 1GB 1Gb 1gB 是相同的 ################################## INCLUDES 包含文件相關 ################################### # 可以在這里包含一個或多個其他的配置文件,如果你有一個適用于所有Redis服務器的標準配置模板 # 但也需要一些每個服務器自定義的設置,這個功能將很有用。被包含的配置文件也可以包含其他配置文件 # # 注意“inclue”選項不能被admin或Redis哨兵的"CONFIG REWRITE"命令重寫 # 因為Redis總是使用最后解析的配置行最為配置指令的值, 你最好在這個文件的開頭配置includes來避免它在運行時重寫配置 # 如果相反你想用includes的配置覆蓋原來的配置,你最好在該文件的最后使用include # # include /path/to/local.conf # include /path/to/other.conf ################################ GENERAL 綜合配置 ##################################### # 默認Rdis不會作為守護進程運行。如果需要的話配置成'yes' # 注意配置成守護進程后Redis會將進程號寫入文件/var/run/redis.pid daemonize no # 當以守護進程方式運行時,默認Redis會把進程ID寫到 /var/run/redis.pid,你可以在這里修改路徑 pidfile /var/run/redis.pid # 接受連接的特定端口,默認是6379 # 如果端口設置為0,Redis就不會監聽TCP套接字。 port 6379 # TCP listen backlog # server在與客戶端建立tcp連接的過程中,SYN隊列的大小 # 在高并發環境下你需要一個高backlog值來避免慢客戶端連接問題。注意Linux內核默默地將這個值減小 # 到/proc/sys/net/core/somaxconn的值,所以需要確認增大somaxconn和tcp_max_syn_backlog # 兩個值來達到想要的效果 tcp-backlog 511 # 默認Redis監聽服務器上所有可用網絡接口的連接。可以用"bind"配置指令跟一個或多個ip地址來實現 # 監聽一個或多個網絡接口 # # 示例: # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 # 指定用來監聽Unix套套接字的路徑。沒有默認值, 所以在沒有指定的情況下Redis不會監聽Unix套接字 # # unixsocket /tmp/redis.sock # unixsocketperm 755 # 一個客戶端空閑多少秒后關閉連接(0代表禁用,永不關閉) timeout 0 # TCP keepalive. # # 如果非零,則設置SO_KEEPALIVE選項來向空閑連接的客戶端發送ACK,由于以下兩個原因這是很有用的: # # 1)能夠檢測無響應的對端 # 2)讓該連接中間的網絡設備知道這個連接還存活 # # 在Linux上,這個指定的值(單位:秒)就是發送ACK的時間間隔。 # 注意:要關閉這個連接需要兩倍的這個時間值。 # 在其他內核上這個時間間隔由內核配置決定 # # 這個選項的一個合理值是60秒 tcp-keepalive 0 # 指定服務器調試等級 # 可能值: # debug (大量信息,對開發/測試有用) # verbose (很多精簡的有用信息,但是不像debug等級那么多) # notice (適量的信息,基本上是你生產環境中需要的) # warning (只有很重要/嚴重的信息會記錄下來) loglevel notice # 指明日志文件名。也可以使用"stdout"來強制讓Redis把日志信息寫到標準輸出上。 # 注意:如果Redis以守護進程方式運行,而設置日志顯示到標準輸出的話,日志會發送到/dev/null logfile "" # 要使用系統日志記錄器,只要設置 "syslog-enabled" 為 "yes" 就可以了。 # 然后根據需要設置其他一些syslog參數就可以了。 # syslog-enabled no # 指明syslog身份 # syslog-ident redis # 指明syslog的設備。必須是user或LOCAL0 ~ LOCAL7之一。 # syslog-facility local0 # 設置數據庫個數。默認數據庫是 DB 0, # 可以通過select <dbid> (0 <= dbid <= 'databases' - 1 )來為每個連接使用不同的數據庫 databases 16 ################################ SNAPSHOTTING 快照,持久化操作配置 ################################ # 把數據庫存到磁盤上: # # save <seconds> <changes> # # 會在指定秒數和數據變化次數之后把數據庫寫到磁盤上。 # # 下面的例子將會進行把數據寫入磁盤的操作: # 900秒(15分鐘)之后,且至少1次變更 # 300秒(5分鐘)之后,且至少10次變更 # 60秒之后,且至少10000次變更 # # 注意:你要想不寫磁盤的話就把所有 "save" 設置注釋掉就行了。 # # 通過添加一條帶空字符串參數的save指令也能移除之前所有配置的save指令 # 像下面的例子: # save "" save 900 1 save 300 10 save 60 10000 # 默認如果開啟RDB快照(至少一條save指令)并且最新的后臺保存失敗,Redis將會停止接受寫操作 # 這將使用戶知道數據沒有正確的持久化到硬盤,否則可能沒人注意到并且造成一些災難。 # # 如果后臺保存進程能重新開始工作,Redis將自動允許寫操作 # # 然而如果你已經部署了適當的Redis服務器和持久化的監控,你可能想關掉這個功能以便于即使是 # 硬盤,權限等出問題了Redis也能夠像平時一樣正常工作, stop-writes-on-bgsave-error yes # 當導出到 .rdb 數據庫時是否用LZF壓縮字符串對象? # 默認設置為 "yes",因為幾乎在任何情況下它都是不錯的。 # 如果你想節省CPU的話你可以把這個設置為 "no",但是如果你有可壓縮的key和value的話, # 那數據文件就會更大了。 rdbcompression yes # 因為版本5的RDB有一個CRC64算法的校驗和放在了文件的最后。這將使文件格式更加可靠但在 # 生產和加載RDB文件時,這有一個性能消耗(大約10%),所以你可以關掉它來獲取最好的性能。 # # 生成的關閉校驗的RDB文件有一個0的校驗和,它將告訴加載代碼跳過檢查 rdbchecksum yes # 持久化數據庫的文件名 dbfilename dump.rdb # 工作目錄 # # 數據庫會寫到這個目錄下,文件名就是上面的 "dbfilename" 的值。 # # 累加文件也放這里。 # # 注意你這里指定的必須是目錄,不是文件名。 dir ./ ################################# REPLICATION 主從復制的配置 ################################# # 主從同步。通過 slaveof 指令來實現Redis實例的備份。 # 注意,這里是本地從遠端復制數據。也就是說,本地可以有不同的數據庫文件、綁定不同的IP、監聽 # 不同的端口。 # # slaveof <masterip> <masterport> # 如果master設置了密碼保護(通過 "requirepass" 選項來配置),那么slave在開始同步之前必須 # 進行身份驗證,否則它的同步請求會被拒絕。 # # masterauth <master-password> # 當一個slave失去和master的連接,或者同步正在進行中,slave的行為有兩種可能: # # 1) 如果 slave-serve-stale-data 設置為 "yes" (默認值),slave會繼續響應客戶端請求, # 可能是正常數據,也可能是還沒獲得值的空數據。 # 2) 如果 slave-serve-stale-data 設置為 "no",slave會回復"正在從master同步 # (SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。 # slave-serve-stale-data yes # 你可以配置salve實例是否接受寫操作。可寫的slave實例可能對存儲臨時數據比較有用(因為寫入 salve # 的數據在同master同步之后將很容被刪除),但是如果客戶端由于配置錯誤在寫入時也可能產生一些問題。 # # 從Redis2.6默認所有的slave為只讀 # # 注意:只讀的slave不是為了暴露給互聯網上不可信的客戶端而設計的。它只是一個防止實例誤用的保護層。 # 一個只讀的slave支持所有的管理命令比如config,debug等。為了限制你可以用'renamecommand'來 # 隱藏所有的管理和危險命令來增強只讀slave的安全性 slave-read-only yes # slave根據指定的時間間隔向master發送ping請求。 # 時間間隔可以通過 repl_ping_slave_period 來設置。 # 默認10秒。 # # repl-ping-slave-period 10 # 以下選項設置同步的超時時間 # # 1)slave在與master SYNC期間有大量數據傳輸,造成超時 # 2)在slave角度,master超時,包括數據、ping等 # 3)在master角度,slave超時,當master發送REPLCONF ACK pings # # 確保這個值大于指定的repl-ping-slave-period,否則在主從間流量不高時每次都會檢測到超時 # # repl-timeout 60 # 是否在slave套接字發送SYNC之后禁用 TCP_NODELAY ? # # 如果你選擇“yes”Redis將使用更少的TCP包和帶寬來向slaves發送數據。但是這將使數據傳輸到 slave # 上有延遲,Linux內核的默認配置會達到40毫秒 # # 如果你選擇了 "no" 數據傳輸到salve的延遲將會減少但要使用更多的帶寬 # # 默認我們會為低延遲做優化,但高流量情況或主從之間的跳數過多時,把這個選項設置為“yes” # 是個不錯的選擇。 repl-disable-tcp-nodelay no # 設置數據備份的backlog大小。backlog是一個slave在一段時間內斷開連接時記錄salve數據的緩 沖, # 所以一個slave在重新連接時,不必要全量的同步,而是一個增量同步就足夠了,將在斷開連接的這段 # 時間內slave丟失的部分數據傳送給它。 # # 同步的backlog越大,slave能夠進行增量同步并且允許斷開連接的時間就越長。 # # backlog只分配一次并且至少需要一個slave連接 # # repl-backlog-size 1mb # 當master在一段時間內不再與任何slave連接,backlog將會釋放。以下選項配置了從最后一個 # slave斷開開始計時多少秒后,backlog緩沖將會釋放。 # # 0表示永不釋放backlog # # repl-backlog-ttl 3600 # slave的優先級是一個整數展示在Redis的Info輸出中。如果master不再正常工作了,哨兵將用它來 # 選擇一個slave提升=升為master。 # # 優先級數字小的salve會優先考慮提升為master,所以例如有三個slave優先級分別為10,100,25, # 哨兵將挑選優先級最小數字為10的slave。 # # 0作為一個特殊的優先級,標識這個slave不能作為master,所以一個優先級為0的slave永遠不會被 # 哨兵挑選提升為master # # 默認優先級為100 slave-priority 100 # 如果master少于N個延時小于等于M秒的已連接slave,就可以停止接收寫操作。 # # N個slave需要是“oneline”狀態 # # 延時是以秒為單位,并且必須小于等于指定值,是從最后一個從slave接收到的ping(通常每秒發送) # 開始計數。 # # This option does not GUARANTEES that N replicas will accept the write, but # will limit the window of exposure for lost writes in case not enough slaves # are available, to the specified number of seconds. # # 例如至少需要3個延時小于等于10秒的slave用下面的指令: # # min-slaves-to-write 3 # min-slaves-max-lag 10 # # 兩者之一設置為0將禁用這個功能。 # # 默認 min-slaves-to-write 值是0(該功能禁用)并且 min-slaves-max-lag 值是10。 ################################## SECURITY 安全相關配置 ################################### # 要求客戶端在處理任何命令時都要驗證身份和密碼。 # 這個功能在有你不信任的其它客戶端能夠訪問redis服務器的環境里非常有用。 # # 為了向后兼容的話這段應該注釋掉。而且大多數人不需要身份驗證(例如:它們運行在自己的服務器上) # # 警告:因為Redis太快了,所以外面的人可以嘗試每秒150k的密碼來試圖破解密碼。這意味著你需要 # 一個高強度的密碼,否則破解太容易了。 # # requirepass foobared # 命令重命名 # # 在共享環境下,可以為危險命令改變名字。比如,你可以為 CONFIG 改個其他不太容易猜到的名字, # 這樣內部的工具仍然可以使用,而普通的客戶端將不行。 # # 例如: # # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # # 也可以通過改名為空字符串來完全禁用一個命令 # # rename-command CONFIG "" # # 請注意:改變命令名字被記錄到AOF文件或被傳送到從服務器可能產生問題。 ################################### LIMITS 范圍配置 #################################### # 設置最多同時連接的客戶端數量。默認這個限制是10000個客戶端,然而如果Redis服務器不能配置 # 處理文件的限制數來滿足指定的值,那么最大的客戶端連接數就被設置成當前文件限制數減32(因 # 為Redis服務器保留了一些文件描述符作為內部使用) # # 一旦達到這個限制,Redis會關閉所有新連接并發送錯誤'max number of clients reached' # # maxclients 10000 # 不要用比設置的上限更多的內存。一旦內存使用達到上限,Redis會根據選定的回收策略(參見: # maxmemmory-policy)刪除key # # 如果因為刪除策略Redis無法刪除key,或者策略設置為 "noeviction",Redis會回復需要更 # 多內存的錯誤信息給命令。例如,SET,LPUSH等等,但是會繼續響應像Get這樣的只讀命令。 # # 在使用Redis作為LRU緩存,或者為實例設置了硬性內存限制的時候(使用 "noeviction" 策略) # 的時候,這個選項通常事很有用的。 # # 警告:當有多個slave連上達到內存上限的實例時,master為同步slave的輸出緩沖區所需 # 內存不計算在使用內存中。這樣當驅逐key時,就不會因網絡問題 / 重新同步事件觸發驅逐key # 的循環,反過來slaves的輸出緩沖區充滿了key被驅逐的DEL命令,這將觸發刪除更多的key, # 直到這個數據庫完全被清空為止 # # 總之...如果你需要附加多個slave,建議你設置一個稍小maxmemory限制,這樣系統就會有空閑 # 的內存作為slave的輸出緩存區(但是如果最大內存策略設置為"noeviction"的話就沒必要了) # # maxmemory <bytes> # 最大內存策略:如果達到內存限制了,Redis如何選擇刪除key。你可以在下面五個行為里選: # # volatile-lru -> 根據LRU算法生成的過期時間來刪除。 # allkeys-lru -> 根據LRU算法刪除任何key。 # volatile-random -> 根據過期設置來隨機刪除key。 # allkeys->random -> 無差別隨機刪。 # volatile-ttl -> 根據最近過期時間來刪除(輔以TTL) # noeviction -> 誰也不刪,直接在寫操作時返回錯誤。 # # 注意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。 # # 目前為止涉及的命令:set setnx setex append # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby # getset mset msetnx exec sort # # 默認值如下: # # maxmemory-policy volatile-lru # LRU和最小TTL算法的實現都不是很精確,但是很接近(為了省內存),所以你可以用樣本量做檢測。 # 例如:默認Redis會檢查3個key然后取最舊的那個,你可以通過下面的配置指令來設置樣本的個數。 # # maxmemory-samples 3 ############################## APPEND ONLY MODE AOF模式配置 ############################### # 默認情況下,Redis是異步的把數據導出到磁盤上。這種模式在很多應用里已經足夠好,但Redis進程 # 出問題或斷電時可能造成一段時間的寫操作丟失(這取決于配置的save指令)。 # # AOF是一種提供了更可靠的替代持久化模式,例如使用默認的數據寫入文件策略(參見后面的配置) # 在遇到像服務器斷電或單寫情況下Redis自身進程出問題但操作系統仍正常運行等突發事件時,Redis # 能只丟失1秒的寫操作。 # # AOF和RDB持久化能同時啟動并且不會有問題。 # 如果AOF開啟,那么在啟動時Redis將加載AOF文件,它更能保證數據的可靠性。 # # 請查看 http://redis.io/topics/persistence 來獲取更多信息. appendonly no # 純累加文件名字(默認:"appendonly.aof") appendfilename "appendonly.aof" # fsync() 系統調用告訴操作系統把數據寫到磁盤上,而不是等更多的數據進入輸出緩沖區。 # 有些操作系統會真的把數據馬上刷到磁盤上;有些則會盡快去嘗試這么做。 # # Redis支持三種不同的模式: # # no:不要立刻刷,只有在操作系統需要刷的時候再刷。比較快。 # always:每次寫操作都立刻寫入到aof文件。慢,但是最安全。 # everysec:每秒寫一次。折中方案。 # # 默認的 "everysec" 通常來說能在速度和數據安全性之間取得比較好的平衡。根據你的理解來 # 決定,如果你能放寬該配置為"no" 來獲取更好的性能(但如果你能忍受一些數據丟失,可以考慮使用 # 默認的快照持久化模式),或者相反,用“always”會比較慢但比everysec要更安全。 # # 請查看下面的文章來獲取更多的細節 # http://antirez.com/post/redis-persistence-demystified.html # # 如果不能確定,就用 "everysec" # appendfsync always appendfsync everysec # appendfsync no # 如果AOF的同步策略設置成 "always" 或者 "everysec",并且后臺的存儲進程(后臺存儲或寫入AOF # 日志)會產生很多磁盤I/O開銷。某些Linux的配置下會使Redis因為 fsync()系統調用而阻塞很久。 # 注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們同步的write(2)調用。 # # 為了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止fsync()。 # # 這就意味著如果有子進程在進行保存操作,那么Redis就處于"不可同步"的狀態。 # 這實際上是說,在最差的情況下可能會丟掉30秒鐘的日志數據。(默認Linux設定) # # 如果把這個設置成"yes"帶來了延遲問題,就保持"no",這是保存持久數據的最安全的方式。 no-appendfsync-on-rewrite no # 自動重寫AOF文件 # 如果AOF日志文件增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日志文件。 # # 工作原理:Redis記住上次重寫時AOF文件的大小(如果重啟后還沒有寫操作,就直接用啟動時的AOF大 小) # # 這個基準大小和當前大小做比較。如果當前大小超過指定比例,就會觸發重寫操作。你還需要指定被重寫 # 日志的最小尺寸,這樣避免了達到指定百分比但尺寸仍然很小的情況還要重寫。 # # 指定百分比為0會禁用AOF自動重寫特性。 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb ################################ LUA SCRIPTING ############################### # 設置lua腳本的最大運行時間,單位為毫秒,redis會記個log,然后返回error。當一個腳本超過了最大時限。 # 只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。 lua-time-limit 5000 ################################## SLOW LOG ################################### # 是redis用于記錄慢查詢執行時間的日志系統。由于slowlog只保存在內存中,因此slowlog的效率很高,完全不用擔心會影響到redis的性能。 # 只有query執行時間大于slowlog-log-slower-than的才會定義成慢查詢,才會被slowlog進行記錄。 # 單位是微妙 slowlog-log-slower-than 10000 # slowlog-max-len表示慢查詢最大的條數 slowlog-max-len 128 ############################ EVENT NOTIFICATION ############################## # 這個功能可以讓客戶端通過訂閱給定的頻道或者模式,來獲知數據庫中鍵的變化,以及數據庫中命令的執行情況,所以在默認配置下,該功能處于關閉狀態。 # notify-keyspace-events 的參數可以是以下字符的任意組合,它指定了服務器該發送哪些類型的通知: # K 鍵空間通知,所有通知以 __keyspace@__ 為前綴 # E 鍵事件通知,所有通知以 __keyevent@__ 為前綴 # g DEL 、 EXPIRE 、 RENAME 等類型無關的通用命令的通知 # $ 字符串命令的通知 # l 列表命令的通知 # s 集合命令的通知 # h 哈希命令的通知 # z 有序集合命令的通知 # x 過期事件:每當有過期鍵被刪除時發送 # e 驅逐(evict)事件:每當有鍵因為 maxmemory 政策而被刪除時發送 # A 參數 g$lshzxe 的別名 # 輸入的參數中至少要有一個 K 或者 E,否則的話,不管其余的參數是什么,都不會有任何 通知被分發。詳細使用可以參考http://redis.io/topics/notifications notify-keyspace-events "" ############################### ADVANCED CONFIG ############################### # 單位字節:數據量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplistentries用hash hash-max-ziplist-entries 512 # value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash。 hash-max-ziplist-value 64 # 數據量小于等于list-max-ziplist-entries用ziplist(壓縮列表),大于list-max-ziplistentries用list。 list-max-ziplist-entries 512 # value大小小于等于list-max-ziplist-value的用ziplist,大于list-max-ziplist-value用list。 list-max-ziplist-value 64 # 數據量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set。 set-max-intset-entries 512 # 數據量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset。 zset-max-ziplist-entries 128 # value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset。 zset-max-ziplist-value 64 # 基數統計的算法 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基數 # 設置HyeperLogLog的字節數限制,這個值通常在0~15000之間,默認為3000,基本不超過16000。 # value大小小于等于hll-sparse-max-bytes使用稀疏數據結構(sparse),大于hll-sparse-maxbytes使用稠密的數據結構(dense)。 # 一個比16000大的value是幾乎沒用的,建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設置到10000左右。 hll-sparse-max-bytes 3000 # 重置hash。 Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用。 # 當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。 # 如果沒有這么嚴格的實時性要求,可以設置為yes,以便能夠盡可能快的釋放內存。 activerehashing yes # 對于Redis服務器的輸出(也就是命令的返回值)來說,其大小通常是不可控制的。有可能一個簡單的命令,能夠產生體積龐大的返回數據。 # 另外也有可能因為執行了太多命令,導致產生返回數據的速率超過了往客戶端發送的速率,這是也會導致服務器堆積大量消息, # 從而導致輸出緩沖區越來越大,占用過多內存,甚至導致系統崩潰。 # 用于強制斷開出于某些原因而無法以足夠快的速度從服務器讀取數據的客戶端的連接。 # 對于normal client,包括monitor。第一個0表示取消hard limit,第二個0和第三個0表示取消 # soft limit,normal client默認取消限制,因為如果沒有尋問,他們是不會接收數據的。 client-output-buffer-limit normal 0 0 0 #對于slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那么服務器就會立即斷開客戶端連接。 client-output-buffer-limit slave 256mb 64mb 60 #對于pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那么服務器就會立即斷開客戶端連接。 client-output-buffer-limit pubsub 32mb 8mb 60 # redis執行任務的頻率 hz 10 # aof rewrite過程中,是否采取增量"文件同步"策略,默認為"yes",而且必須為yes. # rewrite過程中,每32M數據進行一次文件同步,這樣可以減少"aof大文件"寫入對磁盤的操作次數. aof-rewrite-incremental-fsync yes

15、Jedis

15.1、redis服務器準備

  • 服務器配置安全組
  • redis允許所有ip訪問(注釋bind 127.0.0.1)
  • 關閉保護模式(protected-mode no)

附上linux防火墻命令

  • systemctl start firewalld:啟動
  • systemctl status firewalld:查看狀態
  • systemctl disable firewalld:禁止開機啟動
  • systemctl stop firewalld:停止運行
  • firewall-cmd --zone=public --list-ports:查看所有打開的端口
  • firewall-cmd --reload更新防火墻規則
  • 開啟端口:firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent永久生效,沒有此參數重啟后失效)

15.2、導入依賴

<dependencies><!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency> </dependencies>

15.3、測試

public class RedisTest {@Testpublic void ping(){Jedis jedis=new Jedis("106.54.85.216",6379);System.out.println(jedis.ping());} }

15.4、API

同linux操作命令,示例待補

15.5、事務

@Test public void transaction(){Jedis jedis=new Jedis("106.54.85.216",6379);jedis.set("in","5000");jedis.set("out","1000");try {Transaction multi = jedis.multi();multi.decrBy("in",500);multi.incrBy("out",500);multi.exec();} catch (Exception e) {e.printStackTrace();}System.out.println(jedis.get("in"));System.out.println(jedis.get("out")); }

16、JedisPool

16.1、導入依賴

<dependencies><!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/commons-pool/commons-pool --><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency> </dependencies>

16.2、JedisPoolUtil

public class JedisPoolUtil {private volatile static JedisPool jedisPool=null;private static JedisPool createJedisPool(){if (jedisPool==null){synchronized (JedisPoolUtil.class){JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();// 連接池中的最大連接數jedisPoolConfig.setMaxTotal(100);// 連接池允許的最大空閑連接數jedisPoolConfig.setMaxIdle(30);// 當連接池連接用盡后,調用者的最大等待時間(單位為毫秒)jedisPoolConfig.setMaxWaitMillis(30*1000);// 向連接池借用連接時是否做連接有效性檢測(業務量很大時候建議設置為false,減少一次ping的開銷)jedisPoolConfig.setTestOnBorrow(true);jedisPool=new JedisPool(jedisPoolConfig,"106.54.85.216",6379);}}return jedisPool;}public static Jedis createJedis(){if (jedisPool==null){return createJedisPool().getResource();}return jedisPool.getResource();} }

總結

以上是生活随笔為你收集整理的Java分布式篇4——Redis的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

精品久久久久久久久中文字幕 | 欧美性视频网站 | 欧美日性视频 | 久久综合国产伦精品免费 | 少妇bbbb| 日韩二区在线观看 | 欧美精品在线一区 | 97精品在线观看 | 毛片激情永久免费 | 日本特黄一级片 | 热久久免费视频精品 | 亚洲第一av在线播放 | 亚洲成人av电影在线 | 久久伦理电影 | 在线久热| 日本黄色大片免费 | 2020天天干夜夜爽 | 久久久久久久久久久久亚洲 | 91观看视频 | 欧美黄色高清 | 久久在现视频 | 视频在线观看国产 | 成年人电影免费在线观看 | 日韩视频免费 | 精品美女久久 | 久久激情视频网 | 国产精品视频免费在线观看 | 精品中文字幕在线观看 | 中文字幕黄色网址 | 久久久久久综合 | 深爱五月激情网 | 久久国产精品精品国产色婷婷 | 国产在线观看h | 国产精品久久久久免费a∨ 欧美一级性生活片 | 日本久久综合视频 | 婷婷久久五月天 | 人人玩人人添人人澡超碰 | 国产精品久久网站 | 毛片激情永久免费 | 国内精品久久久久久久久久久久 | 亚洲艳情 | 九色精品免费永久在线 | av怡红院| 日本午夜免费福利视频 | 一级理论片在线观看 | 亚洲伦理一区二区 | 中文伊人 | 成人小视频在线 | av高清一区 | 91精品夜夜| 国产 色 | 91免费在线播放 | 亚洲影视九九影院在线观看 | 成人av在线一区二区 | 精品在线免费视频 | 国内精品美女在线观看 | av在线看片 | 人人射网站| 欧美日韩在线电影 | 毛片精品免费在线观看 | 久久视频这里有精品 | 国产精品99久久99久久久二8 | 日本三级吹潮在线 | 777奇米四色 | 亚洲资源在线观看 | 黄色软件在线看 | 日韩电影在线观看中文字幕 | 日韩免费中文 | 久久久国产精品人人片99精片欧美一 | 欧美一级小视频 | 天堂视频中文在线 | 女人高潮特级毛片 | 99日精品 | 九九热国产视频 | 亚洲一二三区精品 | 成人黄色在线观看视频 | 亚洲男男gaygay无套 | 欧洲精品久久久久毛片完整版 | 久久免费福利视频 | 中文字幕资源在线观看 | 欧美精品久久久久久久免费 | 91精品国产综合久久福利 | 日韩在线资源 | 精品久久91| 欧美激情视频一二区 | 久久经典国产视频 | 丁香激情婷婷 | 在线观看 亚洲 | 91资源在线观看 | 日韩av中文| 成人蜜桃网 | 91精品视频在线 | 久久全国免费视频 | 久草在线综合网 | 天天操网站 | 国模精品在线 | 欧美巨大 | 国模吧一区 | 综合久久综合久久 | 亚洲男男gaygay无套 | 97视频资源 | 国产亚洲精品综合一区91 | 欧美日韩伦理一区 | 国内精品视频在线 | 欧美在线观看视频一区二区三区 | 国产午夜精品久久 | 欧美日韩在线视频一区二区 | 一区二区三区在线视频观看58 | 免费看污黄网站 | 亚洲综合色丁香婷婷六月图片 | 狠狠狠狠狠狠狠狠干 | 青青草国产精品 | 外国av网| 色婷婷狠狠 | 人人爽夜夜爽 | 黄色录像av | 成人在线播放av | 国产午夜精品免费一区二区三区视频 | 色综合天天综合在线视频 | 在线免费观看黄色 | 国偷自产中文字幕亚洲手机在线 | 国产九九热视频 | 国产精品九九视频 | 91av视频导航 | 九九综合九九综合 | 久久国产精品免费 | 欧美成人亚洲成人 | 午夜国产福利在线 | 玖玖视频精品 | 不卡的av电影 | 二区三区中文字幕 | 天天操天天干天天爱 | 日韩久久午夜一级啪啪 | 又污又黄的网站 | 欧洲精品码一区二区三区免费看 | 黄色国产在线观看 | 狠狠色丁香婷综合久久 | 成人黄色在线电影 | 亚洲精品视频播放 | 精品久久久久久久久久久久久久久久 | 国产美女免费视频 | 香蕉网在线观看 | 日韩www在线| 91av九色 | 亚洲国产精品小视频 | 午夜精品成人一区二区三区 | 成人在线免费视频观看 | 麻豆视频在线免费观看 | 国产免费精彩视频 | 亚洲一级理论片 | 国产一区在线观看免费 | 97视频久久久| 日韩电影一区二区三区在线观看 | www久久 | 91亚洲精品久久久中文字幕 | 九九九九九九精品任你躁 | 日韩av电影中文字幕在线观看 | 国产一区黄色 | 超碰久热 | 国产手机av | 久久看片网站 | 国产乱码精品一区二区蜜臀 | 99久久精品无码一区二区毛片 | 97视频在线观看视频免费视频 | 97电影网站 | 男女啪啪视屏 | 欧美日韩高清国产 | 97久久精品午夜一区二区 | 久久精品婷婷 | 六月婷婷久香在线视频 | 亚洲综合欧美激情 | 久草久草在线 | www毛片com| 精品久久一二三区 | 精品一区二区久久久久久久网站 | 99精品在线免费在线观看 | 亚洲午夜av| 99热99re6国产在线播放 | 伊人干综合 | 色美女在线 | 中文字幕在线观看一区 | 1区2区3区在线观看 三级动图 | 99自拍视频在线观看 | 很污的网站| 久精品视频免费观看2 | 视频国产一区二区三区 | 欧美精品国产综合久久 | 婷婷丁香色综合狠狠色 | 欧美综合久久久 | 麻豆视频国产精品 | 免费成人av电影 | 久久久久亚洲精品中文字幕 | 国产91精品高清一区二区三区 | 成年人黄色免费网站 | 久久国产欧美日韩 | 亚洲春色成人 | 亚洲五月 | 欧美日在线 | 亚洲国产大片 | 婷婷国产在线 | 国产高清99| 91成人在线网站 | 国产裸体视频bbbbb | 五月激情久久 | 狠狠躁日日躁 | 中文字幕你懂的 | 国产免费小视频 | 在线观看日韩国产 | 日本精品视频在线观看 | 久久久www成人免费毛片麻豆 | 欧美日韩国产高清视频 | 久久国产电影 | 久久精品美女视频网站 | 香蕉视频久久 | 亚洲尺码电影av久久 | 天天弄天天干 | 韩日在线一区 | 久久精品播放 | 三级动态视频在线观看 | 一区二区三区中文字幕在线 | 日韩大片在线观看 | 天天操天天射天天爱 | 一级淫片在线观看 | 亚洲精品一区二区18漫画 | 亚洲欧美国产精品久久久久 | www欧美xxxx | 色综合天天色 | 精品成人a区在线观看 | 久久精品视频在线免费观看 | 91亚洲夫妻 | 国产亚洲欧洲 | av视屏在线播放 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 久久99电影 | 久久久久久97三级 | 中文字幕乱偷在线 | 亚洲在线激情 | a在线免费| 亚洲经典精品 | 久久一精品| 在线 精品 国产 | 亚洲国产99 | 欧美ⅹxxxxxx | 亚洲码国产日韩欧美高潮在线播放 | 国产精品观看在线亚洲人成网 | 亚洲3级| 国产成人高清 | 九九爱免费视频 | 女人18精品一区二区三区 | 九七在线视频 | 五月天欧美精品 | 国产精品免费久久久久久久久久中文 | 亚洲精品永久免费视频 | 韩国av一区二区 | 99 精品 在线 | 国产精品刺激对白麻豆99 | 丁香六月伊人 | 日本精品一区二区 | 国产一级黄色免费看 | 91成人在线视频 | 欧美aa一级| 精品视频久久久久久 | 色综合久久66 | 四虎国产精品成人免费影视 | 天天草天天草 | 99九九99九九九视频精品 | 在线亚洲午夜片av大片 | 视频二区在线 | 伊人电影在线观看 | 在线a亚洲视频播放在线观看 | 欧美成人精品三级在线观看播放 | 久久久国产在线视频 | 五月天综合激情 | 国产专区在线播放 | 日本中文字幕在线 | 久久在线看 | 在线综合 亚洲 欧美在线视频 | 中文字幕一区在线观看视频 | 色综合久久久久综合体桃花网 | 国产乱码精品一区二区三区介绍 | 欧美激情精品久久久久久免费 | 亚洲精品黄色 | 97超碰色偷偷 | 欧美日韩久久不卡 | 久久在线精品 | 91精品国产九九九久久久亚洲 | 在线看黄色av | 在线播放视频一区 | 国产在线观看 | 成人三级网址 | 91一区二区三区在线观看 | 天天射天天操天天干 | 色中文字幕在线观看 | 在线不卡中文字幕播放 | 一级大片在线观看 | 在线国产片 | 2019中文最近的2019中文在线 | 日韩精品一区二区电影 | 亚洲高清视频在线观看 | 亚洲人成影院在线 | 色婷婷狠狠五月综合天色拍 | 久久久久亚洲精品 | 丁香六月激情婷婷 | 国产亚洲精品久久久久久久久久久久 | 久久成人国产精品一区二区 | 狠狠操天天干 | 久久精品理论 | 天天综合亚洲 | 日日夜夜天天久久 | 狠狠躁日日躁狂躁夜夜躁 | 久久国产精品99久久久久久丝袜 | 久久天堂网站 | 色鬼综合网 | 国产精品乱码高清在线看 | 国产视频黄| 综合中文字幕 | 日韩激情第一页 | 一区二区三区电影在线播 | 91在线看网站 | 91高清免费 | 亚洲精品99| 日日麻批40分钟视频免费观看 | 日韩一二三 | 日韩精品中文字幕一区二区 | 国产成人三级在线 | 丝袜美女视频网站 | www激情com | www.色五月.com | 在线亚洲高清视频 | 亚洲精品456在线播放 | 久久不卡av | 国产一区 在线播放 | 国产视频一 | 91看片在线 | 亚洲理论在线 | 97av超碰 | 五月婷婷.com | 九热在线 | 久99久视频| 91看片一区二区三区 | 中文字幕高清有码 | 日韩,中文字幕 | 久久精品第一页 | 欧美日韩在线播放一区 | 国产精品一区二区三区久久 | 日日夜夜中文字幕 | 夜夜操狠狠操 | 91精品入口 | 日本韩国精品一区二区在线观看 | 91香蕉视频在线下载 | 色噜噜日韩精品一区二区三区视频 | 成人精品一区二区三区电影免费 | 成人在线电影观看 | www.xxx.性狂虐 | 国产精品一区二区免费在线观看 | 99精品偷拍视频一区二区三区 | 亚洲高清免费在线 | 九九热在线观看视频 | 激情欧美在线观看 | 五月天国产 | 香蕉视频国产在线观看 | 玖玖爱在线观看 | 亚洲第五色综合网 | 最新日韩在线观看视频 | 日韩免费中文字幕 | 国产在线精品区 | 色婷婷欧美 | 国产亚洲一级高清 | 国产最新在线视频 | 黄色av电影 | 天堂在线一区二区三区 | 亚洲成aⅴ人片久久青草影院 | 国产午夜在线观看视频 | 国产自制av | 中文字幕资源网在线观看 | 国产免码va在线观看免费 | 日韩电影在线一区 | 五月花激情 | 亚洲精品国偷自产在线91正片 | 人人草天天草 | 四虎影院在线观看av | 激情av综合| 亚洲黄a| 久久国产经典 | 日韩伦理片一区二区三区 | 国产剧情一区二区 | 一区二区在线不卡 | 国产丝袜制服在线 | 国产成人精品一区在线 | 国产一区二区三区免费视频 | 日本一区二区高清不卡 | 亚洲成av人片在线观看 | 亚洲精品久久久久999中文字幕 | 中文字幕黄色网址 | 久久亚洲影院 | 天天色天天干天天色 | 91视频在线免费看 | 狠狠干狠狠艹 | 久久国产区 | 射久久| 99 久久久久 | www色com| 亚洲色影爱久久精品 | 成人一级 | www.伊人色.com | 久久精品视频日本 | 久久一级电影 | 精品美女久久久久久免费 | www九九热 | 亚洲闷骚少妇在线观看网站 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产精品亚洲片在线播放 | 久久丝袜视频 | 欧美久久电影 | 国产精品99久久久久久人免费 | 四月婷婷在线观看 | 免费试看一区 | 国产成人av在线影院 | 色网站在线| 国产aa精品 | 国产精彩视频一区 | 欧美 日韩 久久 | 亚a在线| www.久艹| 久久久精品视频成人 | 热久久视久久精品18亚洲精品 | 久久精品欧美一 | 99在线视频播放 | 九九在线国产视频 | 精品久久久久久亚洲综合网站 | 福利久久久| 国产在线91在线电影 | 精品久久久久久电影 | av片子在线观看 | 久久少妇av| 天天色视频 | 国产精品久久久久久一二三四五 | 狠狠躁夜夜a产精品视频 | 最近更新的中文字幕 | 成人福利在线 | 天天综合网国产 | 三级av免费看| 亚洲一二三区精品 | 精品国产乱码久久久久久浪潮 | 久久久久久久久久久成人 | 国产午夜麻豆影院在线观看 | a天堂最新版中文在线地址 久久99久久精品国产 | 免费久久视频 | www免费看 | 黄污视频网站 | 久久久久99精品成人片三人毛片 | 久久福利剧场 | 青春草免费视频 | 亚洲免费黄色 | 亚洲人片在线观看 | 久久97视频 | 一区二区不卡视频在线观看 | 精品国自产在线观看 | 免费一级片在线 | 五月综合在线观看 | 久久99精品久久久久久秒播蜜臀 | 久久久 激情 | 全久久久久久久久久久电影 | 特级西西444www大精品视频免费看 | 国产午夜精品一区二区三区嫩草 | 成人在线免费观看视视频 | 国产精品久久久久久久久蜜臀 | 国产69精品久久99不卡的观看体验 | 久久精品香蕉视频 | 中文字幕 91| 婷婷五综合 | 在线观看中文字幕 | 99精品福利视频 | 青青五月天 | 久久精品久久精品 | 国产精品久久久久久久久搜平片 | 亚州国产视频 | 亚洲性视频 | 国产中文字幕视频在线观看 | 最近最新中文字幕视频 | 欧美精品一二 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品99免费看 | 久久国语露脸国产精品电影 | 亚洲黄色a| 91精品毛片 | 欧美另类成人 | 国产女人40精品一区毛片视频 | 久久99视频| 国内外成人免费在线视频 | 天天精品视频 | 久草91视频 | 欧美一区二区三区在线 | 日韩成人不卡 | 国内精品亚洲 | 亚洲午夜精品久久久 | 国产99久久精品 | 99精品视频免费观看视频 | 91在线播放国产 | 免费看片成年人 | 久久视频在线观看免费 | 91在线观 | 69精品视频在线观看 | 韩国av一区 | 欧美精品一区二区三区四区在线 | 日韩com | 激情五月播播久久久精品 | 亚洲在线日韩 | 天天爽夜夜爽精品视频婷婷 | 91视频在线看 | 国产精品18久久久久久久久 | 日本久久久久 | 99精彩视频在线观看免费 | 国产一级视频 | 超碰97中文| 精品在线99 | 91手机电影 | 精品国产视频在线 | 超碰在线色 | 狠狠色丁香久久婷婷综 | 久久久久久久久久久成人 | 久久久久久久精 | 久久热首页| 超碰99在线| 怡红院av久久久久久久 | 国内免费久久久久久久久久久 | 国产日本高清 | 日韩精品极品视频 | 中文字幕资源网 | 97超碰在线免费观看 | 最新日韩视频 | 亚洲精品国偷自产在线91正片 | www.av免费观看 | 国产成人精品一区二区 | 不卡的av电影 | 国产精品一二三 | 日本中出在线观看 | 日韩欧美v | 国产在线观看地址 | 中文网丁香综合网 | 天天躁天天操 | 天天操夜夜拍 | 在线观看爱爱视频 | 亚洲精品www久久久 www国产精品com | 久久久免费在线观看 | 91爱爱中文字幕 | 色偷偷男人的天堂av | 国内精品福利视频 | www.久久爱.cn | 国产爽妇网| 成人av电影免费在线观看 | 国精产品一二三线999 | 午夜久久 | 日韩精品中文字幕有码 | 免费在线观看国产黄 | 国产中文字幕在线播放 | 免费黄色在线播放 | 婷婷久操| 午夜免费在线观看 | 天天综合天天综合 | 久久人人爽爽人人爽人人片av | 91av影视| 亚洲欧美怡红院 | 性色av免费在线观看 | 国产99久久久欧美黑人 | 一区二区三区久久 | 一级久久精品 | 在线观看亚洲视频 | 中文字幕在线观看第二页 | 天天天天色综合 | 亚洲涩涩网站 | 欧美尹人 | 丁香狠狠 | 天天色天天爱天天射综合 | 国产美女在线免费观看 | 欧美aa一级 | 亚洲国产精品免费 | 亚洲成人xxx | 国产九九热 | 久久久免费少妇 | 18岁免费看片 | 在线播放国产精品 | 午夜国产一区二区三区四区 | av在线电影播放 | 亚洲第一av在线播放 | 亚洲天天看 | 国产手机视频精品 | 永久免费视频国产 | 国产涩涩网站 | 欧美日韩在线视频一区二区 | 啪啪肉肉污av国网站 | 国产精品99久久久久久宅男 | 国产精品一级在线 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲经典中文字幕 | 97精品欧美91久久久久久 | 国产青春久久久国产毛片 | 日韩天堂在线观看 | 国产 色| 国产成人精品亚洲日本在线观看 | 久久天堂亚洲 | 欧美性免费| www日日夜夜 | 国产色就色 | 日韩剧情| 成人动漫视频在线 | 亚洲第一av在线播放 | 特黄特黄的视频 | av成人在线网站 | 91视频在线免费下载 | 免费av在线播放 | 人人射人人澡 | 在线精品亚洲一区二区 | 国产精品美女www爽爽爽视频 | 精品视频在线视频 | 狠狠狠操| 日韩欧美一区二区在线观看 | 色综合久久中文字幕综合网 | 亚洲一区二区观看 | 96国产精品 | 在线观看av的网站 | 在线免费观看国产黄色 | 欧美成人在线免费 | 日韩高清成人在线 | 亚洲精品视频网 | 91尤物国产尤物福利在线播放 | 日韩欧美高清 | 久久亚洲在线 | 亚洲午夜剧场 | 五月激情综合婷婷 | 免费精品视频在线 | 中文字幕在线观看视频网站 | 亚洲综合成人在线 | 午夜精品久久久久久99热明星 | 69精品视频 | 在线观看免费高清视频大全追剧 | 黄色小网站在线 | www.国产毛片| 97国产精品视频 | 国产精品剧情 | 一级性生活片 | 久色 网| 蜜臀av.com| 月下香电影 | 91成人免费视频 | 亚洲久草视频 | 97视频免费在线看 | 人人爽人人干 | 天天天插 | 99久久精品日本一区二区免费 | 国产美女黄网站免费 | 一本一道久久a久久精品 | 精品国产一区二区三区噜噜噜 | 久久久伦理 | 国产 日韩 欧美 自拍 | 免费一级片在线 | 精品一区二三区 | 在线蜜桃视频 | 美女免费黄网站 | 色综合久久久久久久久五月 | 久久经典国产 | 91av视频导航 | 亚洲精品免费在线播放 | 奇米影视8888在线观看大全免费 | 中文国产在线观看 | 丝袜制服综合网 | 国产一级在线观看 | 亚洲专区欧美 | 成人在线视频免费观看 | 亚洲精品网站在线 | 日本黄色免费在线 | 精品美女在线视频 | 青青草国产精品视频 | 色播五月激情综合网 | 91免费视频网站在线观看 | 亚洲精品五月天 | 激情视频国产 | 色婷婷亚洲 | 成人在线免费av | 911av视频 | 免费日韩视 | 国内精品久久久久久久影视简单 | 九九免费在线观看视频 | 亚洲日本在线视频观看 | 免费www视频 | 日韩成人一级大片 | 夜夜躁狠狠燥 | 欧美成人按摩 | 天天爽夜夜爽精品视频婷婷 | 五月黄色 | 六月丁香色婷婷 | 午夜久久久久 | 日韩中出在线 | 久久久www成人免费毛片麻豆 | 国产69久久久欧美一级 | 一区二区三区四区五区在线视频 | 亚州国产精品视频 | 国产 视频 高清 免费 | 国产视频久久 | 亚洲精品国产麻豆 | 啪啪精品| 国产一区二区三区在线 | 久久综合射 | 日韩不卡高清视频 | 涩av在线| 欧美成天堂网地址 | 久久久官网 | 国产精品免费久久久久 | 日韩精品高清不卡 | 欧美aaaxxxx做受视频 | 亚洲.www| 9色在线视频 | 成人黄在线 | 久操久 | 99久久精品国产毛片 | 91免费观看国产 | 特级西西444www大精品视频免费看 | 狠狠色丁香婷婷综合视频 | 国产午夜影院 | 中文在线| 国产一区二区免费 | 日韩精品电影在线播放 | 免费三级大片 | 国产午夜麻豆影院在线观看 | 国产高清 不卡 | 色婷婷国产精品一区在线观看 | 中文字幕在线观看视频一区二区三区 | 国产婷婷久久 | 国产小视频免费观看 | 亚洲最大成人免费网站 | 亚洲成人网在线 | 亚洲黄色网络 | 91成人精品 | 日韩三区在线观看 | 日韩激情久久 | 国产日韩欧美在线影视 | 日韩av专区 | 精品五月天 | 99视频在线精品 | 国产精品黄色 | 亚洲另类视频在线 | 西西大胆啪啪 | 97色国产 | 国产精品ssss在线亚洲 | 夜又临在线观看 | 九九精品久久 | 国产亚洲成人网 | 丁香婷婷在线观看 | 97精品国产97久久久久久 | 国产一二三四在线视频 | 国产一级二级三级在线观看 | 久久综合色播五月 | av电影 一区二区 | 日本mv大片欧洲mv大片 | 久草网站在线观看 | 9999毛片 | 三级动态视频在线观看 | 亚洲一区视频在线播放 | 日韩视 | 欧美综合色在线图区 | 成人一级免费视频 | 色av网站 | 免费久久99精品国产婷婷六月 | 精品亚洲成人 | 人人添人人澡 | 91在线公开视频 | 99热国产在线 | 18久久久久 | 91视频a | 久久免费视频在线 | 久久久久久久久久久久久久av | 国产精品久久久久永久免费看 | 啪啪免费视频网站 | 国产精品国产三级国产专区53 | 国产精品麻豆果冻传媒在线播放 | 国产精品永久在线 | 国产精品久久久久久久久婷婷 | 国产精品成人一区二区三区吃奶 | 91伊人久久大香线蕉蜜芽人口 | 不卡的av电影 | 亚洲精品系列 | 国产91精品在线播放 | 黄色官网在线观看 | 五月婷婷在线观看 | 久草在线免费色站 | 在线 日韩 av | 日韩精品aaa | 成人av地址 | 久久久一本精品99久久精品 | 午夜精品视频福利 | 欧美精品乱码久久久久久 | 97超视频免费观看 | 亚洲日韩精品欧美一区二区 | 久久久国产99久久国产一 | 99在线观看视频 | 欧美日韩高清国产 | 久久av黄色| 国内精品久久久久影院优 | 久久国产精品色婷婷 | 日韩h在线观看 | 亚洲国产精品激情在线观看 | 91久草视频 | 麻花天美星空视频 | 久久激情视频 | 西西444www大胆无视频 | 丁香六月国产 | 91精品国产网站 | 久久久久久久久久久久电影 | 日韩成人免费在线观看 | 欧美一区免费在线观看 | 精品久久久久久久久久久久 | 欧美a级免费视频 | 久久久免费观看视频 | 午夜精品久久久久 | 麻豆综合网| 成人动漫精品一区二区 | 久久久免费网站 | 樱空桃av| 五月天综合婷婷 | 成人免费网站视频 | 国产精品免费久久 | 91激情小视频 | 国产精品免费小视频 | 国产一级特黄毛片在线毛片 | 国产精品一区二区三区四区在线观看 | 久久免费视频这里只有精品 | 99精品国产99久久久久久福利 | 99久久久国产免费 | 在线观看成人福利 | 中文字幕黄色网 | 亚洲一级影院 | 久久av伊人| 精品国产成人av | 黄色影院在线免费观看 | 色综合久久久久久久久五月 | 一区二区三区影院 | 国产精品www| 午夜国产福利在线观看 | 国产在线精品一区二区三区 | 国产激情小视频在线观看 | 午夜视频一区二区三区 | 在线视频麻豆 | 欧美精品乱码99久久影院 | 99爱这里只有精品 | 亚洲精品中文字幕视频 | 日韩视频免费观看高清完整版在线 | 精品色999| 成人一区二区三区在线 | 亚洲精品小视频 | 精品亚洲网 | 99999精品视频| 深夜福利视频在线观看 | 日本乱视频 | 亚洲精品tv久久久久久久久久 | 日韩啪啪小视频 | 国产精成人品免费观看 | 操操综合 | 成人h视频 | 黄色.com| 四虎影视精品永久在线观看 | 极品嫩模被强到高潮呻吟91 | 亚州精品在线视频 | 伊人影院99 | 在线观看久草 | 网址你懂的在线观看 | 日韩a在线看| 久久中文字幕在线视频 | 国产又粗又猛又黄又爽视频 | 亚洲永久av | 黄色网www | 日本老少交| 亚洲激情一区二区三区 | 国产亚洲精品久久久久秋 | 国产精品岛国久久久久久久久红粉 | 国产亚洲视频在线观看 | 麻豆av一区二区三区在线观看 | 黄色特一级片 | av 一区二区三区四区 | 国产亚洲精品成人 | 亚洲dvd | 天天操天天摸天天爽 | 98久久| 网站免费黄色 | 国产日韩精品一区二区三区在线 | 播五月综合 | 亚洲aⅴ久久精品 | 精品在线视频一区二区三区 | 91成版人在线观看入口 | 国产一区二区三区黄 | 黄色大全免费网站 | 久久综合久久久 | 伊人天天综合 | 国产视频精品视频 | 在线免费高清一区二区三区 | 久碰视频在线观看 | 国产精品一区二区av日韩在线 | 91精品视频在线 | 国内精品视频在线播放 | 久久综合久色欧美综合狠狠 | 久久久免费在线观看 | 国产又粗又猛又色 | 国产精品精品国产婷婷这里av | av中文字幕电影 | 久久黄色影视 | 五月精品 | 国产黄在线免费观看 | 亚洲精品国产精品国产 | 国产免费激情久久 | 99久久电影| 国产精品专区一 | 欧美专区国产专区 | 手机成人在线 | 天天综合狠狠精品 | 国产精品一区二区av麻豆 | 视频在线观看国产 | 一本色道久久精品 | 成人在线观看av | 91精品亚洲影视在线观看 | 丁香花五月 | 日韩中文字幕电影 | 色99视频 | 日韩三级不卡 | 91av影视 | 亚洲欧美视频在线播放 | 欧美影片 | 国产在线精品一区二区不卡了 | 中文字幕视频观看 | 国产精品一区免费在线观看 | 亚洲日本三级 | 久久精品亚洲精品国产欧美 | 99久久精品久久亚洲精品 | 国产精品一区二区中文字幕 | 国产成人精品免高潮在线观看 | 亚洲乱码在线观看 | 最近更新好看的中文字幕 | 超碰av在线播放 | 91在线播放综合 | 久久精品在线免费观看 | 偷拍区另类综合在线 | 男女视频国产 | 欧美激情精品久久久久 | 激情五月婷婷激情 | 日韩理论电影在线 | 亚洲综合精品在线 | 91一区啪爱嗯打偷拍欧美 | 在线免费91 | 精品五月天 | 亚洲五月| 97电影手机版 | 久草视频在线免费播放 | 欧美福利网站 | 人人看人人艹 | 亚洲成av人片 | 久久久精品国产免费观看一区二区 | 黄色小说视频网站 | 天天激情综合 | 探花视频在线版播放免费观看 | 999国内精品永久免费视频 | 久久99精品久久久久久清纯直播 | 国产精品综合久久久久久 | 五月婷婷播播 | 成年人在线免费看 | 国产欧美精品在线观看 | 成人精品一区二区三区中文字幕 | 天天草av | 欧美男同视频网站 | 久久国产精品免费看 | 免费观看日韩av | 狠狠操狠狠插 | 亚洲精品视频网址 | 国产小视频免费在线网址 | 国产成人精品亚洲日本在线观看 | 亚洲国产精品影院 | 亚洲精品乱码白浆高清久久久久久 | 亚洲网站在线 | 激情五月综合网 | 91av蜜桃| 伊人天天狠天天添日日拍 | 国产美女视频免费观看的网站 | 国内精品视频免费 | 在线播放亚洲 | 国产最顶级的黄色片在线免费观看 | www.国产毛片 | 久久99精品国产麻豆婷婷 | 欧美一区二区三区在线看 | 成人av免费在线 | 开心色激情网 | 欧美精品国产综合久久 | 亚洲片在线观看 | 一级一片免费看 | 91大神视频网站 | 中文字幕韩在线第一页 | 激情五月在线 | 四虎影院在线观看av | 91桃色国产在线播放 | 亚州视频在线 | 99热最新网址| av黄色免费看 |