Redis的五種基本數據類型

来源:https://www.cnblogs.com/lzy-blogs/archive/2022/06/23/16406928.html
-Advertisement-
Play Games

迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 你知道MySQL索引底層數據結構為啥用B+樹?而不用B樹、紅黑樹或者普通二叉樹? 我: 這事誰知道作 ...


Redis的五種基本數據類型

1、概述

  • Redis是一個由C語言開發的基於key-value形式的非關係型資料庫
    • key-value:鍵值對【鍵:String,值:五種數據類型】
      • 非關係資料庫:NoSQL【Not Only SQL】
        • 關係型資料庫:由二維表的形式來存儲數據
        • 不是關係型資料庫,就是非關係型資料庫
  • 存儲介質
    • 預設是記憶體
    • 可以持久化到磁碟上
  • 官網

2、Redis的五種基本數據類型

  • string:字元串
  • hash:對象
  • list:有序列表
  • set:無序集合
  • zset:有序集合

3、基本用法

1、string

set get getset mset mget

setnx strlen append incr incrby

decr decrby

#設置key和value,正確返回OK
set key value
set name zhangsan

#獲取key對應的value值,若沒有返回nil
get key
get name

#返回key對應的value,再重新設置這個key的值
getset key value
getset name lily

#設置多個鍵值對 正確返回OK
mset k1 v1 k2 v2 ...
mset sex 1 age 20 address hz

#獲取多對key對應的value
mget k1 k2 k3 ...
mget sex age address

#設置key-value:如果key不存在,則設置,如果key存在,則什麼都不做
#成功返回1,失敗返回0
setnx key value
setnx phone 13577889900

#計算key對應的value的長度
strlen key
strlen phone

#在原先的基礎之上進行字元串追加
append key value
append address xs
#本來address的值是hz,現在就是hzxs

#自增1,value是數值類型才能成功。如果key不存在,則直接以0為基礎,進行自增。如果這個值不是數值,則會報錯
incr key
incr age
#age本來是20,現在返回就是21

#自增指定數量,value是數值類型才能成功
incrby age 5
#age本來是20,現在返回就是25

#自減1,value是數值類型才能成功。
decr key
decr age
#age本來是0,現在返回就是-1

#自減指定數量,value是數值類型才能成功
decrby key
decrby age 20
#age本來是30,現在返回就是10

2、hash

hset hmset hget hmget hkeys

hvals hgetall hexists hlen hsetnx hdel

#設置值,必須指定大key和小key、value
hset person name tom

#設置多值
hmset person sex 1 age 20

#獲取單個小key對應的value
hget person sex

#獲取多個小key對應的value們
hmget person name age

#獲取所有的小key
hkeys person

#獲取所有的小key對應的values
hvals person

#獲取所有大key中的鍵值對
hgetall person

#判斷小key是否存在
hexists person age

#求大key中小key的數量
hlen person

#設置小key【小key不存在,則設置成功,如果存在,則什麼都不做】
hsetnx person age 25

#刪除
hdel person age

3、list

  • 增加數據:兩種方式
    • 左邊增加數據:左壓棧,後增加的數據在左邊
    • 右邊增加數據:右壓棧,後增加的數據在右邊
  • 讀取數據
    • 讀取數據從左往右

lpush rpush lrange llen lindex lpop rpop rpoplpush lrem

#左壓棧
lpush key v1 v2 ...
#特征:存入的數據順序跟讀取順序相反

#右壓棧
rpush key v1 v2 ...
#特征:存入的數據順序跟讀取順序相同

#查詢列表中的數據
#下標從0開始,如果要讀到最末尾,endIndex就是-1
lrange key startIndex endIndex
lrange key 0 -1

#獲取列表元素的個數
llen key

#獲取指定索引的元素,index表示索引
lindex key index
#獲取指定索引為3的元素
lindex key 3

#從左邊彈出一個元素[獲取最左邊的元素,再刪除它]
lpop key

#從右邊彈出一個元素
rpop key

