Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令

本篇內(nèi)容主要講解“redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令”吧!

在濮陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計制作按需定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),濮陽網(wǎng)站建設(shè)費用合理。

1.Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令

String、list、set、hash、zset(有序set)

總體來說redis都是通過Key-Value的形式來存儲數(shù)據(jù)的。只是不用數(shù)據(jù)類型Value的形式不同。

String:最簡單數(shù)據(jù)結(jié)構(gòu),比如我們將一個對象轉(zhuǎn)成json串來存儲

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... 獲取多個key的數(shù)據(jù),返回一個集合,類似Map的values方法

expire key second 設(shè)置key 過去時間,單位秒

setex key second value設(shè)置key 過去時間,單位秒(等價于先set,再expire)

setnx key value 如果key不存在就set 返回1.如果存在返回0(可以基于此實現(xiàn)分布式鎖)

List:并不是java里面的list,redis的list更像一個鏈表或者說隊列/棧的結(jié)構(gòu)。這就意味著它的刪除插入快,但是通過索引定位就比較慢了。當列表彈出了最后一個元素之后,該數(shù)據(jù)結(jié)構(gòu)自動被刪除,內(nèi)存被回收。

Redis 的列表結(jié)構(gòu)常用來做異步隊列使用。將需要延后處理的任務(wù)塞進 Redis 的列表,另一個線程從這個列表中輪詢數(shù)據(jù)進行處理。

rpush key value1 value2 value3...  插入list數(shù)據(jù)

llen key     查看長度

lpop key    按加入順序獲?。ㄏ冗M先出,類似隊列)

rpop key   后進先出,有點類似棧

列表取數(shù)據(jù),取完后整個列表都被回收了,就是說只能取一次數(shù)據(jù)。

Hash:類似java的hashMap,和字符串相比,我們存儲數(shù)據(jù)的時候可以只存儲對象的部分屬性,而字符串則需要完整將整個對象轉(zhuǎn)換。當然hash存儲結(jié)構(gòu)的消耗肯定是高于字符串的

hset redisKey hashKey1 value1

    hset redisKey hashKey2 value2  插入數(shù)據(jù)

hgetall redisKey  獲取數(shù)據(jù),key value間隔出現(xiàn)

hlen redisKey  查看hash長度

hget redisKey hashKey 獲取hashKey 對應(yīng)的value

hmset redisKey hashKey1 value1 hashKey2 value2 hashKey2 value3 批量插入值

Set : 類似HashSet,但是list類似,最后一個數(shù)據(jù)取完之后,該結(jié)構(gòu)會被清理,無法再次獲取數(shù)據(jù)

sadd key value         

sadd key value1 value2   批量添加

smembers key    查看所有

sismember key value  查詢某個值是否存在,存在返回1

scard  key   查看大小

spop key    獲取一個元素

原子計數(shù)操作

如果value是整數(shù)的話還可以實現(xiàn)自增操作(也可以用于實現(xiàn)分布式鎖,該增長有限,最大到long max,超過該值會直接報錯)

incr key 自增 如果key不存在默認從0自增1

incrby key step 設(shè)置增加步長step

2.redis持久化

雖然說redis都是內(nèi)存級別的操作,其實也是有持久化的。

一種是基于RDB快照,

Redis 將內(nèi)存數(shù)據(jù)庫快照保存在名字為 dump.rdb 的二進制文件中。

 

Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令

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

Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令

另一種是AOF(append-only file)

快照并不可靠,上次快照之后,還未到達下一次快照條件時,這時候服務(wù)出現(xiàn)了問題,那么這期間的數(shù)據(jù)是無法保存到快照版本中的。這個時候就需要AOF了,它將每一條指令都記錄進文件,當redis重啟的時候,重新執(zhí)行這個文件里面指令,就可以恢復(fù)所有的數(shù)據(jù)到內(nèi)存中了。

可以通過配置appendonly yes 來開啟AOF,默認是關(guān)閉的

Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令

AOF也有三種同步數(shù)據(jù)的策略,

