java基礎(chǔ)-day64-Redis

一吃环、引言


1.1 數(shù)據(jù)庫壓力過大

由于用戶量增大,請求數(shù)量也隨之增大洋幻,數(shù)據(jù)壓力過大

1.2 數(shù)據(jù)不同步

多臺服務(wù)器之間郁轻,數(shù)據(jù)不同步

1.3 傳統(tǒng)鎖失效

多臺服務(wù)器之間的鎖,已經(jīng)不存在互斥性了鞋屈。

二范咨、Redis介紹


2.1 關(guān)于關(guān)系型數(shù)據(jù)庫和NOSQL數(shù)據(jù)庫(鍵值對存儲)

關(guān)系型數(shù)據(jù)庫是基于關(guān)系表的數(shù)據(jù)庫,最終會將數(shù)據(jù)持久化到磁盤上厂庇,而nosql數(shù)據(jù)庫是基于特殊的結(jié)構(gòu)渠啊,并將數(shù)據(jù)存儲到內(nèi)存的數(shù)據(jù)庫。從性能上而言权旷,nosql數(shù)據(jù)庫要優(yōu)于關(guān)系型數(shù)據(jù)庫替蛉,從安全性上而言關(guān)系型數(shù)據(jù)庫要優(yōu)于nosql數(shù)據(jù)庫贯溅,所以在實際開發(fā)中一個項目中nosql和關(guān)系型數(shù)據(jù)庫會一起使用,達到性能和安全性的雙保證躲查。

2.2 Redis介紹

  • 有一位意大利人它浅,在開發(fā)一款LLOOGG的統(tǒng)計頁面,因為MySQL的性能不好镣煮,自己研發(fā)了一款非關(guān)系型數(shù)據(jù)庫姐霍,并命名為Redis。Salvatore典唇。

  • Redis(Remote Dictionary Server)即遠程字典服務(wù)镊折,Redis是由C語言去編寫,Redis是一款基于Key-Value的NoSQL介衔,而且Redis是基于內(nèi)存存儲數(shù)據(jù)的恨胚,Redis還提供了多種持久化機制,性能可以達到110000/s讀取數(shù)據(jù)以及81000/s寫入數(shù)據(jù)炎咖,Redis還提供了主從赃泡,哨兵以及集群的搭建方式,可以更方便的橫向擴展以及垂直擴展乘盼。

Redis之父
image.png

三升熊、Redis安裝


3.1 安裝Redis

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

下載:http://download.redis.io/releases

中文網(wǎng):https://www.redis.net.cn/

官網(wǎng)提供安裝方式如下:(安裝redis編譯的c環(huán)境,此步驟沒有編譯)

Installation

Download, extract and compile Redis with:

$ wget <http://download.redis.io/releases/redis-5.0.5.tar.gz >

tar xzf redis-5.0.5.tar.gz cd redis-5.0.5

$ make

The binaries that are now compiled are available in the src directory. Run Redis with:

$ src/redis-server

You can interact with Redis using the built-in client:

$ src/redis-cli

redis> set foo bar

OK

redis> get foo

"bar"

3.3 安裝步驟

1.把下載好的redis-5.0.4.tar.gz安裝包拷貝到當前虛擬機root目錄下蹦肴,解壓到/usr/local下

[root@localhost ~]# tar -zxvf redis-5.0.4.tar.gz -C /usr/local

2.編譯的c環(huán)境

[root@localhost ~]# yum install gcc-c++

3.進入redis-5.0.4目錄 使用make命令編譯redis(若報錯僚碎,先make distclean猴娩,再make)

[root@localhost redis-5.0.4]# make

4.使用make PREFIX=/usr/local/redis-5.0.4 install命令安裝(安裝后會出現(xiàn)bin目錄)

[root@localhost redis-5.0.4]# make PREFIX=/usr/local/redis-5.0.4 install

5.啟動redis服務(wù)端(前臺啟動)

[root@localhost redis-5.0.4]# cd bin

[root@localhost bin]# ./redis-server

image.png

啟動后看到如上歡迎頁面阴幌,但此窗口不能關(guān)閉,窗口關(guān)閉就認為redis也關(guān)閉了卷中,所以我們需要在后臺啟動矛双,然后再啟動客戶端進行連接,所以首先Ctrl+C退出蟆豫。