#從一個列表的右邊彈出元素,再追到加另一個列表的左邊
rpoplpush 源列表 目標列表

#移除count個的value值
lrem key count value
lrem names 2 tom
#刪除names列表中2個tom【是從左開始移除】

4、set

sadd scard smembers sismember spop sdiff sinter sunion

sdiffstore sinterstore sunionstore smove

#存值
sadd myset aa bb cc
#返回存入的個數

#獲取集合長度
scard myset

#獲取集合元素
smembers myset

#判斷元素是否在集合中。存在:返回1,不存在:返回0
sismember myset cc

#隨機彈出一個元素
spop myset

#隨機彈出指定個數元素
spop myset 2

#差集
sdiff myset1 myset2

#交集
sinter myset1 myset2

#並集
sunion myset1 myset2

#將交集結果存入到另一個集合中
#sdiffstore 存儲結果的集合名 操作的集合一 操作的集合二
sdiffstore myset3 myset1 myset2

#將交集結果存入到另一個集合中
sinterstore myset4 myset1 myset2

#將並集結果存入到另一個集合中
sunionstore myset5 myset1 myset2

#將myset1中的aa元素移動到myset3
smove myset1 myset3 aa

5、zset(sorted set)

zadd zcard zrange zincrby zscore zinterstore zrangebyscore zrevrangebyscore

zrem zrank zremrangebyscore

#向有序集合中增加元素
#zadd 集合名 分數1 名稱1 分數2 名稱2 ...
zadd tuhaobang 10 zhangsan 80 lisi 30 wangwu
#返回插入的數量

#獲取集合中元素的數量
zcard tuhaobang

#獲取集合中指定區間的元素名稱,如果後面的索引是-1,則返回所有元素名稱
zrange tuhaobang 0 -1
1) "zhangsan"
2) "wangwu"
3) "lisi"

#獲取集合所有的元素,包括名稱和分數【是從小到大排序】
zrange tuhaobang 0 -1 withscores
1) "zhangsan"
2) "10"
3) "wangwu"
4) "30"
5) "lisi"
6) "80"

#獲取集合前兩位元素的名稱和分數
zrange tuhaobang 0 1 withscores
1) "zhangsan"
2) "10"
3) "wangwu"
4) "30"

#為集合中指定的名稱的元素增加分數
zincrby tuhaobang 50 zhangsan
#返回增加後的分數

#返回集合中指定名稱的分數
zscore tuhaobang wangwu

#把myzset1和myzset2根據元素名稱求出交集,並把相同名稱的value加在一起,得到元素名稱的新分數,存入到新集合中,成功返回的是交集的個數
#zinterstore 目標集合 操作集合的數量 集合一 集合二 ...
ZINTERSTORE myzset3 2 myzset1 myzset2

#zrangebyscore 集合名稱 小分數 大分數 [withscores] [limit 第幾條開始顯示 顯示數量]
#在不知道當前集合中最大值和最小值的情況下,-inf代表最小值   +inf代表最大值
#獲取tuhaobang集合中所有元素名稱及分數
zrangebyscore tuhaobang -inf +inf withscores
#獲取tuhaobang集合中第一個元素名稱及分數
zrangebyscore tuhaobang -inf +inf withscores limit 0 1
#獲取tuhaobang集合中分數在50-100之間的所有元素名稱及分數
zrangebyscore tuhaobang 50 100 withscores
#獲取tuhaobang集合中分數在50-100之間的前兩位元素名稱及分數
zrangebyscore tuhaobang 50 100 withscores limit 0 2

#按從大到小的順序進行排序,並獲取前2位
zrevrangebyscore tuhaobang +inf -inf withscores limit 0 2

#根據元素名刪除元素
zrem key member [member...]

#獲取集合中指定元素名稱對應的索引
zrank tuhaobang lisi

#刪除指定分數區間的元素[10,20],刪除成功返回刪除的個數,否則返回0
zremrangebyscore tuhaobang 10 20

4、通用命令

  • key相關
