最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis的string類型及bitmap介紹

 更新時間:2022年07月27日 14:25:58   作者:lsd&xql  
這篇文章主要介紹了redis的string類型及bitmap介紹,redis有很多的客戶端連接進來,站在redis所在機器的角度來說,就是有很多socket的連接

redis運行原理

redis有很多的客戶端連接進來,站在redis所在機器的角度來說,就是有很多socket的連接,并且是打在內(nèi)核
上面的,redis是一個進程,進程可以調(diào)用內(nèi)核上的epoll,來遍歷尋找哪一個客戶端發(fā)送數(shù)據(jù)過來了(這里是單進程單線程來處理用戶數(shù)據(jù)的)。

redis使用

redis默認有16個庫

輸入:
進入基本分組

keys * 查詢所有的key
FLUSHDB 清除所有的key

對于如上nx的命令是我當前的key如果沒有被設(shè)置則把ooxx給設(shè)置成功,如果設(shè)置的key已經(jīng)有value了,
則返回nil (多用于分布式鎖的獲取,只能有一個獲取成功)

對于xx命令,只有存在的時候才能進行操作。

mset命令(設(shè)置多個key和value)

append命令以及getrange命令

redis正反向索引

前面是從0,1,2開始的,后面則是從-1開始遞減的,所以也可以按照下面方式寫

SETRANGE 在給定范圍設(shè)置字符串:

獲取字符串長度:

獲取key所對應(yīng)的value類型(主要是看set命令分組是在string上面的)

再來看一下object命令

它可以查看value的編碼類型(面向 redis string類型,除了字符串操作還有計算的操作【計算的操作面向數(shù)值的】)

incr和decr相關(guān)命令【可用于搶購,秒殺,點贊,評論數(shù),詳情頁(比如說淘寶詳情頁,一定會后端發(fā)起一個異步查詢購買數(shù)等,查redis,可以規(guī)避并發(fā)下,對數(shù)據(jù)庫的事務(wù)操作,
完全由redis內(nèi)存操作代替)】

redis二進制安全

redis進程與外界交互的時候,面向流我們有字節(jié)流,以及字符流,那么redis客戶端
訪問的時候,從socket里面拿到的是字節(jié)流的數(shù)據(jù),只要未來的雙方客戶端和服務(wù)端有同樣的
編解碼方式,數(shù)據(jù)就不會被破壞。
如 set k1 = 9999,執(zhí)行strlen 輸出4,redis里面存這個數(shù)據(jù)是按照一個字符一個字節(jié)來存入的,直接
向字符流去寫,執(zhí)行incr之后是先把字節(jié)流拿出來轉(zhuǎn)換成數(shù)值的,轉(zhuǎn)換成數(shù)值之后會更新key的encoding
編碼,只要加成功就更新成int了,如果下次加的話就可以直接檢查這個encoding類型了,如果加的數(shù)
不是int類型則報錯
另一種如 set k2 中,是占3個字節(jié)的(軟件和redis通信用的utf-8)
我們再設(shè)置一個k3占2個字節(jié)(gbk編碼)

然后退出用redis-cli --raw來登錄,會觸發(fā)一個格式化(如果不帶上–raw是只會識別ascii碼的,超出部分則按照16進制來展示的,如果加上raw則會觸發(fā)編碼集的格式化)

key上有encoding的話,就相當于做了一個優(yōu)化,來判斷我當前這個操作是否是可行的

getset命令

getset命令是將舊的值返回并將新的值給設(shè)置進去,(相對于get 和set單獨執(zhí)行的話,要發(fā)兩個單獨
的命令過去,IO通信兩次,而這種方式只通信了一次【節(jié)省資源】)

mset 設(shè)置多個key多個value
msetnx (設(shè)置多個key對應(yīng)的value保證原子性)下面的圖中msetnx 在設(shè)置k3的時候失敗了

位圖(bitmap)

setbit 方法,在對應(yīng)的bit位上面設(shè)置值

bitpos命令:
找到第一個字節(jié) 中第一個1出現(xiàn)的位置

找到第二個字節(jié)出現(xiàn)1的第一個位置

統(tǒng)計1在字節(jié)范圍出現(xiàn)了幾次:

bitop 命令可以按位對value進行與和或等運算

場景題

1、公司有用戶系統(tǒng),統(tǒng)計用戶的登錄天數(shù),且窗口隨機(某天往前推一周,以及往后推一周,用戶登錄的天數(shù)統(tǒng)計一下)
一年設(shè)置為400天,可以使用50個字節(jié)存用戶全年的登錄狀態(tài)

-2 和-1為最后兩個字節(jié)(查詢300天到第400天)登錄多少次?!咀層脩魹閗ey登錄天數(shù)為value】
當然如果覺得用戶量特別大的話可以考慮一部分用戶存一個redis,另一部分
存另一個redis【注:1個用戶50個字節(jié),那么20個用戶存1k的空間,20000個用戶越需要1MB的空間
2000000個用戶則需要100M的空間】