解決:可以通過修改配置文件配置redis的后臺啟

動(即服務(wù)器啟動了但不會創(chuàng)建控制臺窗口)

步驟如下:

1.切換到redis-5.0.4目錄下议忽,把當前目錄下的redis.conf文件拷貝到bin目錄下

[root@localhost bin]# cd ../

[root@localhost redis-5.0.4]# cp redis.conf bin/redis.conf

2.切換到bin目錄下,修改redis.conf文件

[root@localhost redis-5.0.4]# cd bin

[root@localhost bin]# vim redis.conf

3.將redis.conf文件中的daemonize的值從no修改成yes表示后臺啟動

image.png

4.啟動redis服務(wù)端(后臺啟動)

[root@localhost bin]# ./redis-server redis.conf

5.查看是否啟動成功

[root@localhost bin]# ps -ef | grep redis

6.啟動客戶端

[root@localhost bin]# ./redis-cli

7.存取數(shù)據(jù)進行測試

127.0.0.1:6379> set name jack

OK

127.0.0.1:6379> get name

"jack"

四十减、redis-benchmark官方自帶的性能測試工具


4.1 在安裝的redis中可以看到redis-benchmark

image.png

4.2 關(guān)于redis-benchmark 的一些參數(shù)

image.png

簡單測試:100個并發(fā)栈幸,十萬個請求,單機測試

[root@localhost bin]# ./redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000

image.png

參數(shù)解釋:

====== PING_INLINE ======

100000 requests completed in 0.84 seconds 表示對十萬個請求進行寫入測試

100 parallel clients 100個并發(fā)客戶端

3 bytes payload 每次寫入3個字節(jié)

keep alive: 1 只有一臺服務(wù)器處理請求(單機性能)

99.36% <= 1 milliseconds

99.96% <= 2 milliseconds

100.00% <= 2 milliseconds 請求在3毫秒處理完成

119047.62 requests per second 每秒處理119047.62次請求

./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q:此命令表示只測試set和lpush方式并退出

五帮辟、Redis的常用命令


5.1 數(shù)據(jù)類型

redis是一種高級的key-value的存儲系統(tǒng)速址,其中的key是字符串類型,盡可能滿足如下幾點:

1.key不要太長由驹,最好不要操作1024個字節(jié)芍锚,這不僅會消耗內(nèi)存還會降低查找效率

2.key不要太短,如果太短會降低key的可讀性

3.在項目中,key最好有一個統(tǒng)一的命名規(guī)范(根據(jù)企業(yè)的需求)

value最常用的五種數(shù)據(jù)類型:

1.字符串(String):最常用的并炮,一般用于存儲一個值

2.列表(List):使用list結(jié)構(gòu)實現(xiàn)棧和隊列結(jié)構(gòu)

3.集合(Set) :交集默刚,差集和并集的操作

4.有序集合(sorted set) :排行榜,積分存儲等操作

5.哈希(Hash):存儲一個對象數(shù)據(jù)的

image.png

5.2 字符串(String)

set key value:設(shè)定key持有指定的字符串value逃魄,如果該key存在則進行覆蓋操作荤西,總是返回"OK"

get key:獲取key的value。如果與該key關(guān)聯(lián)的value不是String類型伍俘,redis將返回錯誤信息皂冰,因為get命令只能用于獲取String value,如果該key不存在养篓,返回null

getset key value:先獲取該key的值秃流,然后在設(shè)置該key的值。

incr key:將指定的key的value原子性的遞增1.如果該key不存在柳弄,其初始值為0舶胀,在incr之后其值為1。如果value的值不能轉(zhuǎn)成整型碧注,如hello嚣伐,該操作將執(zhí)行失敗并返回相應(yīng)的錯誤信息。

decr key:將指定的key的value原子性的遞減1.如果該key不存在萍丐,其初始值為0轩端,在incr之后其值為-1。如果value的值不能轉(zhuǎn)成整型逝变,如hello基茵,該操作將執(zhí)行失敗并返回相應(yīng)的錯誤信息。

incrby key increment:將指定的key的value原子性增加increment壳影,如果該key不存在拱层,器初始值為0,在incrby之后宴咧,該值為increment根灯。如果該值不能轉(zhuǎn)成整型,如hello則失敗并返回錯誤信息掺栅。

