版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
尚硅谷Redis數(shù)據(jù)庫
★:了解、可以明確描述內(nèi)容
★★:熟悉、工作中經(jīng)常會(huì)用到
必背、面試中經(jīng)常會(huì)問到
1.Redis入門
1.1.什么是Redis?★★★
1)是完全開源免費(fèi)的,用C語言編寫的,遵守BSD開源協(xié)議,是一個(gè)基于內(nèi)存運(yùn)行的、高性能的、并支
持持久化和分布式的NoSQL數(shù)據(jù)庫,是當(dāng)前最熱門的NoSQL(NotOnlySQL)數(shù)據(jù)庫之一,也被人們
稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
2)Redis與其他Key-Value數(shù)據(jù)庫有以下三個(gè)特點(diǎn):(常對(duì)比與Memcached)
1.Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用
2.Redis不僅支持簡單的key-value類型(string)的數(shù)據(jù),同時(shí)還提供list,set,zset,hash數(shù)據(jù)結(jié)
構(gòu)的存儲(chǔ)
3.Redis支持master-slave模式的主從復(fù)制和事務(wù)操作
1.2.Redis與其他數(shù)據(jù)庫對(duì)比★★★
名稱類型數(shù)據(jù)存儲(chǔ)選項(xiàng)查詢類型附加功能
使用內(nèi)存存儲(chǔ)的每種數(shù)據(jù)類型都有自己的專屬命令,另發(fā)布與訂閱,主從復(fù)制,持
Redis字符串、列表、集合、散列表、有序集合
非關(guān)系數(shù)據(jù)庫外還有批量操作和不完全的事務(wù)支持久化,腳本,單線程
使用內(nèi)存存儲(chǔ)的創(chuàng)建命令、讀取命令、更新命令、刪除為提升性能而設(shè)的多線程
Memcached鍵值之間的映射
鍵值緩存命令以及其他幾個(gè)命令服務(wù)器
每個(gè)數(shù)據(jù)庫可以包含多個(gè)表,每個(gè)表可以
SELECT.INSERT.UPDATE.DELETE.支持ACID性質(zhì)(InnoDB),
MySQL關(guān)系數(shù)據(jù)庫包含多個(gè)行;可以處理多個(gè)表的視圖;支
函數(shù)、存儲(chǔ)過程主從復(fù)制和主主復(fù)制
持空間和第三方擴(kuò)展
每個(gè)數(shù)據(jù)庫可以包含多個(gè)表,每個(gè)表可以
SELECT.INSERT.UPDATE、DELETE.支持ACID性質(zhì)、主從復(fù)制、
PostgreSQL關(guān)系數(shù)據(jù)庫包含多個(gè)行;可以處理多個(gè)表的視圖;支
內(nèi)置函數(shù)、自定義的存儲(chǔ)過程由第三方支持的多主復(fù)制
持空間和第三方擴(kuò)展,支持可定制類型
使用硬盤存儲(chǔ)的每個(gè)數(shù)據(jù)庫可以包含多個(gè)表,每個(gè)表可以創(chuàng)建命令、讀取命令、更新命令、刪除支持map-reduce操作,主
MongoDB
非關(guān)系文檔存儲(chǔ)包含多個(gè)無schema的BSON文檔命令、條件查詢命令等從復(fù)制,分片,空間索引
1.3.Redis應(yīng)用場景★★★
1)熱數(shù)據(jù)緩存(熱點(diǎn)數(shù)據(jù)、熱點(diǎn)頁面)
2)隊(duì)列(分布式爬蟲、消息隊(duì)列、秒殺)
3)排行榜(PK榜、土豪榜)
4)數(shù)據(jù)去重(爬蟲列表去重)
5)最新列表(取最新N個(gè)數(shù)據(jù)的操作)
6)定時(shí)器、計(jì)數(shù)器(登錄多久清除數(shù)據(jù)、多久之內(nèi)能訪問多少次)
1.4.Redis不適合的場景
1)數(shù)據(jù)量太大的不合適,成本太高
2)訪問頻率太低不合適,浪費(fèi)資源
3)涉及復(fù)雜查詢的不合適,簡單的Key-Value存儲(chǔ)
1.5.官方網(wǎng)站
1)英文官網(wǎng):https://redis.io/
2)中文網(wǎng)站:http:〃/
1.6.安裝Redis★★
1.5.1Windows系統(tǒng)
由于企業(yè)里面做Redis開發(fā),99%都是Linux版的運(yùn)用和安裝,幾乎不會(huì)涉及到Windows版。
而且Redis沒有官方的Windows版本,但是微軟開源技術(shù)團(tuán)隊(duì)(MicrosoftOpenTechgroup)開發(fā)和維
護(hù)著這個(gè)Win64的版本。更多信息請(qǐng)參考https:〃/MicrosoftArchive/redis。
衙
Redisfor
windows.zip
1.5.2Ubuntu系統(tǒng)
1)使用apt命令安裝
1.安裝命令
jiaxing@atguigu:-$sudoaptinstallredis-server
2)使用make編譯安裝
1.安裝命令
wgethttp://download.redis.io/releases/redis-4.0.10.tar.gz
tarxzfredis-4.0.10.tar.gz
cdredis-4.0.10
make
3)報(bào)錯(cuò)處理
E:無法獲得鎖/var/lib/dpkg/lock-open(11:Resourcetemporarilyunavailable)
E:無法鎖定管理目錄(/var/lib/dpkg/),是否有其他進(jìn)程正占用它?
解決方法一:
jiaxing@atguigu:-$ps-aux|grepapt
root57650.01,01820415504?SN04:020:00apt-get-qq-d
找到最后一列以apt-get開頭的進(jìn)程
jiaxing@atguigu:-$sudokill-9該進(jìn)程的PID
解決方法二:
sudorm/var/cache/apt/archives/lock
sudorm/var/lib/dpkg/lock
4)報(bào)錯(cuò)處理2
E:Sub-process/usr/bin/dpkgreturnedanerrorcode(1)
解決方法一:
sudomv/var/lib/dpkg/info/var/lib/dpkg/info.bak
sudomkdir/var/lib/dpkg/info
sudoaptupdate
sudoapt-finstallredis-server
sudomv/var/lib/dpkg/info/*/var/lib/dpkg/info.bak
sudorm-rf/var/lib/dpkg/info
sudomv/var/lib/dpkg/info.bak/var/lib/dpkg/info
1.7.運(yùn)行Redis
1.啟動(dòng)Redis服務(wù)
jiaxing@atguigu:-$redis-server
2.啟動(dòng)Redis服務(wù)并指定配置文件
jiaxing@atguigu:~$sudoredis-server/etc/redis/redis.conf
3.啟動(dòng)Redis客戶端
jiaxing@atguigu:~$redis-cli
4.查看Redis啟動(dòng)配置
jiaxing@atguigu:-$redis-cli-h
5.測試Redis服務(wù)器正常運(yùn)行
:6379>ping
6.關(guān)閉Redis服務(wù)器
:6379>SHUTDOWN
1.8.基礎(chǔ)知識(shí)與命令★
1.Redis-benchmark性能測試
2.Redis-check-rdb#檢查并修復(fù)RDB文件
3.Redis-check-aof#檢查并修復(fù)AOF文件
4.Select切換數(shù)據(jù)庫(Redis默認(rèn)有16個(gè)數(shù)據(jù)庫,0-15)
5.DBSIZE查看當(dāng)前數(shù)據(jù)庫Key數(shù)量
6.Keys*查看當(dāng)前數(shù)據(jù)庫所有Key
7.FLUSHDB清空當(dāng)前庫
8.FLUSHALL清空所有庫
1.9.默認(rèn)啟動(dòng)后的五條警告★★
1.Warning:noconfigfilespecified,usingthedefaultconfig.Inordertospecifyaconfigfileuse
redis-server/path/to/redis.conf
沒有指定啟動(dòng)配置文件,正在使用默認(rèn)配置文件啟動(dòng),如果需要配置可以使用redis-server
/path/to/redis.conf啟動(dòng)redis
2.Increasedmaximumnumberofopenfilesto10032(itwasoriginallysetto1024).
將最大文件打開數(shù)設(shè)置為10032,當(dāng)前設(shè)置為1024
解決方案:
在終端執(zhí)行ulimit-n10032
3.WARNING:TheTCPbacklogsettingof511cannotbeenforcedbecause
/proc/sys/net/core/somaxconnissettothelowervalueof128.
臨時(shí)解決方法:(即下次啟動(dòng)還需要修改此值)
echo511>/proc/sys/net/core/somaxconn
永久解決方法:
將其寫入/etc/sysctl.conf文件中。
net.core,somaxconn=2048
然后在終端中執(zhí)行sysctl-p
baklog參數(shù)實(shí)際控制的是已經(jīng)3次握手成功的還在acceptqueue的大小。
詳細(xì)鏈接:https:〃blog,csdn.net/raintungli/article/detai1s/37913765
4.WARNINGovercommit_memoryissetto0!Backgroundsavemayfailunderlowmemorycondition.To
fixthisissueadd'vm.overcommit_memory=1'to/etc/sysctl.confandthenrebootorrunthe
command'sysctlvm.overcommit_memory=l'forthistotakeeffect.
overcommit_memory參數(shù)設(shè)置為0!在內(nèi)存不足的情況下,后臺(tái)程序save可能失敗。建議在文件/etc/sysctl.conf
中將overcommit_memory修改為1。
overcommit_memory=0,表示內(nèi)核將檢杳是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用;如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)
允許;否則,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程。
overcommit_memory=l,表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
臨時(shí)解決方法:sysctlvm.overcommit_memory=l
永久解決方法:將vm.overcommitjnemory=1寫入/etc/sysctl.conf文件中。
詳細(xì)鏈接:hlIps:〃blog,csdn.rwl/whyco】d/arlicle/dclails/21388455
5.WARNINGyouhaveTransparentHugePages(THP)supportenabledinyourkernel.Thiswillcreate
latencyandmemoryusageissueswithRedis.Tofixthisissuerunthecommand'echonever>
/sys/kernel/mm/transparent_hugepage/enabled'asroot,andaddittoyour/etc/rc.localinorderto
retainthesettingafterareboot.RedismustberestartedafterTHPisdisabled.
使用的是透明大頁,可能導(dǎo)致redis延遲和內(nèi)存使用問題。執(zhí)行echonever>
/sys/kernel/mm/transparent_hugepage/enabled修復(fù)該問題。
臨時(shí)解決方法:
echonever>/sys/kernel/mm/transparent_hugepage/enabledo
永久解決方法:
將transparent_hugepage=never寫入/etc/grub.conf文件中。
詳細(xì)鏈接:http:〃www.cnblogs.com/kerrycode/archive/2015/07/23/4670931.html
簡單來說內(nèi)存可管理的最小單位是page,一個(gè)page通常是4kb,那1M內(nèi)存就會(huì)有256個(gè)page,CPU通過內(nèi)置的內(nèi)存
管理單元管理page表記錄。HugePages就是表示page的大小已超過4kb了,一般是2M到1G,它的出現(xiàn)主要是為了
管理超大內(nèi)存。而THP就是管理HugePages的一個(gè)抽象層次,根據(jù)一些資料顯示THP會(huì)影響性能,所以一般建議關(guān)
閉此功能。
1.10.RDM圖形可視化界面軟件
尚硅谷_RDM安裝
與使用(Windows
2.Redis數(shù)據(jù)類型
2.1.Key關(guān)鍵字★★
2.1.1.常用命令
1.KEYS*:查看所有key
:6379>KEYS*
2.EXISTSkeyname:判斷key是否存在
:6379>EXISTSmylist
3.MOVEkeydb:將key移動(dòng)到指定db
:6379>MOVEmylist1
4.EXPIREkeyseconds:為key設(shè)置存活期
:6379>EXPIREatguigu9999
5.TTLkey:查看key還有多少秒過期,永不過期,-2已過期
:6379>TTLatguigu
6.TYPEkey:查看指定key的類型
:6379>TYPEatguigu
2.2.String(字符串)★★
2.2.1,什么是String類型
String是Redis最基本的類型,一個(gè)Key對(duì)應(yīng)一個(gè)Value。Value最多可以是512M
String類型是二進(jìn)制安全的。意思是Redis的String可以包含任何數(shù)據(jù)。比如JPG圖片或者序列化的對(duì)象。
2.2.2.常用命令
設(shè)置鍵值SETkeyvalue
將字符串值value關(guān)聯(lián)到key。如果key已經(jīng)持有其他值,SET就覆寫舊值,無視類型。
獲取值GETkey
返回key所關(guān)聯(lián)的字符串值。如果key不存在那么返回特殊值nil。
假如key儲(chǔ)存的值不是字符串類型,返回一個(gè)錯(cuò)誤,因?yàn)镚ET只能用于處理字符串值。
刪除值DELkey
刪除給定的一個(gè)或多個(gè)key,不存在的key會(huì)被忽略。
追力口值A(chǔ)PPENDkeyvalue
如果key已經(jīng)存在并且是一個(gè)字符串,APPEND命令將value追加到key原來的值的末尾。
如果key不存在,APPEND就簡單地將給定key設(shè)為value,就像執(zhí)行SETkeyvalue一樣。
查看長度STRLENkey
返回key所儲(chǔ)存的字符串值的長度。當(dāng)key儲(chǔ)存的不是字符串值時(shí),返回一個(gè)錯(cuò)誤。
將key增加1INCRkey
將key中儲(chǔ)存的數(shù)字值增1,如果key不存在,那么key的值會(huì)先被初始化為0,然后再執(zhí)行
INCR操作。
將key減少1DECRkey
將key中儲(chǔ)存的數(shù)字值減1。如果key不存在,那么key的值會(huì)先被初始化為0,然后再執(zhí)行
DECR操作。
將key增加指定值INCRBYkeyincrement
將key所儲(chǔ)存的值加上增量increment。如果key不存在,那么key的值會(huì)先被初始化為0,
然后再執(zhí)行INCRBY命令。
將key減少指定值DECRBYkeydecrement
將key所儲(chǔ)存的值減去減量decrement。如果key不存在,那么key的值會(huì)先被初始化為0,
然后再執(zhí)行DECRBY操作。
返回指定范圍的值GETRANGEkeystartend
返回key中字符串值的子字符串,字符串的截取范圍由start和end兩個(gè)偏移量決定(包括start
和end在內(nèi))。負(fù)數(shù)偏移量表示從字符串最后開始計(jì)數(shù),-1表示最后一個(gè)字符,-2表示倒數(shù)第二
個(gè),以此類推。
設(shè)置指定范圍的值SETRANGEkeyoffsetvalue
用value參數(shù)覆寫(overwrite)給定key所儲(chǔ)存的字符串值,從偏移量offset開始。不存在的key
當(dāng)作空白字符串處理。
SETRANGE命令會(huì)確保字符串足夠長以便將value設(shè)置在指定的偏移量上,如果給定key原來儲(chǔ)存
的字符串長度比偏移量小(比如字符串只有5個(gè)字符長,但你設(shè)置的offset是10),那么原字符
和偏移量之間的空白將用零字節(jié)(zerobytes,"\x00")來填充。
設(shè)置鍵值并增加存活時(shí)間SETEXkeysecondsvalue
將值value關(guān)聯(lián)到key,并將key的生存時(shí)間設(shè)為seconds(以秒為單位)。如果key已經(jīng)存在,
SETEX命令將覆寫舊值。
不存在時(shí)設(shè)置鍵值SETNXkeyvalue
將key的值設(shè)為value,當(dāng)且僅當(dāng)key不存在。若給定的key已經(jīng)存在,則SETNX不做任何動(dòng)
作。SETNX是[SETifNoteXistsJ(如果不存在,則SET)的簡寫。
批量設(shè)置鍵值MSETkeyvalue[keyvalue...]
同時(shí)設(shè)置一個(gè)或多個(gè)key-value對(duì)。
如果某個(gè)給定key已經(jīng)存在,那么MSET會(huì)用新值覆蓋原來的舊值,如果這不是你所希望的效果,請(qǐng)考慮使用
MSETNX命令:它只會(huì)在所有給定key都不存在的情況下進(jìn)行設(shè)置操作。
MSET是一個(gè)原子性(atomic)操作,所有給定key都會(huì)在同一時(shí)間內(nèi)被設(shè)置,某些給定key被更新而另一些給定
key沒有改變的情況,不可能發(fā)生。
批量獲取值MGETkey[key...]
返回所有(一個(gè)或多個(gè))給定key的值。如果給定的key里面,有某個(gè)key不存在,那么這個(gè)key返回特殊值
nilo因此,該命令永不失敗。
不存在時(shí)批量設(shè)置鍵值MSETNXkeyvalue[keyvalue...]
同時(shí)設(shè)置一個(gè)或多個(gè)key-value對(duì),當(dāng)且僅當(dāng)所有給定key都不存在。
即使只有一個(gè)給定key已存在,MSETNX也會(huì)拒絕執(zhí)行所有給定key的設(shè)置操作。
MSETNX是原子性的,因此它可以用作設(shè)置多個(gè)不同key表示不同字段(field)的唯一性邏輯對(duì)象(uniquelogic
object),所有字段要么全被設(shè)置,要么全不被設(shè)置。
返回值并設(shè)置鍵值GETSETkeyvalue
將給定key的值設(shè)為value,并返回key的舊值(oldvalue)。當(dāng)key存在但不是字符串類型時(shí),返回一個(gè)錯(cuò)
誤。
2.3.List(列表)★★
2.3.1.什么是List類型
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾
部(右邊)。它的底層實(shí)際是個(gè)鏈表
2.3.2.常用命令
在頭/尾部插入數(shù)據(jù)LPUSH/RPUSHkeyvalue
將一個(gè)或多個(gè)值value插入到列表key的表頭
如果有多個(gè)value值,那么各個(gè)value值按從左到右的順序依次插入到表頭:比如說,對(duì)空列表mylist執(zhí)行命
令LPUSHmylistabc.列表的值將是cba,這等同于原子性地執(zhí)行LPUSHmylista、LPUSHmylistb和
LPUSHmylistc三個(gè)命令。
如果key不存在,一個(gè)空列表會(huì)被創(chuàng)建并執(zhí)行LPUSH操作。
返回指定范圍的元素LRANGEkeystartstop
返回列表key中指定區(qū)間內(nèi)的元素,區(qū)間以偏移量start和stop指定。
下標(biāo)(index)參數(shù)start和stop都以0為底,也就是說,以。表示列表的第一個(gè)元素,以1表示列表的第二個(gè)
元素,以此類推。
你也可以使用負(fù)數(shù)下標(biāo),以-1表示列表的最后一個(gè)元素,-2表示列表的倒數(shù)第二個(gè)元素,以此類推。
注意LRANGE命令和編程語言區(qū)間函數(shù)的區(qū)別
假如你有一個(gè)包含一百個(gè)元素的列表,對(duì)該列表執(zhí)行LRANGElist010,結(jié)果是一個(gè)包含11個(gè)元素的列表,這表
明stop下標(biāo)也在LRANGE命令的取值范圍之內(nèi)(閉區(qū)間),這和某些語言的區(qū)間函數(shù)可能不一致,比如Ruby的
Range.new、Array#slice和Python"Jrange()函數(shù)
超出范圍的下標(biāo)
超出范圍的下標(biāo)值不會(huì)引起錯(cuò)誤。
如果start下標(biāo)比列表的最大下標(biāo)end(LLENlist減去1)還要大,那么LRANGE返回一個(gè)空列表。
如果stop下標(biāo)比end下標(biāo)還要大,Redis將stop的值設(shè)置為end。
在頭/尾部移除數(shù)據(jù)LPOP/RPOPkey
移除并返回列表key的頭元素。
返回指定下標(biāo)的數(shù)據(jù)LINDEXkeyvalue
返回列表key中,下標(biāo)為index的元素。
下標(biāo)(index)參數(shù)start和stop都以0為底,也就是說,以8表示列表的第一個(gè)元素,以1表示列表的第二個(gè)
元素,以此類推。
你也可以使用負(fù)數(shù)下標(biāo),以-1表示列表的最后一個(gè)元素,-2表示列表的倒數(shù)第二個(gè)元素,以此類推。
如果key不是列表類型,返回一個(gè)錯(cuò)誤。
返回列表數(shù)據(jù)長度LLENkey
返回列表key的長度。如果key不存在,則key被解釋為一個(gè)空列表,返回0.
根據(jù)數(shù)量移除指定的值LREMkeycountvalue
根據(jù)參數(shù)count的值,移除列表中與參數(shù)value相等的元素。
count的值可以是以下幾種:
count>0:從表頭開始向表尾搜索,移除與value相等的元素,數(shù)量為count。
count<0:從表尾開始向表頭搜索,移除與value相等的元素,數(shù)量為count的絕對(duì)值。
count=0:移除表中所有與value相等的值。
只保留范圍內(nèi)數(shù)據(jù)LTRIMkeystartstop
對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說,讓.列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。
舉個(gè)例子,執(zhí)行命令LTRIMlist02,表示只保留列表list的前三個(gè)元素,其余元素全部刪除。
下標(biāo)(index)參數(shù)start和stop都以0為底,也就是說,以0表示列表的第一個(gè)元素,以1表示列表的第二個(gè)
元素,以此類推。
你也可以使用負(fù)數(shù)下標(biāo),以-1表示列表的最后一個(gè)元素,-2表示列表的倒數(shù)第二個(gè)元素,以此類推。
從尾部移除并添加到指定頭部RPOPLPUSHsourcedestination
命令RPOPLPUSH在一個(gè)原子時(shí)間內(nèi),執(zhí)行以下兩個(gè)動(dòng)作:
將列表source中的最后一個(gè)元素(尾元素)彈出,并返回給客戶端。
將source彈出的元素插入到列表destination,作為destination列表的的頭元素。
舉個(gè)例子,你有兩個(gè)列表source和destination,source列表有元素a,b,c,destination列表有元素x,
V>z,執(zhí)行RPOPLPUSHsourcedestination之后,source列表包含元素a,b,destination列表包含元
素c,x,y,z,并且元素c會(huì)被返回給客戶端。
如果source不存在,值nil被返回,并且不執(zhí)行其他動(dòng)作。
如果source和destination相同,則列表中的表尾元素被移動(dòng)到表頭,并返回該元素,可以把這種特殊情況視作
列表的旋轉(zhuǎn)(rotation)操作。
設(shè)置指定下標(biāo)的值LSETkeyindexvalue
將列表key下標(biāo)為index的元素的值設(shè)置為value。
當(dāng)index參數(shù)超出范圍,或?qū)σ粋€(gè)空列表(key不存在)進(jìn)行LSET時(shí),返回一個(gè)錯(cuò)誤。
在指定值得前/后插入值LINSERTkeyBEFORE|AFTERpivotvalue
將值value插入到列表key當(dāng)中,位于值pivot之前或之后。
當(dāng)pivot不存在于列表key時(shí),不執(zhí)行任何操作。
當(dāng)key不存在時(shí),key被視為空列表,不執(zhí)行任何操作。
2.4.Hash(哈希)
2.4.1.什么是Hash類型
Redishash是一"鍵值對(duì)集合。是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)
象。
2.4.2.常用命令
設(shè)置單個(gè)鍵值HSETkeyfieldvalue
返回哈希表key中給定域field的值。
獲取單個(gè)鍵值HGETkeyfield
將哈希表key中的域field的值設(shè)為value。如果key不存在,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行HSET操作。
設(shè)置多個(gè)鍵值HMSETkeyfieldvalue
返回哈希表key中,一個(gè)或多個(gè)給定域的值。如果給定的域不存在于哈希表,那么返回一個(gè)nil值。
因?yàn)椴淮嬖诘膋ey被當(dāng)作一個(gè)空哈希表來處理,所以對(duì)一個(gè)不存在的key進(jìn)行HMGET操作將返回一個(gè)只帶有nil
值的表。
獲取多個(gè)鍵值HMGETkeyfield
同時(shí)將多個(gè)field-value(域-值)對(duì)設(shè)置到哈希表key中。此命令會(huì)覆蓋哈希表中已存在的域。
如果key不存在,一個(gè)空哈希表被創(chuàng)建并執(zhí)行HMSET操作。
獲取所有鍵值HGETALL
返回哈希表key中,所有的域和值。
在返回值里,緊跟每個(gè)域名(fieldname)之后是域的值(value),所以返回值的長度是哈希表大小的兩倍。
返回指定鍵的長度HLENkey
返回哈希表key中域的數(shù)量。
判斷鍵是否存在HEXISTSkeyfield
查看哈希表key中,給定域field是否存在。
獲取所有鍵HKEYSkey
返回哈希表key中的所有域。
獲取所有值HVALSkey
返回哈希表key中所有域的值。
2.5.Set(集合)
2.5.1,什么是Set類型
Redis的Set是string類型的無序集合。它是通過HashTable實(shí)現(xiàn)的,
2.5.2.常用命令
添加元素SADDkeymember
將一個(gè)或多個(gè)member元素加入到集合key當(dāng)中,已經(jīng)存在于集合的member元素將被忽略。
假如key不存在,則創(chuàng)建一個(gè)只包含member元素作成員的集合。當(dāng)key不是集合類型時(shí),返回一個(gè)錯(cuò)誤。
返回key集合所有元素SMEMBERSkey
返回集合key中的所有成員。不存在的key被視為空集合。
查看元素是否在集合中SISMEMBERkeymember
判斷member元素是否集合key的成員。
返回元素個(gè)數(shù)SCARDkey
返回集合key的基數(shù)(集合中元素的數(shù)量)。
刪除元素SPOPkey[count]
移除并返回集合中的一個(gè)隨機(jī)元素。
如果只想獲取一個(gè)隨機(jī)元素,但不想該元素從集合中被移除的話,可以使用SRANDMEMBER命令。
返回集合之間的差集SDIFFkey[key...]
返回一個(gè)集合的全部成員,該集合是所有給定集合之間的差集。不存在的key被視為空集。
返回集合之間的交集SINTERkey[key...]
返回一個(gè)集合的全部成員,該集合是所有給定集合的交集。不存在的key被視為空集。
當(dāng)給定集合當(dāng)中有一個(gè)空集時(shí),結(jié)果也為空集(根據(jù)集合運(yùn)算定律)。
返回集合之間的并集SUNIONkey[key...]
返回一個(gè)集合的全部成員,該集合是所有給定集合的并集。不存在的key被視為空集。
2.6.ZSet(有序集合)
2.6.1.什么是Zset類型
Rediszset和set一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。
redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重
復(fù)。
2.6.2.常用命令
增加元素ZADDkeyscoremember[scoremember...]
將一個(gè)或多個(gè)member元素及其score值加入到有序集key當(dāng)中。
如果某個(gè)member已經(jīng)是有序集的成員,那么更新這個(gè)member的score值,并通過重新插入這個(gè)member元素,
來保證該member在正確的位置上。
score值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。
如果key不存在,則創(chuàng)建一個(gè)空的有序集并執(zhí)行ZADD操作。
當(dāng)key存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。
返回指定范圍的元素ZRANGEkeystartstop[WITHSCORES]
返回有序集key中,指定區(qū)間內(nèi)的成員。
其中成員的位置按score值遞增(從小到大)來排序。
具有相同score值的成員按字典序(lexicographicalorder)來排列。
如果你需要成員按score值遞減(從大到?。﹣砼帕校?qǐng)使用ZREVRANGE命令。
下標(biāo)參數(shù)start和stop都以0為底,也就是說,以9表示有序集第一個(gè)成員,以1表示有序集第二個(gè)成員,以
此類推。
你也可以使用負(fù)數(shù)下標(biāo),以-1表示最后一個(gè)成員,-2表示倒數(shù)第二個(gè)成員,以此類推。
超出范圍的下標(biāo)并不會(huì)引起錯(cuò)誤。
比如說,當(dāng)start的值比有序集的最大下標(biāo)還要大,或是start>stop時(shí),ZRANGE命令只是簡單地返回一個(gè)空
列表。
另一方面,假如stop參數(shù)的值比有序集的最大下標(biāo)還要大,那么Redis將stop當(dāng)作最大下標(biāo)來處理。
可以通過使用WITHSCORES選項(xiàng),來讓成員和它的score值-并返回,返回列表以valuel,scorel,
valueN,scoreN的格式表示。
客戶端庫可能會(huì)返回一些更復(fù)雜的數(shù)據(jù)類型,比如數(shù)組、元組等。
返回指定分?jǐn)?shù)范圍的元素ZRANGEBYSCOREkeyminmax[WITHSCORES][LIMIToffsetcount]
返回有序集key中,所有score值介于min和max之間(包括等于min或max)的成員。有序集成員按score值
遞增(從小到大)次序排列。
具有相同score值的成員按字典序(lexicographicalorder)來排列(該屬性是有序集提供的,不需要額外的計(jì)算)。
可選的LIMIT參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間(就像SQL中的SELECTLIMIToffset,count),注意當(dāng)offset很
大時(shí),定位offset的操作可能需要遍歷整個(gè)有序集,此過程最壞復(fù)雜度為0(N)時(shí)間。
可選的WITHSCORES參數(shù)決定結(jié)果集是單單返回有序集的成員,還是將有序集成員及其score值…起返回。
返回元素的個(gè)數(shù)ZCARDkey
返回有序集key的基數(shù)。
刪除指定元素ZREMkeymember[member...]
移除有序集key中的一個(gè)或多個(gè)成員,不存在的成員將被忽略。當(dāng)key存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。
返回指定分?jǐn)?shù)區(qū)間的元素個(gè)數(shù)ZCOUNTkeyminmax
返PI有序集key中,score值在min和max之間(默認(rèn)包括score值等于min或max)的成員的數(shù)量。
返回指定元素的下標(biāo)ZRANKkeymember
返回有序集key中成員member的排名。其中有序集成員按score值遞增(從小到大)順序排列。排名以0為底,
也就是說,score值最小的成員排名為。。
返回指定元素的分?jǐn)?shù)ZSCOREkeymember
返PI有序集key中,成員member的score值。如果member元素不是有序集key的成員,或key不存在,返
回nilo
倒序返回指定元素的下標(biāo)ZREVRANKkeymember
返回有序集key中成員member的排名。其中有序集成員按score值遞減(從大到?。┡判?。排名以0為底,也就
是說,score值最大的成員排名為0
倒序返回指定范圍的元素ZREVRANGEkeystartstop[WITHSCORES]
返回有序集key中,指定區(qū)間內(nèi)的成員。其中成員的位置按score值遞減(從大到?。﹣砼帕?。
倒序返回指定分?jǐn)?shù)范圍的元素ZREVRANGEBYSCOREkeymaxmin[WITHSCORES][LIMIToffsetcount]
返回有序集key中,score值介于max和min之間(默認(rèn)包括等于max或min)的所有的成員。有序集成員按
score值遞減(從大到?。┑拇涡蚺帕?。
3.Redis配置文件(version4.0.10)
3.1.查看配置文件位置
1)Locate命令
jiaxing@atguigu:~$locateredis.conf
2)Whereis命令
jiaxing@atguigu:-$whereisredis
3.2.UNITS單位
井關(guān)于單位的注釋:當(dāng)需要配置內(nèi)存大小時(shí),可以指定單位
#通??梢耘渲脼閘k5GB4M或以下形式:
#
#1k=>1000bytes
#lkb=>1024bytes
#lm=>1000000bytes
#Imb=>1024*1024bytes
#lg=>1000000000bytes
#Igb=>1024^1024*1024bytes
#
#單位不區(qū)分大小寫,所以:LGB1GB1GB都是一樣的
3.3.INCLUDES包含
##################################INCLUDES###################################
#在這里配置包含一個(gè)或多個(gè)conf文件.適用于多個(gè)red”通用的配置,但有部分需要自定義配置
#的redts服務(wù)器時(shí)使用,IncLude可以配置包含其它文件,請(qǐng)有選擇的使用
#
#提示:'incLudes'配置不會(huì)被命令^CONFIGREWRITE'或哨兵模式重寫,由于Redts會(huì)使用
#最后一次配置作為實(shí)際配置,所以最好在con于文件的開頭就配置好Includes信息
#
井相對(duì)應(yīng)的,如果你有興趣重寫配置文件,可以將Includes配置放到最后一行
#
#incLude/path/to/LocaL.conf
#incLude/path/to/other.conf
3.4.NETWORK網(wǎng)絡(luò)★★
1.Bind
#默認(rèn)情況下,redis在server上所有有效的網(wǎng)絡(luò)接口上監(jiān)聽客戶端連接。
#你如果只想讓它在一個(gè)網(wǎng)絡(luò)接口上監(jiān)聽,那你就綁定一個(gè)工P或者多個(gè)1P。
2.Port
#監(jiān)聽端口號(hào),默認(rèn)為6379,如果你設(shè)為0,redis將不在socket上監(jiān)聽任何客戶端連接。
3.Tcp-backlog
#設(shè)置tcp的backlog,backlog其實(shí)是一個(gè)連接隊(duì)列,backlog隊(duì)列總和=未完成三次握手隊(duì)列+已經(jīng)完成三次
握手隊(duì)列。
#在高并發(fā)環(huán)境下你需要一個(gè)高backlog值來避免慢客戶端連接問題。注意Linux內(nèi)核會(huì)將這個(gè)值減小到
/proc/sys/net/core/somaxconn的值,所以需要確認(rèn)增大somaxconn和tcp_max_syn_backlog兩個(gè)值來達(dá)到想
要的效果
4.Timeout
#客戶端和Redis服務(wù)端的連接超時(shí)時(shí)間,默認(rèn)是0,表示永不超時(shí)。
5.Tcp-keepalive
如果值非0,單位是秒,表示將周期性的使用S0_KEEPAL1VE檢測客戶端是否還處于健康狀態(tài),避免服務(wù)器一直阻塞,
官方給出的建議值是60秒
3.5.GENERAL通用★★
1.Deamonize
如果值是“yes”,則啟動(dòng)服務(wù)的時(shí)候是后臺(tái)守護(hù)進(jìn)程形式,如果值是"no”,則相反
2.Supervised
可以通過upstart和systemd管理Redis守護(hù)進(jìn)程,這個(gè)參數(shù)是和具體的操作系統(tǒng)相關(guān)的。
3.Pidfile
配置后臺(tái)運(yùn)行時(shí),redis會(huì)生成pid文件,如果不進(jìn)行配置,默認(rèn)放置在/var/run/redis/redis-server.pid下。運(yùn)
行多個(gè)redis服務(wù)時(shí),需要指定不同的pid文件和端口
4.Loglevel
配置記錄log的等級(jí)。分為四個(gè)等級(jí),debug\verbose\notice\warning
5.Logfile
配置log文件地址,設(shè)置為空時(shí),將日志打印在屏幕上。如果設(shè)置為空且設(shè)置了后臺(tái)運(yùn)行,則將日志發(fā)送至/dev/null
6.Syslog-enabled
要想把日志記錄到系統(tǒng)日志,就把它改成yes,
也可以可選擇性的更新其他的syslog參數(shù)以達(dá)到你的要求
7.Syslog-ident
設(shè)置syslog的identity,即syslog的日志以什么內(nèi)容開頭
8.Syslog-facility
設(shè)置syslog的設(shè)備,必須是USER或者是LOCAL0-LOCAL7之間的值
9.Databases
設(shè)置數(shù)據(jù)庫的數(shù)目。
默認(rèn)數(shù)據(jù)庫是DB0,你可以在每個(gè)連接上使用select<dbid>命令選擇一個(gè)不同的數(shù)據(jù)庫,
但是dbid必須是一個(gè)介于0到databasees-1之間的值
10.Always-show-logo
redis啟動(dòng)時(shí)是否顯示Logo
3.6.SNAPSHOTTING快照
1.Save
RDB是整個(gè)內(nèi)存的壓縮過的Snapshot,RDB的數(shù)據(jù)結(jié)構(gòu),可以配置復(fù)合的快照觸發(fā)條件,
默認(rèn)
save9001
save30010
save6010000
2.stop-writes-on-bgsave-error
當(dāng)持久化出現(xiàn)錯(cuò)誤時(shí),是否依然繼續(xù)進(jìn)行工作,是否終止所有的客戶端write請(qǐng)求。默認(rèn)設(shè)置“yes”表示終止,一旦
snapshot數(shù)據(jù)保存故障,那么此server為只讀服務(wù)。如果為“no",那么此次snapshot將失敗,但下?次snapshot
不會(huì)受到影響,不過如果出現(xiàn)故障,數(shù)據(jù)只能恢復(fù)到〃最近一個(gè)成功點(diǎn)〃
3.rdbcompression
在進(jìn)行數(shù)據(jù)鏡像備份時(shí),是否啟用rdb文件壓縮手段,默認(rèn)為yes。壓縮可能需要額外的cpu開支,不過這能夠有效
的減小rdb文件的大,有利于存儲(chǔ)/備份/傳輸/數(shù)據(jù)恢復(fù)
4.rdbchecksum
在存儲(chǔ)快照后,還可以讓redis使用CRC64算法來進(jìn)行數(shù)據(jù)校驗(yàn),但是這樣做會(huì)增加大約10%的性能消耗,如果希望
獲取到最大的性能提升,可以關(guān)閉此功能
5.dbfilename
RDB備份的文件名
6.dir
redis的工作目錄。redis會(huì)把備份文件也放入到這個(gè)工作目錄
3.7.R印LICATION復(fù)制
3.8.SECURITY安全★★
1.查看數(shù)據(jù)庫密碼
:6379>configgetrequirepass
2,配置數(shù)據(jù)庫密碼
:6379>configsetrequirepass666666
3.輸入密碼
:6379>auth666666
3.9.CLIENTS用戶★★
1.Maxclients
限制同時(shí)連接的客戶端數(shù)量。超過數(shù)量將不再接受新的請(qǐng)求并返回錯(cuò)誤信息
3.10.MEMORYMANAGEMENT內(nèi)存管理★★★
1.Maxmemort
設(shè)置redis能夠使用的最大內(nèi)存。當(dāng)內(nèi)存滿了的時(shí)候,根據(jù)maxmemoi^y-policy進(jìn)行刪除key,當(dāng)無法再刪除時(shí),返回
錯(cuò)誤信息
2.Maxmemort-policy
內(nèi)存刪除規(guī)則。默認(rèn)是noeviction方式
(1)volatile-lru:使用LRU算法移除key,只對(duì)設(shè)置了過期時(shí)間的鍵
(2)allkeys-lru:使用LRU算法移除key
(3)volatile-lfu:使用LFU算法移除key,只對(duì)設(shè)置了過期時(shí)間的鍵
(4)allkeys-lfu:使用LFU算法移除key
(5)volatile-random:在過期集合中移除隨機(jī)的key,只對(duì)設(shè)置了過期時(shí)間的鍵
(6)allkeys-random:移除隨機(jī)的key
(7)volatile-ttl:移除那些TTL值最小的key,即那些最近要過期的key
(8)noeviction:不進(jìn)行移除。針對(duì)寫操作,只是返回錯(cuò)誤信息
LRU:LeastRecentlyUsed,最近最少使用。判斷最近被使用的時(shí)間,目前最遠(yuǎn)的數(shù)據(jù)優(yōu)先被淘汰。
LFU:LeastFrequentlyUsed,最不經(jīng)常使用。在一段時(shí)間內(nèi),數(shù)據(jù)被使用次數(shù)最少的,優(yōu)先被淘汰。
#使用DEBUGOBJECT<key>查看LRU時(shí)間信息
#使用O
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外貿(mào)服裝合同范例
- 就餐券購買合同范例
- 建筑輔料 配送合同范例
- 店面營業(yè)員合同范例
- 套房交易合同范例
- 乙炔設(shè)備采購合同范例
- 地?cái)偣ぞ咿D(zhuǎn)讓合同模板
- 公園噴灌安裝合同范例
- 出租鋼板樁合同模板
- 寫商品出售合同范例
- 舞蹈就業(yè)能力展示
- 心理委員朋輩心理輔導(dǎo)員培訓(xùn)講座
- 【共青團(tuán)工作】2024年共青團(tuán)工作總結(jié)及2025年工作思路
- 2024年云南麻栗坡縣中移鐵通文山分公司招聘筆試參考題庫含答案解析
- 小學(xué)數(shù)學(xué)關(guān)于小學(xué)數(shù)學(xué)課堂實(shí)施畫圖教學(xué)有效策略的研究 論文
- 危重病人心理護(hù)理與溝通技巧
- 遠(yuǎn)程醫(yī)療與慢病管理系統(tǒng)的集成與優(yōu)化
- 家庭醫(yī)生簽約服務(wù)工作規(guī)范
- 服務(wù)器的部署方案
- 四年級(jí)上數(shù)學(xué)計(jì)算題100道可打印
- 醫(yī)務(wù)人員手衛(wèi)生消毒效果監(jiān)測標(biāo)準(zhǔn)操作規(guī)程
評(píng)論
0/150
提交評(píng)論