每次有操作都去刷新文件,很慢,但安全

每秒同步刷新一次:可能會丟失一秒內(nèi)的數(shù)據(jù)

從不同步同步刷新:讓操作系統(tǒng)在需要的時候刷新數(shù)據(jù),不安全

默認的是每秒刷一次 

Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令

混合持久化:

RDB快照數(shù)據(jù)恢復(fù)速度快,但是可能會有大量數(shù)據(jù)丟失,所以通?;謴?fù)數(shù)據(jù)還是用的AOF日志重放,但是AOF相對來說速度會很慢,尤其是在數(shù)據(jù)量大的時候。因此在4.0的時候帶來了混合持久化,也就是AOF在刷新的時候,先記錄上次的快照版本,然后記錄上次快照版本到現(xiàn)在的增量操作,然后合并成一個文件,覆蓋原來的appendonly.aof文件。Redis重啟的時候,先加載RDB快照的內(nèi)容,在重放AOF日志中增量操作的內(nèi)容就可以了。

開啟混合持久化:aof-use-rdb-preamble yes

混合持久化中appendonly.aof內(nèi)容格式,一部分是RDB文件內(nèi)容格式,另外的才是AOF文件的內(nèi)容格式。

3.緩存淘汰策略:

當 Redis 內(nèi)存超出物理內(nèi)存限制時,內(nèi)存的數(shù)據(jù)會開始和磁盤產(chǎn)生頻繁的交換 。會讓 Redis 的性能急劇下降,對于訪問量比較頻繁的 Redis 來說,這樣存取效率基本上等于不可用。

在生產(chǎn)環(huán)境中我們是不允許 Redis 出現(xiàn)交換行為的,為了限制最大使用內(nèi)存,Redis 提供了配置參數(shù) maxmemory 來限制內(nèi)存超出期望大小。

當實際內(nèi)存超出 maxmemory 時,Redis 提供了幾種可選策略 (maxmemory-policy) 來讓用戶自己決定該如何騰出新的空間以繼續(xù)提供讀寫服務(wù)。

Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令


 

noeviction 不會繼續(xù)處理寫請求 (del,read請求可以繼續(xù)進行)。這樣可以保證不會丟失數(shù)據(jù),但是會讓線上的寫相關(guān)的業(yè)務(wù)不能持續(xù)進行。這是默認的淘汰策略。

volatile-lru 嘗試淘汰設(shè)置了過期時間的 key,最少使用的 key 優(yōu)先被淘汰。沒有設(shè)置過期時間的 key 不會被淘汰,這樣可以保證需要持久化的數(shù)據(jù)不會突然丟失。

volatile-ttl 跟上面一樣,除了淘汰的策略不是 LRU,而是 key 的剩余壽命 ttl 的值,ttl 越小越優(yōu)先被淘汰。

volatile-random 跟上面一樣,不過淘汰的 key 是過期 key 集合中隨機的 key。

allkeys-lru 區(qū)別于 volatile-lru,這個策略要淘汰的 key 對象是全體的 key 集合,而不只是過期的 key 集合。這意味著沒有設(shè)置過期時間的 key 也會被淘汰。

allkeys-random 跟上面一樣,不過淘汰的策略是隨機的 key。

volatile-xxx 策略只會針對帶過期時間的 key 進行淘汰,allkeys-xxx 策略會對所有的 key 進行淘汰。如果你只是拿 Redis 做緩存,那應(yīng)該使用 allkeys-xxx,客戶端寫緩存時不必攜帶過期時間。如果你還想同時使用 Redis 的持久化功能,那就使用 volatile-xxx 策略,這樣可以保留沒有設(shè)置過期時間的 key,它們是永久的 key 不會被 LRU 算法淘汰。

到此,相信大家對“Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當前文章:Redis數(shù)據(jù)結(jié)構(gòu)及簡單操作指令
轉(zhuǎn)載源于:http://bm7419.com/article38/iioopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機動態(tài)網(wǎng)站、網(wǎng)站維護、企業(yè)網(wǎng)站制作、建站公司、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名