decrby key decrement:將指定的key的value原子性減少decrement烙肺,如果該key不存在,器初始值為0氧卧,在decrby之后桃笙,該值為decrement。如果該值不能轉(zhuǎn)成整型假抄,如hello則失敗并返回錯誤信息怎栽。

append key value:如果該key存在丽猬,則在原有的value后追加該值;如果該key不存在熏瞄,則重新創(chuàng)建一個key/value脚祟。

5.3 列表(List)

lpush key value1 value2...:在指定的key所關(guān)聯(lián)的list的頭部插入所有的values,如果該key不存在强饮,該命令在插入的之前創(chuàng)建一個與該key關(guān)聯(lián)的空鏈表由桌,之后再向該鏈表的頭部插入數(shù)據(jù)。插入成功邮丰,返回元素的個數(shù)行您。

rpush key value1 value2…:在該list的尾部添加元素。

lrange key start end:獲取鏈表中從start到end的元素的值剪廉,start娃循、end可為負數(shù),若為-1則表示鏈表尾部的元素斗蒋,-2則表示倒數(shù)第二個捌斧,依次類推….

image.png

lpushx key value:當key存在時,在頭部插入value泉沾,否則將不插入

rpushx key value:在key的尾部插入value

image.png

lpop key:返回并彈出指定的key關(guān)聯(lián)的鏈表中的第一個元素捞蚂,即頭部元素。

rpop key:從尾部彈出元素跷究。

image.png

rpoplpush resource destination:將鏈表中的尾部元素彈出并添加到頭部姓迅。

image.png

llen key:返回指定的key關(guān)聯(lián)的鏈表中的元素的數(shù)量。

lset key index value:設(shè)置鏈表中的index的腳標的元素值俊马,0代表鏈表的頭元素丁存,-1代表鏈表的尾元素。

image.png

lrem key count value:刪除count個值為value的元素潭袱,如果count大于0柱嫌,從頭向尾遍歷并刪除count個值為value的元素,如果count小于0屯换,則從尾向頭遍歷并刪除。如果count等于0与学,則刪除鏈表中所有等于value的元素彤悔。

image.png

linsert key before|after pivot value:在pivot元素前或者后插入value這個元素。

image.png

5.4 集合(Set索守,不允許出現(xiàn)重復(fù)的元素)

sadd key value1 value2…:向set中添加數(shù)據(jù)晕窑,如果該key的值已有則不會重復(fù)添加。

smembers key:獲取set中所有的成員卵佛。

scard key:獲取set中成員的數(shù)量杨赤。

image.png

sismember key member:判斷參數(shù)中指定的成員是否在該set中敞斋,1表示存在,0表示不存在或者該key本身就不存在疾牲。

srem key member1 member2… :刪除set中指定的成員植捎。

image.png

srandmember key:隨機返回set中的一個成員。

image.png

sdiff key1 key2:返回key1與key2中相差的成員阳柔,而且與key的順序有關(guān)焰枢,即返回差集。

image.png

sdiffstore destination key1 key2:將key1舌剂、key2相差的成員存儲在destination上济锄。

image.png

sinter key[key1,key2…]:返回交集。

sinterstore destination key1 key2:將返回的交集存儲在destination上霍转。

image.png

sunion key1 key2:返回并集荐绝。

image.png

sunionstore destination key1 key2:將返回的并集存儲在destination上

image.png

5.5 有序集合(sorted set)

zadd key score member score2 member2 … :將所有成員以及該成員的分數(shù)存放到sorted-set中。

image.png

zcard key:獲取集合中的成員數(shù)量避消。

image.png

zcount key min max:獲取分數(shù)在[min,max]之間的成員很泊。

image.png

zincrby key increment member:設(shè)置指定成員的增加的分數(shù)。

zrange key start end [withscores]:獲取集合中腳標為start-end的成員沾谓,[withscores]參數(shù)表明返回的成員包含其分數(shù)委造。

image.png

zrangebyscore key min max [withscores][limit offset count]:返回分數(shù)在[min,max]的成員并按照分數(shù)從低到高排序。[withscores]:顯示分數(shù)均驶;[limit offset count]:offset昏兆,表明從腳標為offset的元素開始并返回count個成員。

