本篇內(nèi)容主要講解“redis數(shù)據(jù)結(jié)構(gòu)及簡(jiǎn)單操作指令”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Redis數(shù)據(jù)結(jié)構(gòu)及簡(jiǎn)單操作指令”吧!
在濮陽(yáng)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),營(yíng)銷(xiāo)型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),濮陽(yáng)網(wǎng)站建設(shè)費(fèi)用合理。
1.Redis數(shù)據(jù)結(jié)構(gòu)及簡(jiǎn)單操作指令
String、list、set、hash、zset(有序set)
總體來(lái)說(shuō)redis都是通過(guò)Key-Value的形式來(lái)存儲(chǔ)數(shù)據(jù)的。只是不用數(shù)據(jù)類(lèi)型Value的形式不同。
String:最簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu),比如我們將一個(gè)對(duì)象轉(zhuǎn)成json串來(lái)存儲(chǔ)
set key value 存放數(shù)據(jù)
get key 獲取數(shù)據(jù)
exists key 查看數(shù)據(jù)是否存在,存在返回1否則0
del key 刪除數(shù)據(jù) 返回操作成功的條數(shù)
mset key1 value1 key2 value2 key3 value3...存放多組數(shù)據(jù)
mget key1 ke2y key3... 獲取多個(gè)key的數(shù)據(jù),返回一個(gè)集合,類(lèi)似Map的values方法
expire key second 設(shè)置key 過(guò)去時(shí)間,單位秒
setex key second value設(shè)置key 過(guò)去時(shí)間,單位秒(等價(jià)于先set,再expire)
setnx key value 如果key不存在就set 返回1.如果存在返回0(可以基于此實(shí)現(xiàn)分布式鎖)
List:并不是java里面的list,redis的list更像一個(gè)鏈表或者說(shuō)隊(duì)列/棧的結(jié)構(gòu)。這就意味著它的刪除插入快,但是通過(guò)索引定位就比較慢了。當(dāng)列表彈出了最后一個(gè)元素之后,該數(shù)據(jù)結(jié)構(gòu)自動(dòng)被刪除,內(nèi)存被回收。
Redis 的列表結(jié)構(gòu)常用來(lái)做異步隊(duì)列使用。將需要延后處理的任務(wù)塞進(jìn) Redis 的列表,另一個(gè)線程從這個(gè)列表中輪詢(xún)數(shù)據(jù)進(jìn)行處理。
rpush key value1 value2 value3... 插入list數(shù)據(jù)
llen key 查看長(zhǎng)度
lpop key 按加入順序獲取(先進(jìn)先出,類(lèi)似隊(duì)列)
rpop key 后進(jìn)先出,有點(diǎn)類(lèi)似棧
列表取數(shù)據(jù),取完后整個(gè)列表都被回收了,就是說(shuō)只能取一次數(shù)據(jù)。
Hash:類(lèi)似java的hashMap,和字符串相比,我們存儲(chǔ)數(shù)據(jù)的時(shí)候可以只存儲(chǔ)對(duì)象的部分屬性,而字符串則需要完整將整個(gè)對(duì)象轉(zhuǎn)換。當(dāng)然hash存儲(chǔ)結(jié)構(gòu)的消耗肯定是高于字符串的
hset redisKey hashKey1 value1
hset redisKey hashKey2 value2 插入數(shù)據(jù)
hgetall redisKey 獲取數(shù)據(jù),key value間隔出現(xiàn)
hlen redisKey 查看hash長(zhǎng)度
hget redisKey hashKey 獲取hashKey 對(duì)應(yīng)的value
hmset redisKey hashKey1 value1 hashKey2 value2 hashKey2 value3 批量插入值
Set : 類(lèi)似HashSet,但是list類(lèi)似,最后一個(gè)數(shù)據(jù)取完之后,該結(jié)構(gòu)會(huì)被清理,無(wú)法再次獲取數(shù)據(jù)
sadd key value
sadd key value1 value2 批量添加
smembers key 查看所有
sismember key value 查詢(xún)某個(gè)值是否存在,存在返回1
scard key 查看大小
spop key 獲取一個(gè)元素
原子計(jì)數(shù)操作
如果value是整數(shù)的話還可以實(shí)現(xiàn)自增操作(也可以用于實(shí)現(xiàn)分布式鎖,該增長(zhǎng)有限,最大到long max,超過(guò)該值會(huì)直接報(bào)錯(cuò))
incr key 自增 如果key不存在默認(rèn)從0自增1
incrby key step 設(shè)置增加步長(zhǎng)step
2.redis持久化
雖然說(shuō)redis都是內(nèi)存級(jí)別的操作,其實(shí)也是有持久化的。
一種是基于RDB快照,
Redis 將內(nèi)存數(shù)據(jù)庫(kù)快照保存在名字為 dump.rdb 的二進(jìn)制文件中。

可以對(duì) Redis 進(jìn)行設(shè)置, 讓它在N 秒內(nèi)數(shù)據(jù)集至少有 M 個(gè)改動(dòng)這一條件被滿足時(shí), 自動(dòng)保存一次數(shù)據(jù)集。

