久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      本篇文章給大家?guī)?lái)了關(guān)于Redis的相關(guān)知識(shí),其中主要整理了從環(huán)境搭建到熟練使用的相關(guān)問(wèn)題,其中包括了Redis的單節(jié)點(diǎn)安裝教程、Redis的常用命令、Redis的數(shù)據(jù)模型等等內(nèi)容,下面一起來(lái)看一下,希望對(duì)大家有幫助。

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      推薦學(xué)習(xí):Redis視頻教程

      一、常見(jiàn)的非關(guān)系型數(shù)據(jù)庫(kù)NOSQL分類

      NOSQL類型 主要數(shù)據(jù)庫(kù)產(chǎn)品 類型特色
      K-V鍵值對(duì)存儲(chǔ)類型 Redis、Memcached 使用key可以快速的查詢到value,Memcached可以支持String類型的值value,Redis支持的值的數(shù)據(jù)類型很多如:Stringsethashsortsetlist等等
      文檔存儲(chǔ)類型 MongoDB、CouchDB 使用JSON或類JSON的BSON數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)的內(nèi)容為文檔型,能夠?qū)崿F(xiàn)部分關(guān)系型數(shù)據(jù)庫(kù)的功能
      列存儲(chǔ)類型 HBase、Cassandra 按照列進(jìn)行數(shù)據(jù)存儲(chǔ),該類型便于存儲(chǔ)結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù),可以方便做數(shù)據(jù)壓縮和針對(duì)某一列或者某幾列的數(shù)據(jù)查詢
      圖存儲(chǔ)類型 Neo4J、FlockDB 以圖形關(guān)系存儲(chǔ)數(shù)據(jù),能夠很好的彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)在圖形存儲(chǔ)時(shí)的不足
      對(duì)象存儲(chǔ)類型 Db4o、Versant 該存儲(chǔ)類型的數(shù)據(jù)庫(kù)通過(guò)類似面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫(kù),通過(guò)對(duì)象的方式存取數(shù)據(jù)
      XML存儲(chǔ)類型 Berkeley DB XML、BaseX 該類型數(shù)據(jù)庫(kù)可以高效的存儲(chǔ)XML數(shù)據(jù),并且支持XML的內(nèi)部查詢語(yǔ)法,例如;XQuery、XPath

      二、了解Redis

      Redis(Remote Dictionary Server ),即遠(yuǎn)程字典服務(wù),是一個(gè)開(kāi)源的(BSD協(xié)議)使用ANSI C語(yǔ)言編寫(xiě),基于內(nèi)存的且支持持久化,高性能的Key-Value的NOSQL數(shù)據(jù)庫(kù);Redis支持的數(shù)據(jù)結(jié)構(gòu)類型很豐富,如 :字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 以及范圍查詢, bitmaps(位圖), hyperloglogs (超級(jí)日志)和 地理空間(geospatial) 索引半徑查詢等等。并且Redis有著豐富的支持主流語(yǔ)言的客戶端,C/C++、Python、Erlang、R、C#、Java、PHP、Objective-C、Perl、Ruby、Scala、Go、JavaScript等;Redis 內(nèi)置復(fù)制、Lua 腳本、LRU 驅(qū)逐、事務(wù)和不同級(jí)別的磁盤(pán)持久化,并通過(guò) Redis Sentinel 和 Redis Cluster 自動(dòng)分區(qū)提供高可用性;我們可以將Redis應(yīng)用在緩存(StackOverFlow)、數(shù)據(jù)庫(kù)、消息中間件等上。

      Redis官網(wǎng)鏈接: https://redis.io/

      三、Redis的單節(jié)點(diǎn)安裝教程

      點(diǎn)我返回目錄

      安裝準(zhǔn)備:Linux虛擬機(jī):CentOS7、操作工具:Xshell 、Xftp
      Redis安裝包下載地址:https://download.redis.io/releases/

      (1)、在安裝Redis之前,我們需要先配置阿里云的yum源

      下載配置文件

      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

      生成緩存

      yum makecache

      (2)、安裝Redis

      1、因?yàn)镽edis是使用ANSI C語(yǔ)言編寫(xiě)的,所以我們要先安裝gcc依賴

      yum install -y gcc-c++ gcc tcl

      2、使用Xftp上傳Redis壓縮的安裝包到Linux虛擬機(jī)并解壓

      上傳的壓縮包的路徑,可以自己指定或創(chuàng)建上傳的目錄
      小北是上傳到了/usr/local/module/目錄,然后解壓到了/usr/local/soft/目錄下

      tar -xvf redis-3.0.0.tar.gz

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      3、進(jìn)入解壓好的目錄redis-3.0.0,編譯make

      cd redis-3.0.0
      make

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      下面shell命令是用于測(cè)試make的,可用可不用

       make test

      創(chuàng)建安裝目錄

      這是小北的安裝目錄  mkdir -p /usr/local/soft/redis

      安裝

      make PREFIX=/usr/local/soft/redis install

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      4、復(fù)制配置文件

      cp /usr/local/soft/redis-3.0.0/redis.conf /usr/local/soft/redis/bin/

      配置環(huán)境變量

      vim /etc/profile

      添加環(huán)境變量

      export REDIS_HOME=/usr/local/soft/redis/ export PATH=$REDIS_HOME/bin

      讓環(huán)境變量修改生效

      source /etc/profile

      5、啟動(dòng)Redis

      后臺(tái)啟動(dòng)

      cd /usr/local/soft/redis/bin
      nohup redis-server redis.conf &

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      關(guān)閉redis的命令,要先獲取Redis的進(jìn)程號(hào),殺死該進(jìn)程

      ps -aux | grep redis
      kill -9

      6、連接Redis

      查看啟動(dòng)日志:

      cat nohup.out

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)
      后臺(tái)啟動(dòng)Redis

       redis-cli

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      7、測(cè)試使用Redis

      插入一條數(shù)據(jù)

       set  key1 value1

      查詢數(shù)據(jù)

       get key1

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      四、Redis的常用命令

      1、Help幫助命令

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      2、SET命令

      點(diǎn)我返回目錄

      (1)設(shè)置字符串值 	命令使用格式:		SET key value [EX seconds] [PX milliseconds] [NX|XX] 	注意:	 		EX 表示設(shè)置過(guò)期時(shí)間,單位:秒,等同于SETEX key seconds value 		PX 表示設(shè)置過(guò)期時(shí)間,單位:毫秒,等同于PSETEX key milliseconds value 		NX 表示鍵不存在,才能設(shè)置,等同于SETNX key value 		XX 表示鍵存在時(shí),才能設(shè)置  (2)設(shè)置多個(gè)鍵的字符串值 	使用格式: 		MSET key value [key value ...](3)當(dāng)鍵不存在時(shí),設(shè)置字符串值 		MSETNX key value [key value ...] 	注意:這是原子操作

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      3、過(guò)期命令

      Redis中可以給Key設(shè)置一個(gè)生存時(shí)間(秒或毫秒),當(dāng)達(dá)到這個(gè)時(shí)長(zhǎng)后,這些鍵值將會(huì)被自動(dòng)刪除。

      (1)設(shè)置多少秒或者毫秒后過(guò)期 	EXPIRE key seconds 	PEXPIRE key milliseconds 	 (2)設(shè)置在指定Unix時(shí)間戳過(guò)期 	EXPIREAT key timestamp 	PEXPIREAT key milliseconds-timestamp 	 (3)刪除過(guò)期 	PERSIST key 	 (4)生存時(shí)間 	Time To Live,指Key的剩余生存時(shí)間 (5)查看剩余生存時(shí)間 	TTL key 	PTTL key 	key存在但沒(méi)有設(shè)置TTL,返回-1 	key存在,但還在生存期內(nèi),返回剩余的秒或者毫秒 	key曾經(jīng)存在,但已經(jīng)消亡,返回-2(2.8版本之前返回-1)

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      4、查找鍵命令

      (1)查找鍵使用格式: 		KEYS pattern 		 (2)pattern的取值		* 任意長(zhǎng)度字符 		? 任意一個(gè)字符		[] 字符集合,表示可以是集合中的任意一個(gè)

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      5、操作鍵命令

      (1)查看鍵的數(shù)據(jù)類型			TYPE key (2)判斷鍵是否存在 			EXISTS key (3)給鍵重命名 		RENAME key newkey 		RENAMENX key newkey   若鍵存在就rename (4)刪除鍵		DEL key [key ...]

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      6、GET命令

      (1)獲取值 		GET key		 (2)獲取多個(gè)給定的鍵的值 		MGET key [key ...] 		(3)返回舊值并設(shè)置新值 		GETSET key value   如果鍵不存在,就創(chuàng)建并賦值		 (4)獲取字符串長(zhǎng)度 	 	STRLEN key	 	 (5)追加字符串 		APPEND key value 		如果鍵存在就追加;如果不存在就等同于SET key value		 (6)獲取子字符串 		GETRANGE key start end 	索引值從0開(kāi)始,負(fù)數(shù)表示從字符串右邊向左數(shù)起,-1表示最有一個(gè)字符	 (7)覆蓋字符串 		SETRANGE key offset value

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      7、步長(zhǎng)命令

      注意:只能對(duì)整形的數(shù)據(jù)進(jìn)行步長(zhǎng)操作  (1)步長(zhǎng)1的增減 		INCR key 		DECR key 		字符串值會(huì)被解釋成64位有符號(hào)的十進(jìn)制整數(shù)來(lái)操作,結(jié)果依然轉(zhuǎn)成字符串 		 (2)步長(zhǎng)增減,指定步長(zhǎng)長(zhǎng)度 		INCRBY key decrement 		DECRBY key decrement 		字符串值會(huì)被解釋成64位有符號(hào)的十進(jìn)制整數(shù)來(lái)操作,結(jié)果依然轉(zhuǎn)成字符串

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      8、登錄不同的庫(kù)命令

      redis-cli --help redis-cli -n 2

      9、清除當(dāng)前庫(kù)數(shù)據(jù)命令

      FLUSHDB

      10、清除所有庫(kù)中的數(shù)據(jù)命令

      FLUSHALL

      五、BITMAP位圖

      位圖不是真正的數(shù)據(jù)類型,它是定義在字符串類型中的,我們知道一個(gè)字符串類型的值最多能存儲(chǔ)512M字節(jié)的內(nèi)容,其中位上限:2^(9+10+10+3) =2^32b

      1、位圖常用命令

      (1)設(shè)置某一位上的值 		SETBIT key offset value  			offset偏移量,從0開(kāi)始 			value不寫(xiě),默認(rèn)是0 (2)獲取某一位上的值 		GETBIT key offset (3)返回指定值0或者1在指定區(qū)間上第一次出現(xiàn)的位置 		BITPOS key bit [start] [end]

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)
      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      2、位操作命令

      對(duì)一個(gè)或多個(gè)保存二進(jìn)制位的字符串 key 進(jìn)行位元操作,并將結(jié)果保存到 dteskey 上

      • operation 可以是 AND 、 OR 、 NOT 、 XOR 這四種操作中的任意一種
      • BITOP AND destkey key [key …] ,對(duì)一個(gè)或多個(gè) key 求邏輯并,并將結(jié)果保存到 destkey
      • BITOP OR destkey key [key …] ,對(duì)一個(gè)或多個(gè) key 求邏輯或,并將結(jié)果保存到 destkey
      • BITOP XOR destkey key [key …] ,對(duì)一個(gè)或多個(gè) key 求邏輯異或,并將結(jié)果保存到 destkey
      • BITOP NOT destkey key ,對(duì)給定 key 求邏輯非,并將結(jié)果保存到 destkey
      • 除了 NOT 操作之外,其他操作都可以接受一個(gè)或多個(gè) key 作為輸入
      • 當(dāng) BITOP 處理不同長(zhǎng)度的字符串時(shí),較短的那個(gè)字符串所缺少的部分會(huì)被看作 0
      • 空的 key 也被看作是包含 0 的字符串序列
      已知a和b的二進(jìn)制表示: a = 01100001 b = 01100010  都為1才為1 AND=》求邏輯并(與) 1 and 1->1    0 and 0->0     1 and 0->0 bitop and aband a b  有一個(gè)為1就為1 OR=》求邏輯或     1 or 1->1    0 or 0->0     1 or 0->1 bitop or abor a b  就是取反(反轉(zhuǎn))NOT=》求邏輯非    not 0 ->1    not 1->0 bitop not anot a bitop not bnot b  相同為0,相異為1 XOR=》求邏輯異或  0 xor 0->0   1 xor 1->0    1 xor 0->1 bitop xor abxor a b

      3、統(tǒng)計(jì)指定位區(qū)間上值為1的個(gè)數(shù)

      使用格式1: 		BITCOUNT key [start] [end]  		從左向右從0開(kāi)始,從右向左從-1開(kāi)始, 		注意:官方start、end是位,測(cè)試后是字節(jié) 使用格式2: 		BITCOUNT testkey 0 0 		表示從索引為0個(gè)字節(jié)到索引為0個(gè)字節(jié),也就是指對(duì)第一個(gè)字節(jié)的統(tǒng)計(jì) 	注意: 		BITCOUNT testkey 0  -1 等同于BITCOUNT testkey 	 我們最常用的格式就是 BITCOUNT testkey

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      六、Redis的數(shù)據(jù)模型

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      1、Redis的 key 鍵

      Redis的 key 值是二進(jìn)制安全的,這意味著可以用任何二進(jìn)制序列作為key值,從形如”foo”的簡(jiǎn)單字符串到一個(gè)JPEG文件的內(nèi)容都可以??兆址彩怯行ey值。

      Key取值原則:

      • 鍵值不需要太長(zhǎng),太長(zhǎng)會(huì)消耗內(nèi)存,且在數(shù)據(jù)中查找這類鍵值的計(jì)算成本較高
      • 鍵值不宜過(guò)短,過(guò)短則可讀性較差

      2、Redis的 Value 值

      1、String字符串

      字符串是一種最基本的Redis值類型。Redis字符串是二進(jìn)制安全的,這意味著一個(gè)Redis字符串能包含任意類型的數(shù)據(jù);并且一個(gè)字符串類型的值最多能存儲(chǔ)512M字節(jié)的內(nèi)容。

      2、 List列表

      List列表是基于Linked List實(shí)現(xiàn)的,列表中的元素是字符串類型;而列表的頭尾增刪速度快,中間增刪速度慢,正常使用過(guò)程中增刪元素是常態(tài),列表中元素可以重復(fù)出現(xiàn),并且列表中最多能包含2^32-1個(gè)元素;列表的索引,從左至右,從0開(kāi)始;從右至左,從-1開(kāi)始

      (1)注意:  	 命令說(shuō)明: 			B --》block 塊,阻塞 			L --》left 左 			R --》right 右 			X --》exist 存在
      (2)左右(或者頭尾)壓入元素 		左(頭)壓入元素: 			格式: LPUSH key value [value ...] 			舉例: LPUSHX key value 			 		左(頭)壓入元素: 			格式:RPUSH key value [value ...] 			舉例:RPUSHX key value

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      (3)左右(或者頭尾)彈出元素(取出元素后,原先的位置就沒(méi)有了) 		LPOP key 		RPOP key 		 (4)從一個(gè)列表尾部彈出元素壓入到另一個(gè)列表的頭部 		RPOPLPUSH source destination  (5)返回列表中指定范圍元素(返回元素后,原先的位置還有) 		LRANGE key start stop 		LRANGE key 0 -1 表示返回所有元素 		 (6)獲取指定位置的元素 		LINDEX key index 		 (7)設(shè)置指定位置元素的值 		LSET key index value 		 (8)獲取列表長(zhǎng)度(元素個(gè)數(shù)) 		LLEN key 		 (9)從列表頭部開(kāi)始刪除值等于value的元素count次 		LREM key count value count > 0 : 從表頭開(kāi)始向表尾搜索,移除與 value 相等的元素,數(shù)量為 count count < 0 : 從表尾開(kāi)始向表頭搜索,移除與 value 相等的元素,數(shù)量為 count 的絕對(duì)值 count = 0 : 移除表中所有與 value 相等的值  (10)去除指定范圍外元素 		LTRIM key start stop 		 (11)在列表中某個(gè)存在的值(pivot)前或后插入元素 		LINSERT key BEFORE|AFTER pivot value 		若key和pivot不存在,則不進(jìn)行任何操作 		 (12)阻塞 	如果彈出的列表不存在或者為空,就會(huì)造成阻塞 	若超時(shí)時(shí)間設(shè)置為0,就是永久阻塞,直到有數(shù)據(jù)可以彈出 	如果多個(gè)客戶端阻塞在同一個(gè)列表上,那么使用First In First Service原則,先到先服務(wù) 	 (13)左右(或者頭尾)阻塞彈出元素 		BLPOP key [key ...] timeout 		BRPOP key [key ...] timeout 		 (14)從一個(gè)列表尾部阻塞彈出元素壓入到另一個(gè)列表的頭部 		BRPOPLPUSH source destination timeout

      3、 Hash散列

      Hash散列是由field和關(guān)聯(lián)的value組成的map鍵值對(duì),而field和value都是字符串類型,一個(gè)hash中最多包含2^32-1鍵值對(duì)。

      (1)設(shè)置單個(gè)字段 		HSET key field value 		HSETNX key field value 		當(dāng)在key的filed不存在的情況下執(zhí)行,那么key不存在會(huì)直接創(chuàng)建 		 (2)設(shè)置多個(gè)字段 		HMSET key field value [field value ...] 		(3)返回字段個(gè)數(shù) 		HLEN key 		 (4)判斷字段是否存在 		HEXISTS key field 		key或者field不存在,返回0 		 (5)返回字段值 		HGET key field 		 (6)返回多個(gè)字段值 		HMGET key field [field ...] 		(7)返回所有的鍵值對(duì) 		HGETALL key 		 (8)返回所有字段名 		HKEYS key 		 (9)返回所有值 		HVALS key 		 (10)在字段對(duì)應(yīng)的值上進(jìn)行整數(shù)的增量計(jì)算 		HINCRBY key field increment 		 (11)在字段對(duì)應(yīng)的值上進(jìn)行浮點(diǎn)數(shù)的增量計(jì)算 		HINCRBYFLOAT key field increment 		 (12)刪除指定的字段 		HDEL key field [field ...]

      1).使用Hash的優(yōu)點(diǎn)

      • 節(jié)約內(nèi)存空間
      • 每創(chuàng)建一個(gè)鍵,它都會(huì)為這個(gè)鍵儲(chǔ)存一些附加的管理信息(例如這個(gè)鍵最后一次被訪問(wèn)的時(shí)間等等)所以數(shù)據(jù)庫(kù)里面的鍵越多,Redis數(shù)據(jù)庫(kù)服務(wù)器在儲(chǔ)存附加管理信息方面耗費(fèi)的內(nèi)存就會(huì)越多,那么用在管理數(shù)據(jù)庫(kù)鍵上的CPU也會(huì)越多,在字段對(duì)應(yīng)的值上進(jìn)行浮點(diǎn)數(shù)的增量計(jì)算。

      2).不適合使用Hash的情況

      • 使用二進(jìn)制位操作命令:因?yàn)镽edis目前支持對(duì)字符串鍵進(jìn)行SETBIT、GETBIT、BITOP等操作,若要使用這些操作,那么只能使用字符串鍵,雖然散列也能保存二進(jìn)制數(shù)據(jù)
      • 使用過(guò)期鍵功能:Redis的鍵過(guò)期功能目前只能對(duì)鍵進(jìn)行過(guò)期操作,而不能對(duì)散列的字段進(jìn)行過(guò)期操作,因此如果你要對(duì)鍵值對(duì)數(shù)據(jù)使用過(guò)期功能的話,那么只能把鍵值對(duì)儲(chǔ)存在字符串里面

      4、Set集合

      Set集合內(nèi)存儲(chǔ)的元素是無(wú)序的、去重的,元素是字符串類型,最多包含2^32-1個(gè)元素

      (1)增加一個(gè)或多個(gè)元素 		SADD key member [member ...] 		如果元素已經(jīng)存在,則自動(dòng)忽略 		 (2)移除一個(gè)或者多個(gè)元素 		SREM key member [member ...] 		元素不存在,自動(dòng)忽略 		 (3)返回集合包含的所有元素 		SMEMBERS key 	如果集合元素過(guò)多,例如百萬(wàn)個(gè),需要遍歷,可能會(huì)造成服務(wù)器阻塞,生產(chǎn)環(huán)境應(yīng)避免使用 	 (4)檢查給定元素是否存在于集合中 		SISMEMBER key member 		 (5)集合的無(wú)序性 		SADD friends "java" "hadoop" "tomcat" "hive" "mapreduce" "spark" 		SADD anotherfriends "java" "hadoop" "tomcat" "hive" "mapreduce" "spark" 		SMEMBERS friends 		SMEMBERS anotherfriends 	注意: 	SMEMBERS 有可能返回不同的結(jié)果, 	如果需要存儲(chǔ)有序且不重復(fù)的數(shù)據(jù)使用有序集合,存儲(chǔ)有序可重復(fù)的使用列表	 (6)隨機(jī)返回集合中指定個(gè)數(shù)的 		SRANDMEMBER key [count] 	如果 count 為正數(shù),且小于集合基數(shù), 		那么命令返回一個(gè)包含 count 個(gè)元素的數(shù)組,數(shù)組中的元素各不相同。 	如果 count 大于等于集合基數(shù),那么返回整個(gè)集合 	如果 count 為負(fù)數(shù), 		那么命令返回一個(gè)數(shù)組,數(shù)組中的元素可能會(huì)重復(fù)出現(xiàn)多次,而數(shù)組的長(zhǎng)度為 count 的絕對(duì)值 	如果 count 為 0,返回空 	如果 count 不指定,隨機(jī)返回一個(gè)元素	 (7)返回集合中元素的個(gè)數(shù) 		SCARD key 	鍵的結(jié)果會(huì)保存信息,集合長(zhǎng)度就記錄在里面,所以不需要遍歷	 (8)隨機(jī)從集合中移除并返回這個(gè)被移除的元素 		SPOP key		 (9)把元素從源集合移動(dòng)到目標(biāo)集合 		SMOVE source destination member		 (10)求差集 		SDIFF key [key ...],從第一個(gè)key的集合中去除其他集合和自己的交集部分 		SDIFFSTORE destination key [key ...],將差集結(jié)果存儲(chǔ)在目標(biāo)key中		 (11)求交集 		SINTER key [key ...],取所有集合交集部分 		SINTERSTORE destination key [key ...],將交集結(jié)果存儲(chǔ)在目標(biāo)key中		 (12)求并集 		SUNION key [key ...],取所有集合并集 		SUNIONSTORE destination key [key ...],將并集結(jié)果存儲(chǔ)在目標(biāo)key中

      5、SortedSet有序集合

      SortedSet有序集合與Set集合類似,它是有序的、去重的,元素是字符串類型,每一個(gè)元素都關(guān)聯(lián)著一個(gè)浮點(diǎn)數(shù)分值(Score),并按照分值從小到大的順序排列集合中的元素。其分值可以相同;最多包含2^32-1個(gè)元素。

      (1)增加一個(gè)或多個(gè)元素 		ZADD key score member [score member ...] 		如果元素已經(jīng)存在,則使用新的score 		 (2)移除一個(gè)或者多個(gè)元素 		ZREM key member [member ...] 		元素不存在,自動(dòng)忽略 		 (3)顯示分值 		ZSCORE key member 		 (4)增加或者減少分值 		ZINCRBY key increment member 			increment為負(fù)數(shù)就是減少 			 (5)返回元素的排名(索引) 		ZRANK key member 		 (6)返回元素的逆序排名 		ZREVRANK key member 		 (7)返回指定索引區(qū)間元素 		ZRANGE key start stop [WITHSCORES] 		如果score相同,則按照字典序lexicographical order 排列 		默認(rèn)按照score從小到大,如果需要score從大到小排列,使用ZREVRANGE 		 (8)返回指定索引區(qū)間元素 		ZREVRANGE key start stop [WITHSCORES] 		如果score相同,則按照字典序lexicographical order 的 逆序 排列 		默認(rèn)按照score從大到小,如果需要score從小到大排列,使用ZRANGE 		 (9)返回指定分值區(qū)間元素(升序排序) 		ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 		返回score默認(rèn)屬于[min,max]之間,元素按照score升序排列,若score相同則按照字典排序 		LIMIT中offset代表跳過(guò)多少個(gè)元素,count是返回幾個(gè)。類似于Mysql 		使用小括號(hào),則修改區(qū)間為開(kāi)區(qū)間,例如(5、(10、5) 		-inf 和 +inf 分別表示負(fù)無(wú)窮和正無(wú)窮 		 (10)返回指定分值區(qū)間元素(降序排序) 		ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 		返回score默認(rèn)屬于[min,max]之間,元素按照score降序排列,score相同字典降序 		LIMIT中offset代表跳過(guò)多少個(gè)元素,count是返回幾個(gè)。類似于Mysql 		使用小括號(hào),修改區(qū)間為開(kāi)區(qū)間,例如(5、(10、5) 		-inf和+inf表示負(fù)無(wú)窮和正無(wú)窮 		 (11)移除指定排名范圍的元素 		ZREMRANGEBYRANK key start stop 		 (12)移除指定分值范圍的元素 		ZREMRANGEBYSCORE key min max 		 (13)返回集合中元素個(gè)數(shù) 		ZCARD key 		 (14)返回指定范圍中元素的個(gè)數(shù) 		ZCOUNT key min max 		ZCOUNT fruits 4 7 		ZCOUNT fruits (4 7  (15)求并集 	ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]numkeys必須指定key的數(shù)量 WEIGHTS選項(xiàng),與前面設(shè)定的key對(duì)應(yīng),對(duì)應(yīng)key中每一個(gè)score都要乘以這個(gè)權(quán)重 AGGREGATE選項(xiàng),指定并集結(jié)果的聚合方式 SUM:將所有集合中某一個(gè)元素的score值之和作為結(jié)果集中該成員的score值 MIN:將所有集合中某一個(gè)元素的score值中最小值作為結(jié)果集中該成員的score值 MAX:將所有集合中某一個(gè)元素的score值中最大值作為結(jié)果集中該成員的score值  (16)求交集 	ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]numkeys指定key的數(shù)量,必須 WEIGHTS選項(xiàng),與前面設(shè)定的key對(duì)應(yīng),對(duì)應(yīng)key中每一個(gè)score都要乘以這個(gè)權(quán)重 AGGREGATE選項(xiàng),指定并集結(jié)果的聚合方式 SUM:將所有集合中某一個(gè)元素的score值之和作為結(jié)果集中該成員的score值 MIN:將所有集合中某一個(gè)元素的score值中最小值作為結(jié)果集中該成員的score值 MAX:將所有集合中某一個(gè)元素的score值中最大值作為結(jié)果集中該成員的score值

      七、Redis持久化

      Redis持久化是指將數(shù)據(jù)從掉電易失的內(nèi)存存放到能夠永久存儲(chǔ)的設(shè)備上
      Redis持久化兩種方式:RDB(Redis DB) 和 AOF(AppendOnlyFile)

      1、Redis持久化-RDB

      在默認(rèn)情況下,Redis 將數(shù)據(jù)庫(kù)快照保存在名字為 dump.rdb的二進(jìn)制文件中

      (1)RDB使用策略

      • 自動(dòng):按照配置文件中的條件滿足就執(zhí)行BGSAVE
        save 60 10000,Redis要滿足在60秒內(nèi)至少有10000個(gè)鍵被改動(dòng),會(huì)自動(dòng)保存一次
      • 手動(dòng):客戶端發(fā)起SAVE、BGSAVE命令

      注意:RDB策略會(huì)容易造成數(shù)據(jù)丟失

      (2)SAVE命令

      在redis 客戶端使用 save命令用于將數(shù)據(jù)持久化的保存到disk(磁盤(pán))中,但執(zhí)行該命令時(shí)會(huì)阻塞Redis服務(wù),無(wú)法響應(yīng)客戶端請(qǐng)求,也就是在服務(wù)器執(zhí)行save命令期間,Redis服務(wù)器不允許執(zhí)行其它的命令直到save命令執(zhí)行完,執(zhí)行save命令會(huì)創(chuàng)建新的dump.rdb替代舊文件。

      (3)BGSAVE命令

      (該命令是在后臺(tái)執(zhí)行的,是一個(gè)異步命令)
      在redis客戶端 使用 bgsave命令時(shí),不會(huì)阻塞Redis服務(wù),也就是非阻塞,Redis服務(wù)正常接收處理客戶端請(qǐng)求,并且Redis會(huì)folk()一個(gè)新的子進(jìn)程來(lái)創(chuàng)建RDB文件,子進(jìn)程處理完后會(huì)向父進(jìn)程發(fā)送一個(gè)信號(hào),通知它處理完畢,父進(jìn)程用新的dump.rdb替代舊文件

      (4)SAVE 和 BGSAVE 命令的區(qū)別

      • SAVE不用創(chuàng)建新的進(jìn)程,速度略快
      • BGSAVE需要?jiǎng)?chuàng)建子進(jìn)程,消耗額外的內(nèi)存
      • SAVE適合停機(jī)維護(hù),服務(wù)低谷時(shí)段
      • BGSAVE適合線上執(zhí)行

      (5)RDB持久化的優(yōu)缺點(diǎn)

      優(yōu)點(diǎn)

      • 完全備份,不同時(shí)間的數(shù)據(jù)集備份可以做到多版本恢復(fù)
      • 緊湊的單一文件,方便網(wǎng)絡(luò)傳輸,適合災(zāi)難恢復(fù)
      • 恢復(fù)大數(shù)據(jù)集速度較AOF快

      缺點(diǎn)

      • 會(huì)丟失最近寫(xiě)入、修改的而未能持久化的數(shù)據(jù)
      • folk過(guò)程非常耗時(shí),會(huì)造成毫秒級(jí)不能響應(yīng)客戶端請(qǐng)求

      2、Redis持久化-AOF

      Append only file(AOF),該方式采用追加的方式保存數(shù)據(jù),默認(rèn)保存的文件appendonly.aof;該方式會(huì)記錄所有的寫(xiě)操作命令,在服務(wù)啟動(dòng)的時(shí)候使用這些命令就可以還原數(shù)據(jù)庫(kù);調(diào)整AOF持久化策略,可以在服務(wù)出現(xiàn)故障時(shí),不丟失任何數(shù)據(jù),也可以丟失一秒的數(shù)據(jù)。相對(duì)于RDB方式損失要小得多

      (1)AOF寫(xiě)入機(jī)制

      • AOF方式不能保證絕對(duì)不丟失數(shù)據(jù)
      • 目前常見(jiàn)的操作系統(tǒng)中,執(zhí)行系統(tǒng)調(diào)用write函數(shù),將一些內(nèi)容寫(xiě)入到某個(gè)文件里面時(shí),為了提高效率,系統(tǒng)通常不會(huì)直接將內(nèi)容寫(xiě)入硬盤(pán)里面,而是先將內(nèi)容放入一個(gè)內(nèi)存緩沖區(qū)(buffer)里面,等到緩沖區(qū)被填滿,或者用戶執(zhí)行fsync調(diào)用和fdatasync調(diào)用時(shí)才將儲(chǔ)存在緩沖區(qū)里的內(nèi)容真正的寫(xiě)入到硬盤(pán)里,而在未寫(xiě)入磁盤(pán)之前,數(shù)據(jù)可能會(huì)丟失。

      (2) 寫(xiě)入磁盤(pán)的策略

      在redis.conf文件中的appendfsync選項(xiàng),這個(gè)選項(xiàng)的值可以是always、everysec或者no

      • Always:服務(wù)器每寫(xiě)入一個(gè)命令,就調(diào)用一次fdatasync,將緩沖區(qū)里面的命令寫(xiě)入到硬盤(pán)。這種模式下,服務(wù)器出現(xiàn)故障,也不會(huì)丟失任何已經(jīng)成功執(zhí)行的命令數(shù)據(jù)
      • Everysec(默認(rèn)):服務(wù)器每一秒重調(diào)用一次fdatasync,將緩沖區(qū)里面的命令寫(xiě)入到硬盤(pán)。這種模式下,服務(wù)器出現(xiàn)故障,最多只丟失一秒鐘內(nèi)的執(zhí)行的命令數(shù)據(jù)
      • No:服務(wù)器不主動(dòng)調(diào)用fdatasync,由操作系統(tǒng)決定何時(shí)將緩沖區(qū)里面的命令寫(xiě)入到硬盤(pán)。這種模式下,服務(wù)器遭遇意外停機(jī)時(shí),丟失命令的數(shù)量是不確定的

      運(yùn)行速度:always的速度慢,everysec和no都很快

      (3)AOF重寫(xiě)機(jī)制

      • AOF文件過(guò)大
      • 合并重復(fù)的操作,AOF會(huì)使用盡可能少的命令來(lái)記錄

      重寫(xiě)的過(guò)程

      • folk一個(gè)子進(jìn)程負(fù)責(zé)重寫(xiě)AOF文件
      • 子進(jìn)程會(huì)創(chuàng)建一個(gè)臨時(shí)文件寫(xiě)入AOF信息
      • 父進(jìn)程會(huì)開(kāi)辟一個(gè)內(nèi)存緩沖區(qū)接收新的寫(xiě)命令
      • 子進(jìn)程重寫(xiě)完成后,父進(jìn)程會(huì)獲得一個(gè)信號(hào),將父進(jìn)程接收到的新的寫(xiě)操作由子進(jìn)程寫(xiě)入到臨時(shí)文件中
      • 新文件替代舊文件

      注意:如果寫(xiě)入操作的時(shí)候出現(xiàn)故障導(dǎo)致命令寫(xiě)半截,可以使用redis-check-aof工具修復(fù)

      (4)AOF重寫(xiě)觸發(fā)

      • 手動(dòng):客戶端向服務(wù)器發(fā)送BGREWRITEAOF命令
      • 自動(dòng):配置文件中的選項(xiàng),自動(dòng)執(zhí)行BGREWRITEAOF命令
        • auto-aof-rewrite-min-size < size >,觸發(fā)AOF重寫(xiě)所需的最小體積:只要在AOF文件的體積大于等于size時(shí),才會(huì)考慮是否需要進(jìn)行AOF重寫(xiě),這個(gè)選項(xiàng)用于避免對(duì)體積過(guò)小的AOF文件進(jìn)行重寫(xiě)
        • auto-aof-rewrite-percentage < percent >,指定觸發(fā)重寫(xiě)所需的AOF文件體積百分比:當(dāng)AOF文件的體積大于auto-aof-rewrite-min-size指定的體積,并且超過(guò)上一次重寫(xiě)之后的AOF文件體積的percent %時(shí),就會(huì)觸發(fā)AOF重寫(xiě)。(如果服務(wù)器剛剛啟動(dòng)不久,還沒(méi)有進(jìn)行過(guò)AOF重寫(xiě),那么使用服務(wù)器啟動(dòng)時(shí)載入的AOF文件的體積來(lái)作為基準(zhǔn)值)。將這個(gè)值設(shè)置為0表示關(guān)閉自動(dòng)AOF重寫(xiě)

      舉例:

      	auto-aof-rewrite-percentage 100 	auto-aof-rewrite-min-size 64mb 	 	當(dāng)AOF文件大于64MB時(shí)候,可以考慮重寫(xiě)AOF文件 	只有當(dāng)AOF文件的增量大于起始size的100%時(shí), 						也就是文件大小翻了一倍時(shí),啟動(dòng)重寫(xiě)

      (5)AOF持久化的優(yōu)缺點(diǎn)

      優(yōu)點(diǎn)

      • 寫(xiě)入機(jī)制,默認(rèn)fysnc每秒執(zhí)行,性能很好不阻塞服務(wù),最多丟失一秒的數(shù)據(jù)
      • 重寫(xiě)機(jī)制,優(yōu)化AOF文件
      • 如果誤操作了(例如:FLUSHALL等),只要AOF未被重寫(xiě),停止服務(wù)移除AOF文件尾部FLUSHALL命令,重啟Redis,可以將數(shù)據(jù)集恢復(fù)到 FLUSHALL 執(zhí)行之前的狀態(tài)

      缺點(diǎn)

      • 相同數(shù)據(jù)集,AOF文件體積較RDB大了很多
      • 恢復(fù)數(shù)據(jù)庫(kù)速度叫RDB慢(文本,命令重演)

      八、idea使用Jedis連接Redis

      首先需要在idea中的maven中的依賴配置文件pom.xml中導(dǎo)入jedis的依賴包,這里北使用的3.0版本的redis,那么導(dǎo)入的jedis依賴也是對(duì)應(yīng)版本的;若是其它版本可以在maven倉(cāng)庫(kù)中選擇對(duì)應(yīng)版本,鏈接地址:https://mvnrepository.com/artifact/redis.clients/jedis

      <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->         <dependency>             <groupId>redis.clients</groupId>             <artifactId>jedis</artifactId>             <version>3.0.0</version>         </dependency>

      idea中建立連接

      import redis.clients.jedis.Jedis;/**  * jdbc:是一種連接關(guān)系型數(shù)據(jù)的規(guī)范  * redis: 是kv結(jié)構(gòu)的非關(guān)系型數(shù)據(jù)庫(kù)(沒(méi)有sql語(yǔ)句),使用jedis連接  */public class jedistest {     public static void main(String[] args) {         //創(chuàng)建redis連接         Jedis jedis = new Jedis("master", 6379);         //獲取數(shù)據(jù)         String name = jedis.get("name");         System.out.println(name);     }}

      Redis從環(huán)境搭建到熟練使用(總結(jié)分享)

      推薦學(xué)習(xí):Redis視頻教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)