image.png

zrank key member:返回成員在集合中的位置妇穴。

zrem key member[member…]:移除集合中指定的成員爬虱,可以指定多個成員。

zscore key member:返回指定成員的分數(shù)腾它。

5.6 哈希(Hash)

hset key field value:為指定的key設(shè)定field/value對(鍵值對)跑筝。

hgetall key:獲取key中的所有filed-vaule。

image.png

hget key field:返回指定的key中的field的值瞒滴。

image.png

hmset key fields:設(shè)置key中的多個filed/value曲梗。

hmget key fileds:獲取key中的多個filed的值。

hexists key field:判斷指定的key中的filed是否存在妓忍。

hlen key:獲取key所包含的field的數(shù)量虏两。

hincrby key field increment:設(shè)置key中filed的值增加increment,如:age增加20世剖。

5.7 通用操作

keys patten:獲取所有與patten匹配的key定罢,*表示任意字符,?表示一個字符旁瘫。

image.png

del key1 key2....:刪除指定的key祖凫。

image.png

exists key:判斷該key是否存在琼蚯,1表示存在,0表示不存在惠况。

image.png

rename key newkey:為當前key重命名遭庶。

image.png

expire key second:為當前key設(shè)置過期時間(單位:秒)。

ttl key:查看當前key剩余過期時間售滤。

type key:查看當前key類型罚拟。

image.png

flushall: 刪除所有key

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市完箩,隨后出現(xiàn)的幾起案子赐俗,更是在濱河造成了極大的恐慌,老刑警劉巖弊知,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阻逮,死亡現(xiàn)場離奇詭異悔政,居然都是意外死亡坦胶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門狈定,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漫雷,“玉大人瓜富,你說我怎么就攤上這事〗淀铮” “怎么了与柑?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蓄坏。 經(jīng)常有香客問我价捧,道長,這世上最難降的妖魔是什么涡戳? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任结蟋,我火速辦了婚禮,結(jié)果婚禮上渔彰,老公的妹妹穿的比我還像新娘嵌屎。我一直安慰自己,他們只是感情好胳岂,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布编整。 她就那樣靜靜地躺著,像睡著了一般乳丰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上内贮,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天产园,我揣著相機與錄音汞斧,去河邊找鬼。 笑死什燕,一個胖子當著我的面吹牛粘勒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屎即,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庙睡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了技俐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤雕擂,失蹤者是張志新(化名)和其女友劉穎啡邑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體井赌,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谤逼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仇穗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片流部。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纹坐,靈堂內(nèi)的尸體忽然破棺而出枝冀,到底是詐尸還是另有隱情,我是刑警寧澤恰画,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布宾茂,位于F島的核電站,受9級特大地震影響拴还,放射性物質(zhì)發(fā)生泄漏跨晴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一片林、第九天 我趴在偏房一處隱蔽的房頂上張望端盆。 院中可真熱鬧,春花似錦费封、人聲如沸焕妙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焚鹊。三九已至,卻和暖如春韧献,著一層夾襖步出監(jiān)牢的瞬間末患,已是汗流浹背研叫。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璧针,地道東北人嚷炉。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像探橱,于是被迫代替她去往敵國和親申屹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 關(guān)系數(shù)據(jù)庫入門 關(guān)系數(shù)據(jù)庫概述 數(shù)據(jù)持久化 - 將數(shù)據(jù)保存到能夠長久保存數(shù)據(jù)的存儲介質(zhì)中隧膏,在掉電的情況下數(shù)據(jù)也不會...
    d4d98020ef88閱讀 665評論 0 0
  • 參考推薦:http://www.reibang.com/p/fbe40258fe27[https://www.j...
    10676閱讀 251評論 0 0
  • 一哗讥、引言 1.1 開發(fā)環(huán)境(dev) 外部用戶無法訪問,開發(fā)人員使用私植,版本變動很大平時大家大多是在Windows或...
    觸手不可及閱讀 219評論 0 1
  • [redis] Redis介紹 什么是Redis忌栅? Redis 是用C語言開發(fā)的一個開源的高性能鍵值對( key-...
    泡泡_0閱讀 338評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭曲稼,有人歡樂有人憂愁索绪,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53