尚硅谷 Redis 數(shù)據(jù)庫_第1頁
尚硅谷 Redis 數(shù)據(jù)庫_第2頁
尚硅谷 Redis 數(shù)據(jù)庫_第3頁
尚硅谷 Redis 數(shù)據(jù)庫_第4頁
尚硅谷 Redis 數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論