redis 保存 array list 区别_Redis科普篇
這是學(xué)習(xí)Java的小姐姐第53篇原創(chuàng)文章
前言
hello,好久不見,又?jǐn)喔艘欢螘r(shí)間。同事大部分離職了,但是活還是一樣,所以只能硬著頭皮頂上。現(xiàn)在總算歇會(huì)了,決定開啟Redis源碼系列,希望不要啪啪啪打臉。
什么是redis?
Redis是一種基于鍵值對(duì)(key-value)的NoSQL數(shù)據(jù)庫,主要的數(shù)據(jù)類型包括String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),bitmaps(位圖),GEO(地理信息定位)等。
注意:如果面試問Redis數(shù)據(jù)類型,前五個(gè)是基礎(chǔ),必須答對(duì),后面兩個(gè)是亮點(diǎn)。
redis的優(yōu)勢(shì)
1.數(shù)據(jù)存儲(chǔ)在內(nèi)存中,讀取和寫入速度快。如果需要持久化,可以開啟相關(guān)配置,數(shù)據(jù)定期保存在硬盤上。
2.使用單線程,避免線程競(jìng)爭(zhēng),也避免線程之間上下文切換消耗。
3.主節(jié)點(diǎn)和從節(jié)點(diǎn)之間可以復(fù)制,水平擴(kuò)展,突破單機(jī)部署的限制。
4.提供哨兵和集群方式,保證有節(jié)點(diǎn)發(fā)生故障,保存整個(gè)服務(wù)的高可用性。
注意:以上的優(yōu)點(diǎn)以后都會(huì)單開章節(jié)來討論,現(xiàn)在有個(gè)大概印象就行,不用死記硬背?。
redis基本安裝
上面講的是不是太空了,眼睛說記住了,腦子說沒有?。那我們實(shí)操下,在linux上安裝redis服務(wù),看看怎么玩?至于windows比較簡(jiǎn)單,屬于開箱即用的,這邊就不寫了。
1.下載壓縮包
先去官網(wǎng)下載http://download.redis.io/releases/安裝包,建議是下載redis4。之后看底層結(jié)構(gòu)也是使用的redis4。
redis4和redis3的區(qū)別:
1.在redis4中,string類型的底層結(jié)構(gòu)針對(duì)不同長度的字符串分為了sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64等多種結(jié)構(gòu)體,更加節(jié)約內(nèi)存,而redis3只使用了int,embstr,raw。
2.在redis4中,持久化可以使用RDB和AOF混合方式。
2.上傳到服務(wù)器并解壓
? ?通過遠(yuǎn)程管理工具,將壓縮包拷貝到Linux服務(wù)器中,執(zhí)行解壓操作
3.進(jìn)入src目錄,執(zhí)行make install進(jìn)行安裝
4.開啟后臺(tái)啟動(dòng)配置
我們打開redis.conf文件,修改daemonize為yes,讓其能在后臺(tái)運(yùn)行。
5.啟動(dòng)
使用redis-server啟動(dòng)redis,注意端口號(hào)為6379.
6.連接客戶端
進(jìn)入src目錄,使用redis-cli連接客戶端。
redis常用API
string類型
1.設(shè)置值 set [key] [value] [expried time] [nx|xx]
上面表示設(shè)置key的字符串,值為value,過期時(shí)間為expried time 。nx表示不存在才能設(shè)置成功,用于新增;xx表示存在才能設(shè)置成功,用于更新。
我們首先給str變量設(shè)置了hello,然后嘗試用nx來更新str,但是發(fā)現(xiàn)更新失敗了,因?yàn)閚x表示str不存在的時(shí)候才能設(shè)置,現(xiàn)在str是存在的。最后用xx來更新,發(fā)現(xiàn)是更新成功的。
2.獲取值 get key
3.批量設(shè)置值 mset [key value] [key value] [key value]
數(shù)據(jù)設(shè)置進(jìn)去按組來劃分的,每個(gè)key對(duì)應(yīng)一個(gè)value,當(dāng)設(shè)置成功后查詢發(fā)現(xiàn),出來是亂碼,不是我們?cè)O(shè)置的中文。
其實(shí)這不是亂碼,只是客戶端顯示問題,我們只需要在啟動(dòng)客戶端的時(shí)候加上--raw,指定其顯示格式即可。
4.批量獲取值 mget [key] [key] [key]
hash類型
1.設(shè)置值 hset key field value
2.獲取值hget key field,效果如上
3.批量設(shè)置值 hmset key [field] [value] [field] [value]
4.批量獲取值 hmget key [field] [field] [field]
5.獲取某個(gè)key所有的fields hkeys key
list類型
1.從list的左側(cè)插入新數(shù)據(jù) lpush key value
在list列表的左側(cè)插入三個(gè)元素a,b,c,返回值為當(dāng)前l(fā)ist的長度3。
2.從list的右側(cè)插入新數(shù)據(jù) rpush key value
在list列表的右側(cè)插入兩個(gè)元素d ,e,返回值為當(dāng)前l(fā)ist的長度5。
3.查詢list的所有元素
這邊需要注意的是往左節(jié)點(diǎn)插入的三個(gè)元素順序,lpush每次將新元素插入到列表的頭部,所以順序?yàn)?c,b,a。
4.獲取列表長度llen key
5.從左側(cè)刪除元素 lpop key
刪除鏈表的第一個(gè)元素,返回值為刪除的元素值c。再查詢下list現(xiàn)在的元素,分別是b,a,d,e。
6.從右側(cè)刪除元素 rpop key
與上面從左側(cè)刪除元素一樣,返回值也為刪除的元素。
7.刪除指定元素 lrem key count value
刪除指定元素,重點(diǎn)是count,這邊count分為三種情況:
1).當(dāng)count>0,從左到右,最多刪除count個(gè)元素。
2).當(dāng)count<0,從右到左,最多刪除count個(gè)元素。
3).當(dāng)count=0,刪除所有滿足條件的元素。
set類型
1.添加元素 sadd key[field] [field] [field]
往myset1中插入三個(gè)字符串,分別是hello,world,java,返回值為插入成功的數(shù)值。
2.刪除元素 srem key [field] [field]
3.計(jì)算元素個(gè)數(shù) scard key
4.判斷元素是否存在sismember key [field]
之前刪除了myset中的hello元素,所以第一條語句的返回值為0,表示不存在。而world沒有刪掉,所以返回值為1,表示存在。
5.獲取所有的元素sismembers key
6.集合之間的并集sunion [key] [key]
我們先看myset1和myset2的數(shù)據(jù),然后使用sunion來獲取他們的并集。
7.集合之間的交集 sinter [key] [key]
8.集合之間的差集 sdiff [key] [key]
這邊要注意key的前后區(qū)別,如果是sdiff myset1 myset2,意思是myset1除去兩者的交集,所以結(jié)果是world和cc。
如果反之,亦然。
zset類型
1.添加元素 zadd key [score member] [score member]
2.計(jì)算長度 zcard key
3.計(jì)算排名 zrank key member(zrevrank key member)
myzset中一共有三名學(xué)生,張三,李四,王五,他們分?jǐn)?shù)分別為80分,90分,70分,那他們的排序是第一名李四90分,第二名張三80分,第三名王五70分。
zrank表示正排名,返回值為下標(biāo)。zrevrank表示逆排名,返回值也是下標(biāo)。
結(jié)語
這篇主要是Redis的入門課程,主要從Redis是什么,哪些優(yōu)點(diǎn),Linux上如何快速安裝,常見的數(shù)據(jù)結(jié)構(gòu)和API使用。強(qiáng)調(diào)的是先從總體入手,對(duì)其有個(gè)大概印象,了解其和關(guān)系型數(shù)據(jù)庫的區(qū)別。至于一些常見數(shù)據(jù)類型的適用場(chǎng)景,底層設(shè)計(jì),我們下篇見。
如果覺得寫得還行,麻煩給個(gè)贊?,您的認(rèn)可才是我寫作的動(dòng)力!
如果覺得有說的不對(duì)的地方,歡迎評(píng)論指出。
好了,拜拜咯。
參考資料
redis 中文存儲(chǔ)亂碼問題
Redis開發(fā)與運(yùn)維
Redis深度歷險(xiǎn):核心原理與應(yīng)用實(shí)踐
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的redis 保存 array list 区别_Redis科普篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机谣言之网线的做法
- 下一篇: mysql function selec