另一種是AOF(append-only file)
快照并不可靠,上次快照之后,還未到達(dá)下一次快照條件時(shí),這時(shí)候服務(wù)出現(xiàn)了問(wèn)題,那么這期間的數(shù)據(jù)是無(wú)法保存到快照版本中的。這個(gè)時(shí)候就需要AOF了,它將每一條指令都記錄進(jìn)文件,當(dāng)redis重啟的時(shí)候,重新執(zhí)行這個(gè)文件里面指令,就可以恢復(fù)所有的數(shù)據(jù)到內(nèi)存中了。
可以通過(guò)配置appendonly yes 來(lái)開(kāi)啟AOF,默認(rèn)是關(guān)閉的

AOF也有三種同步數(shù)據(jù)的策略,
每次有操作都去刷新文件,很慢,但安全
每秒同步刷新一次:可能會(huì)丟失一秒內(nèi)的數(shù)據(jù)
從不同步同步刷新:讓操作系統(tǒng)在需要的時(shí)候刷新數(shù)據(jù),不安全
默認(rèn)的是每秒刷一次

混合持久化:
RDB快照數(shù)據(jù)恢復(fù)速度快,但是可能會(huì)有大量數(shù)據(jù)丟失,所以通常恢復(fù)數(shù)據(jù)還是用的AOF日志重放,但是AOF相對(duì)來(lái)說(shuō)速度會(huì)很慢,尤其是在數(shù)據(jù)量大的時(shí)候。因此在4.0的時(shí)候帶來(lái)了混合持久化,也就是AOF在刷新的時(shí)候,先記錄上次的快照版本,然后記錄上次快照版本到現(xiàn)在的增量操作,然后合并成一個(gè)文件,覆蓋原來(lái)的appendonly.aof文件。Redis重啟的時(shí)候,先加載RDB快照的內(nèi)容,在重放AOF日志中增量操作的內(nèi)容就可以了。
開(kāi)啟混合持久化:aof-use-rdb-preamble yes
混合持久化中appendonly.aof內(nèi)容格式,一部分是RDB文件內(nèi)容格式,另外的才是AOF文件的內(nèi)容格式。
3.緩存淘汰策略:
當(dāng) Redis 內(nèi)存超出物理內(nèi)存限制時(shí),內(nèi)存的數(shù)據(jù)會(huì)開(kāi)始和磁盤(pán)產(chǎn)生頻繁的交換 。會(huì)讓 Redis 的性能急劇下降,對(duì)于訪問(wèn)量比較頻繁的 Redis 來(lái)說(shuō),這樣存取效率基本上等于不可用。
在生產(chǎn)環(huán)境中我們是不允許 Redis 出現(xiàn)交換行為的,為了限制最大使用內(nèi)存,Redis 提供了配置參數(shù) maxmemory 來(lái)限制內(nèi)存超出期望大小。
當(dāng)實(shí)際內(nèi)存超出 maxmemory 時(shí),Redis 提供了幾種可選策略 (maxmemory-policy) 來(lái)讓用戶(hù)自己決定該如何騰出新的空間以繼續(xù)提供讀寫(xiě)服務(wù)。

noeviction 不會(huì)繼續(xù)處理寫(xiě)請(qǐng)求 (del,read請(qǐng)求可以繼續(xù)進(jìn)行)。這樣可以保證不會(huì)丟失數(shù)據(jù),但是會(huì)讓線上的寫(xiě)相關(guān)的業(yè)務(wù)不能持續(xù)進(jìn)行。這是默認(rèn)的淘汰策略。
volatile-lru 嘗試淘汰設(shè)置了過(guò)期時(shí)間的 key,最少使用的 key 優(yōu)先被淘汰。沒(méi)有設(shè)置過(guò)期時(shí)間的 key 不會(huì)被淘汰,這樣可以保證需要持久化的數(shù)據(jù)不會(huì)突然丟失。
volatile-ttl 跟上面一樣,除了淘汰的策略不是 LRU,而是 key 的剩余壽命 ttl 的值,ttl 越小越優(yōu)先被淘汰。
volatile-random 跟上面一樣,不過(guò)淘汰的 key 是過(guò)期 key 集合中隨機(jī)的 key。
allkeys-lru 區(qū)別于 volatile-lru,這個(gè)策略要淘汰的 key 對(duì)象是全體的 key 集合,而不只是過(guò)期的 key 集合。這意味著沒(méi)有設(shè)置過(guò)期時(shí)間的 key 也會(huì)被淘汰。
allkeys-random 跟上面一樣,不過(guò)淘汰的策略是隨機(jī)的 key。
volatile-xxx 策略只會(huì)針對(duì)帶過(guò)期時(shí)間的 key 進(jìn)行淘汰,allkeys-xxx 策略會(huì)對(duì)所有的 key 進(jìn)行淘汰。如果你只是拿 Redis 做緩存,那應(yīng)該使用 allkeys-xxx,客戶(hù)端寫(xiě)緩存時(shí)不必?cái)y帶過(guò)期時(shí)間。如果你還想同時(shí)使用 Redis 的持久化功能,那就使用 volatile-xxx 策略,這樣可以保留沒(méi)有設(shè)置過(guò)期時(shí)間的 key,它們是永久的 key 不會(huì)被 LRU 算法淘汰。
到此,相信大家對(duì)“Redis數(shù)據(jù)結(jié)構(gòu)及簡(jiǎn)單操作指令”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
                當(dāng)前文章:Redis數(shù)據(jù)結(jié)構(gòu)及簡(jiǎn)單操作指令
                
                轉(zhuǎn)載源于:http://www.chinadenli.net/article38/iioopp.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作、建站公司、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)