#查找匹配規則的key, *:代表0到多個字元,?代表一個字元
#查詢所有key
keys *
#查詢keys中第二個字母為a的key
keys ?a*

#判斷key是否存在,存在:返回1,不存在:返回0
exists key

#刪除key,刪除成功返回1,刪除不存在的key返回0
del key

#查看key剩餘有效時間
#ttl key
ttl gender
結果:返回剩餘有效時間,如果已經過期:返回-2,如果沒有設置有效時間:返回-1

#設置已經存在的key的過期時間,單位為秒
expire key seconds

#為已經存在的key設置過期時間,單位是毫秒
pexpire key 毫秒
#查看指定key的剩餘存活時間,單位是毫秒
pttl key

#移除指定key的生存時間,永久的持久化
persist key

#獲取指定的key的value的數據類型
type key

#移動當前資料庫中對應的key到其他資料庫,dbindex是0-15
move key dbindex
  • 資料庫相關
#redis預設有16個資料庫,分別是 db0 - db15
#查看當前資料庫下有多少key
dbsize

#切換資料庫,dbindex是0-15
select dbindex

#清空當前資料庫
flushdb

#清空所有資料庫中的數據
flushall

#實時監控Redis服務接收到的命令【其他客戶端的操作,能夠被監控到】
monitor
  • 查看redis讀寫性能
#redis寫的性能
redis-benchmark set

#redis讀的性能
redis-benchmark get

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • vue2中只能有一個根標簽,但是在vue3中根組件已經可以有多個根節點了 在vue2中只所以這麼做是因為vdom是一顆單根樹形結構,patch方法在遍歷的時候從根節點開始遍歷,它要求只有一個根節點,組件也會轉換為一個vdom,自然滿足這個要求 vue3中值所以可以有多個節點,是因為引入了Fragme ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. 防抖節流 這也是一個經典題目了,首先要知道什麼是防抖,什麼是節流。 防抖: 在一段時間內,事件只會最後觸發一次。 節流: 事件,按照一段時間的間隔來進行觸發。 實在不懂的話,可以去這個大佬的Demo地址玩玩防抖節流DEMO // 防 ...
  • TinyMCE是一款易用、且功能強大的所見即所得的富文本編輯器。同類程式有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 配置靈活,界面簡潔,支持自定義插件。 TinyMCE中文手冊:http://tinymc ...
  • 一、前言 小編最近開始學習typescript,懂得人都知道,typescript是vue3的基礎伴生,配合更加默契。就像vue2和js一樣!typescript不像js那樣瀏覽器直接可以解讀,需要我們把ts文件編譯成js文件,這樣瀏覽器才可以解讀。所以我們要安裝一下ts的環境和自動編譯,方便我們後 ...
  • 前言 : 組件系統是Vue.js其中一個重要的概念,它提供了一種抽象,讓我們可以使用獨立可復用的小組件來構建大型應用,任意類型的應用界面都可以抽象為一個組件樹。 現在基於vue的UI組件庫有很多,比如iview,element-ui等。但有時候這些組件庫滿足不了我們的開發需求,這時候我們就需要自己寫 ...
  • 1 前言 在嵌入式MCU軟體開發過程中,程式分層設計也是重中之重,關係到整個軟體開發過程中的協同開發,降低系統軟體的複雜度(複雜問題分解)和依賴關係、同時有利於標準化,便於管理各層的程式,提高各層邏輯的復用等。 2 分層介紹 2.1 硬體抽象層(HAL) 嵌入式開發的核心就是晶元,它提供固定的片內資 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 前言 回歸分析就是用於預測輸入變數(自變數)和輸出變數(因變數)之間的關係,特別當輸入的值發生變化時,輸出變數值也發生改變!回歸簡單來說就是對數據進行擬合。線性回歸就是通過線性的函數對數據進行擬合。機器學習並不能實現預言,只能實現簡單的預測。我們這次對房價關於其他因素的關係。 波士頓房價預測 下載相 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...