2、京東618做活動送禮物,大庫備貨多少個禮物?假設(shè)有2E用戶
1、對用戶做分類(分為僵尸用戶 冷熱用戶/忠誠用戶)
所以需要做活躍用戶統(tǒng)計,
什么是活躍用戶:
比如說 1號-3號 連續(xù)登錄 對重復登錄的去重
redis如何做
首先在2022年1月1日id為1的用戶登錄了 給bit位的1位上設(shè)置1
在2022年1月2日id為1和id為7的用戶登錄了分別在bit位1和bit位7上設(shè)置1

總結(jié)

key的type類型,是用于判斷訪問的方法是不是具備這個類型的操作,可以快速返回錯誤,可以規(guī)避
異常。
encoding是可以規(guī)避同一種type類型但是根據(jù)不同的表現(xiàn)形式做計算這件事,
還有l(wèi)ength屬性,如果數(shù)據(jù)未發(fā)生改變可以直接返回長度

到此這篇關(guān)于redis的string類型及bitmap介紹的文章就介紹到這了,更多相關(guān)redis的string類型 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis源碼與設(shè)計剖析之網(wǎng)絡(luò)連接庫

    Redis源碼與設(shè)計剖析之網(wǎng)絡(luò)連接庫

    這篇文章主要為大家介紹了Redis源碼與設(shè)計剖析之網(wǎng)絡(luò)連接庫詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Redis內(nèi)存滿了的幾種原因和最佳解決方案

    Redis內(nèi)存滿了的幾種原因和最佳解決方案

    Redis是一款高性能的內(nèi)存數(shù)據(jù)庫,被廣泛應(yīng)用于緩存、消息隊列、計數(shù)器等場景,然而,由于Redis是基于內(nèi)存的數(shù)據(jù)庫,當數(shù)據(jù)量過大或者配置不合理時,就有可能導致Redis的內(nèi)存滿,本文將介紹Redis內(nèi)存滿的幾種原因,并提供相應(yīng)的解決方案,需要的朋友可以參考下
    2023-11-11
  • 一篇文章帶你弄清楚Redis的精髓

    一篇文章帶你弄清楚Redis的精髓

    Redis是一個開源的、支持網(wǎng)絡(luò)、基于內(nèi)存的鍵值對存儲系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件。它支持多種數(shù)據(jù)類型,包括字符串、散列、列表、集合、位圖等,擁有極快的讀寫速度,并且支持豐富的特性,如事務(wù)、持久化、復制、腳本、發(fā)布/訂閱等。
    2023-02-02
  • 基于Redis實現(xiàn)基本搶紅包算法詳解

    基于Redis實現(xiàn)基本搶紅包算法詳解

    [key, value]的緩存數(shù)據(jù)庫, Redis官方性能描述非常高, 所以面對高并發(fā)場景, 使用Redis來克服高并發(fā)壓力是一個不錯的手段, 本文主要基于Redis來實現(xiàn)基本的搶紅包系統(tǒng)設(shè)計,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法

    銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法

    這篇文章主要介紹了銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 詳解redis在微服務(wù)領(lǐng)域的貢獻

    詳解redis在微服務(wù)領(lǐng)域的貢獻

    本文以dubbo為例看下redis是如何利用自身特性來完成注冊中心的功能,對redis微服務(wù)相關(guān)知識感興趣的朋友一起看看吧
    2021-10-10
  • RedisTemplate序列化設(shè)置的流程和具體步驟

    RedisTemplate序列化設(shè)置的流程和具體步驟

    在使用 Redis 作為緩存數(shù)據(jù)庫時,我們通常會使用 RedisTemplate 來簡化與 Redis 進行交互的操作,而其中一個重要的配置項就是序列化設(shè)置,它決定了數(shù)據(jù)在存儲到 Redis 中時的格式,本文將介紹如何進行 RedisTemplate 的序列化設(shè)置,以及一些常見的序列化方案
    2024-11-11
  • redis添加key幾種方式

    redis添加key幾種方式

    本文主要介紹了redis添加key幾種方式,主要介紹了3種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • Redis緩存更新策略詳解

    Redis緩存更新策略詳解

    這篇文章主要為大家詳細介紹了Redis緩存更新策略,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Redis設(shè)置密碼的實現(xiàn)步驟

    Redis設(shè)置密碼的實現(xiàn)步驟

    本文主要介紹了Redis設(shè)置密碼的實現(xiàn)步驟,主要包括兩種方法:臨時密碼和持久密碼,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08

最新評論

合作市| 东丽区| 阳山县| 陵水| 苍南县| 双江| 宜都市| 永定县| 和政县| 鹤峰县| 综艺| 边坝县| 周宁县| 阿合奇县| 永昌县| 保康县| 温泉县| 德化县| 金坛市| 始兴县| 清水县| 绥阳县| 焉耆| 靖安县| 铜山县| 灵璧县| 曲水县| 铜梁县| 东莞市| 张家界市| 扬中市| 寿阳县| 新乐市| 夹江县| 即墨市| 淅川县| 祁门县| 安平县| 洛隆县| 会昌县| 东平县|