那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis數(shù)據(jù)類型介紹

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 10:53 ? 次閱讀

Redis 作為一個(gè)內(nèi)存數(shù)據(jù)庫已經(jīng)被許許多多的公司使用,它的性能非常的優(yōu)秀,讀寫速度支持非常快而且支持 10W 的 QPS 。今天我們就來學(xué)習(xí)下它的豐富的數(shù)據(jù)類型。

Redis 數(shù)據(jù)類型

Redis支持五種數(shù)據(jù)類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(有序集合)。

string(字符串)

字符串類型是Redis的最基本數(shù)據(jù)結(jié)構(gòu)。 字符串類型的值實(shí)際可以為字符串,數(shù)字,二進(jìn)制,但是值最大不能超過512M。

keyvalue
helloworld
counter1
bits10000100
json{"id":1,"name":"xiaocai","age":18}
string命令

設(shè)置

set key value [EX seconds] [PX milliseconds] [NX|XX]

get key

> set name xiaocai
OK
> get name
"xiaocai"

過期

setex key seconds value

> set name1 redis1 ex 10 #10秒后過期
OK
 > get name1
(nil)

> setex name2 10 redis2 #10秒后過期
OK
 > get name2
"redis2"
 > get name2
(nil)

> set name3 redis3 px 10 #10豪秒后過期
OK
 > get name3
(nil)

不存在才能設(shè)置成功或者必須存在才能設(shè)置成功

> set hello world nx #不存在才能設(shè)置成功
OK
 > set hello w nx #存在就設(shè)置失敗
(nil)
 > get hello
"world"

>set hello w xx  #存在才能設(shè)置成功
OK
 > set world hello xx #不存在就設(shè)置失敗
(nil)
 > get hello
"w"
 > get world
(nil)

批量設(shè)置

mset key value [key value ...]
mget key [key ...]


> mset name1 redis1 name2 redis2
OK

> mget name1 name2
1) "redis1"
2) "redis2"

> mget name1 name2 name3
1) "redis1"
2) "redis2"
3) (nil)

計(jì)數(shù)

incr key

incrby key increment

> set age 18  #value只能為整數(shù)
OK
 > incr age
(integer) 19
 > incrby age -5
(integer) 14
 > incrby age 10
(integer) 24

刪除

del key [key ...]

> del age
(integer) 1
> get age
(nil)
內(nèi)部編碼
  1. int 8個(gè)字節(jié)的長整型
  2. embstr 小于等于39個(gè)字節(jié)的字符串
  3. raw 大于39個(gè)字節(jié)的字符串
> set port 6379
OK
> object encoding port
"int"

> set hello world
OK
> object encoding hello 
"embstr"

> set longString abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
OK
> object encoding hello
"raw"
> strlen longString
(integer) 52

list(列表)

list類型是用來存儲(chǔ)多個(gè)有序的字符串。每列字符串稱之為元素。一個(gè)list的最大存儲(chǔ)為2^32-1個(gè)元素。可以對(duì)列表進(jìn)行雙端插入和彈出,也可以指定索引下標(biāo)獲取元素。

圖片

list命令

頭部和尾部添加元素

lpush key value [value ...]

rpush key value [value ...]

lrange key start stop

> lpush letter "a"
(integer) 1
> lpush letter "b"
(integer) 2
> lpush letter "c"
(integer) 3
> lrange letter 0 -1
1) "c"
2) "b"
3) "a"

> rpush letter "a"
(integer) 4
> rpush letter "b"
(integer) 5
> rpush letter "c"
> lrange letter 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "b"
6) "c"

頭部和尾部彈出元素

lpop key

rpop key

> lpop letter
"c"
> lpop letter
"b"
> lrange letter 0 -1
1) "a"
2) "a"
3) "b"
4) "c"

> rpop letter
"c"
> rpop letter
"b"
> lrange letter 0 -1
1) "a"
2) "a"

索引操作 索引需要對(duì)全部list進(jìn)行遍歷,性能會(huì)隨著元素個(gè)數(shù)的增大而變差

lrange key start stop

lindex key index

ltrim key start stop

len key

> rpush letter b c
(integer) 4
> lrange letter 0 -1
1) "a"
2) "a"
3) "b"
4) "c"
> lindex letter 2
"b"
> ltrim letter 0 -2
OK
> lrange letter 0 -1
1) "a"
2) "a"
3) "b"
> llen letter
(integer) 3

插入

insert key BEFORE|AFTER pivot value

> linsert letter before b c
(integer) 4
> linsert letter after a d
(integer) 5
> lrange letter 0 -1
1) "a"
2) "d"
3) "a"
4) "c"
5) "b"

修改

set key index value

> lset letter 2 B
OK
> lrange letter 0 -1
1) "a"
2) "d"
3) "B"
4) "c"
5) "b"
內(nèi)部編碼
  1. ziplist(壓縮列表):小于3.2版本,當(dāng)元素個(gè)數(shù)小于list-max-ziplist-entries配置(默認(rèn)512個(gè)),同時(shí)每個(gè)元素的值長度都小于list-max-ziplist-value配置(默認(rèn)64字節(jié))
  2. linkedlist(鏈表):小于3.2版本,不滿足ziplist的條件
  3. quicklist:Redis 3.2版本,以一個(gè)ziplist為節(jié)點(diǎn)的linkedlist
> object encoding letter
"quicklist"

hash (哈希)

hash是一個(gè)string類型的field和value的映射表。 它適合用于存儲(chǔ)對(duì)象,它是無序的,不能使用索引操作。

圖片

hash命令

設(shè)置

hset key field value

> hset user:1 name zhangSan
(integer) 1
> hset user:1 age 18
(integer) 1

獲取和獲取所有的field-value

hget key field

hgetall key

> hget user:1 name
"zhangSan"
> hgetall user:1
1) "name"
2) "zhangSan"
3) "age"
4) "18"

刪除

hdel key field [field ...]

> hdel user:1 age
(integer) 1
> hdel user:2 age
(integer) 0

長度

hlen key

> hlen user:1
(integer) 1

批量設(shè)置

hmset key field value [field value ...]

> hmset user:2 name liSi age 23
OK
> hmget user:2 name age
1) "liSi"
2) "23"
> hlen user:1
(integer) 1
> hlen user:2
(integer) 2

是否存在

hexists key field

> hexists user:2 name
(integer) 1
> hexists user:2 city
(integer) 0

所有的field和所有的value

hkeys key

hvals key

> hkeys user:1
1) "name"
> hkeys user:2
1) "name"
2) "age"
> hvals user:1
1) "zhangSan"
> hvals user:2
1) "liSi"
內(nèi)部編碼
  1. ziplist(壓縮列表):當(dāng)元素個(gè)數(shù)小于hash-max-ziplist-entries配置(默認(rèn)512個(gè))和每個(gè)元素大小小于hash-max-ziplist-value配置(默認(rèn)64字節(jié))時(shí)
  2. hashtable(哈希表):不滿足ziplist條件時(shí)
> object encoding user:1
"ziplist"

修改配置文件hash-max-ziplist-entries為5

> hmset test t1 v1 t2 v2 t3 v3 t4 v4 t5 v5 t6 v6
OK
 > object encoding test
"hashtable"

set(集合)

用來保存多個(gè)字符串元素,無序的,不能有重復(fù)元素,不能使用索引下標(biāo)獲取元素。一個(gè)集合可以存儲(chǔ)2^32-1個(gè)元素。

圖片

set命令

增加

add key member [member ...]

> sadd user:1:tag it music news
(integer) 3
> sadd user:1:tag bike news
(integer) 1

刪除

srem key member [member ...]

> srem user:1:tag bike
(integer) 1

個(gè)數(shù)

scard key

> scard user:1:tag
(integer) 3

是否存在

sismember key member

> sismember user:1:tag bike
(integer) 0
> sismember user:1:tag it
(integer) 1

隨機(jī)返回指定個(gè)數(shù)

srandmember key [count]

> srandmember user:1:tag
"news"
> srandmember user:1:tag 3
1) "news"
2) "music"
3) "it"

隨機(jī)彈出

spop key [count]

> spop user:1:tag
"news"
> srandmember user:1:tag 3
1) "music"
2) "it"

所有個(gè)數(shù)

smembers key

> smembers user:1:tag
1) "music"
2) "it"

交集

sinter key [key ...]

> sinter user:1:tag user:2:tag
1) "music"
2) "it"

并集

sunion key [key ...]

> sunion user:1:tag user:2:tag
1) "music"
2) "java"
3) "run"
4) "it"

差集

sdiff key [key ...]

> sdiff user:1:tag user:2:tag
(empty list or set)
 > sadd user:1:tag sleep
(integer) 1
 > sdiff user:1:tag user:2:tag
1) "sleep"
 > sdiff user:2:tag user:1:tag
1) "java"
2) "run"
內(nèi)部編碼
  1. intset(整數(shù)集合):元素都是整數(shù)和元素個(gè)數(shù)小于set-max-intset-entries配置(默認(rèn)512個(gè))時(shí)
  2. hashtable(哈希表):不滿足intset時(shí)
> object encoding user:1:tag
"hashtable"

> sadd numbers 1 2 3 4 5
(integer) 5
> object encoding numbers
"intset"

zset(有序集合)

zset保證了元素不能重復(fù),每個(gè)元素都有一個(gè)分?jǐn)?shù)(score)作為排序的依據(jù)。

圖片

zset命令

添加

zadd key [NX|XX] [CH] [INCR] score member [score member ...]

> zadd books 8.2 "Redis in Action"
(integer) 1
> zadd books 9.3 "Effective Java: Second Edition : Java"
(integer) 1
> zadd books 9.1 "Think in Java"
(integer) 1
> zadd books 9.3 "Python Cookbook" 9.0 "Effective Python"
(integer) 2

個(gè)數(shù)

zcard key

> zcard books
(integer) 5

升序返回范圍的成員

zrange key start stop [WITHSCORES]

> zrange books 0 -1
1) "Redis in Action"
2) "Effective Python"
3) "Think in Java"
4) "Effective Java: Second Edition : Java"
5) "Python Cookbook"

> zrange books 2 5
1) "Think in Java"
2) "Effective Java: Second Edition : Java"
3) "Python Cookbook"

升序返回成員時(shí)帶上分?jǐn)?shù)

> zrange books 0 -1 withscores
 1) "Redis in Action"
 2) "8.1999999999999993" 
 3) "Effective Python"
 4) "9"
 5) "Think in Java"
 6) "9.0999999999999996"
 7) "Effective Java: Second Edition : Java"
 8) "9.3000000000000007"
 9) "Python Cookbook"
10) "9.3000000000000007"

> zrange books 2 5 withscores
1) "Think in Java"
2) "9.0999999999999996"
3) "Effective Java: Second Edition : Java"
4) "9.3000000000000007"
5) "Python Cookbook"
6) "9.3000000000000007"
  1. 精度問題:內(nèi)部 score 使用 double 類型進(jìn)行存儲(chǔ),所以存在小數(shù)點(diǎn)精度問題
  2. withscores:帶上分?jǐn)?shù)

降序

zrevrange key start stop [WITHSCORES]

> zrevrange books 0 -1 withscores
 1) "Python Cookbook"
 2) "9.3000000000000007"
 3) "Effective Java: Second Edition : Java"
 4) "9.3000000000000007"
 5) "Think in Java"
 6) "9.0999999999999996"
 7) "Effective Python"
 8) "9"
 9) "Redis in Action"
10) "8.1999999999999993"

指定value的score

zscore key member

> zscore books "Think in Java"
"9.0999999999999996"

根據(jù)score的數(shù)值區(qū)間升序

zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

> zrangebyscore books 0 9.1 withscores
1) "Redis in Action"
2) "8.1999999999999993"
3) "Effective Python"
4) "9"
5) "Think in Java"
6) "9.0999999999999996"

根據(jù)score的數(shù)值區(qū)間降序

zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

> zrevrangebyscore books 9.1 0  withscores
1) "Think in Java"
2) "9.0999999999999996"
3) "Effective Python"
4) "9"
5) "Redis in Action"
6) "8.1999999999999993"

根據(jù)score的數(shù)值降序輸出所有元素

> zrevrangebyscore books +inf -inf  withscores
 1) "Python Cookbook"
 2) "9.3000000000000007"
 3) "Effective Java: Second Edition : Java"
 4) "9.3000000000000007"
 5) "Think in Java"
 6) "9.0999999999999996"
 7) "Effective Python"
 8) "9"
 9) "Redis in Action"
10) "8.1999999999999993"
  1. +inf 正無窮
  2. -inf 負(fù)無窮

刪除

zrem key member [member ...]

> zrem books "Effective Java: Second Edition : Java"
(integer) 1

增加分?jǐn)?shù)

zincrby key increment member

> zincrby books 2  "Redis in Action"
"10.199999999999999"
> zincrby books -1  "Redis in Action"
"9.1999999999999993"

交集

zinterstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE

> zadd textbooks 8 "chinese" 9 "english" 9.5 "mathematics"
(integer) 3
> zadd textbooks 9.2 "Think in Java"
(integer) 1

> zrange books 0 -1
1) "Redis in Action"
2) "Effective Python"
3) "Think in Java"
4) "Python Cookbook"
> zrange textbooks 0 -1
1) "chinese"
2) "english"
3) "Think in Java"
4) "mathematics"

> zinterstore newbooks 2 books textbooks
(integer) 1
> zrange newbooks 0 -1
1) "Think in Java"

并集

zunionstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE

> zunionstore newUnionbooks 2 books textbooks
(integer) 7
> zrange newUnionbooks 0 -1
1) "chinese"
2) "Redis in Action"
3) "Effective Python"
4) "english"
5) "Python Cookbook"
6) "mathematics"
7) "Think in Java"
內(nèi)部編碼
  1. ziplist(壓縮列表):元素個(gè)數(shù)小于zset-max-ziplist-entries配置(默認(rèn)128個(gè))和元素長度小于zset-max-ziplist-value配置(默認(rèn)64B)時(shí)
  2. skiplist(跳躍表):不滿足ziplist時(shí)
> object encoding books
"ziplist"

總結(jié)

這篇文章主要是學(xué)會(huì)基礎(chǔ)的 Redis 數(shù)據(jù)類型和基本的 API 以及每個(gè)數(shù)據(jù)類型背后的原理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    796

    瀏覽量

    41757
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    957

    瀏覽量

    54950
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13662
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    378

    瀏覽量

    10938
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GaussDB 數(shù)據(jù)類型介紹

    進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,以滿足不同的需求。本文將以示例的形式羅列并介紹一些常見的數(shù)據(jù)類型轉(zhuǎn)換方法等。? 數(shù)據(jù)類型概念及特點(diǎn) 數(shù)據(jù)類型是一組值的集合
    的頭像 發(fā)表于 06-05 16:40 ?1742次閱讀
    GaussDB <b class='flag-5'>數(shù)據(jù)類型</b><b class='flag-5'>介紹</b>

    詳解Redis的列表類型list

    Redis入門(四)Redis數(shù)據(jù)類型之列表類型list
    發(fā)表于 05-08 08:16

    vhdl數(shù)據(jù)類型

    VHDL中的標(biāo)識(shí)符可以是常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字。VHDL中的數(shù)據(jù)類型可以分成四大類: 標(biāo)量型(SCALAR TYPE):屬單元素的最基本的數(shù)據(jù)類型,通常用于描述一個(gè)單值數(shù)據(jù)對(duì)象
    發(fā)表于 03-30 15:59 ?11次下載

    Redis基本數(shù)據(jù)類型有哪些

    說說Redis基本數(shù)據(jù)類型有哪些吧 字符串:redis沒有直接使用C語言傳統(tǒng)的字符串表示,而是自己實(shí)現(xiàn)的叫做簡(jiǎn)單動(dòng)態(tài)字符串SDS的抽象類型。C語言的字符串不記錄自身的長度信息,而SDS
    的頭像 發(fā)表于 11-02 11:46 ?2603次閱讀

    結(jié)構(gòu)數(shù)據(jù)類型Struct介紹

    Struct類型是一種由多個(gè)不同數(shù)據(jù)類型元素組成的數(shù)據(jù)結(jié)構(gòu),其元素可以是基本數(shù)據(jù)類型,也可以是Struct、數(shù)組等復(fù)雜數(shù)據(jù)類型以及PLC
    的頭像 發(fā)表于 01-30 10:15 ?2028次閱讀

    什么是數(shù)據(jù)類型轉(zhuǎn)換

    常用的3種數(shù)據(jù)類型:1、Python數(shù)據(jù)類型第一種:字符串(str)。 2、Python數(shù)據(jù)類型第二種:整數(shù)(int)。 3、Python數(shù)據(jù)類型第三種:浮點(diǎn)數(shù)(float)。
    的頭像 發(fā)表于 02-23 15:21 ?1821次閱讀

    定義數(shù)據(jù)類型

    在運(yùn)算之前我們必須首先定義出數(shù)據(jù)類型,定義出腳本支持的數(shù)據(jù)類型,這是運(yùn)算的基礎(chǔ)。 這一小節(jié)我們將定義出數(shù)據(jù)類型,在這里我們暫時(shí)定義四個(gè)數(shù)據(jù)類型:
    的頭像 發(fā)表于 03-03 10:10 ?1006次閱讀

    細(xì)說redis十種數(shù)據(jù)類型及底層原理

    string 是 Redis 最基本的數(shù)據(jù)類型,它可以存儲(chǔ)任意類型數(shù)據(jù),比如文本、數(shù)字、圖片或者序列化的對(duì)象。一個(gè) string 類型的鍵
    的頭像 發(fā)表于 05-15 11:21 ?1949次閱讀
    細(xì)說<b class='flag-5'>redis</b>十種<b class='flag-5'>數(shù)據(jù)類型</b>及底層原理

    S71500-硬件數(shù)據(jù)類型介紹

    硬件數(shù)據(jù)類型:硬件數(shù)據(jù)類型由 CPU 提供。可用硬件數(shù)據(jù)類型的數(shù)目取決于 CPU。
    的頭像 發(fā)表于 05-16 09:21 ?5787次閱讀
    S71500-硬件<b class='flag-5'>數(shù)據(jù)類型</b><b class='flag-5'>介紹</b>

    GaussDB數(shù)據(jù)類型轉(zhuǎn)換介紹

    數(shù)據(jù)類型轉(zhuǎn)換在實(shí)際應(yīng)用中非常常見。GaussDB 作為一款企業(yè)級(jí)分布式關(guān)系型數(shù)據(jù)庫,在實(shí)際業(yè)務(wù)場(chǎng)景使用中,也會(huì)避免不了數(shù)據(jù)類型的轉(zhuǎn)換。以下是一些數(shù)據(jù)類型轉(zhuǎn)換的應(yīng)用場(chǎng)景。
    的頭像 發(fā)表于 06-05 16:29 ?917次閱讀
    GaussDB<b class='flag-5'>數(shù)據(jù)類型</b>轉(zhuǎn)換<b class='flag-5'>介紹</b>

    淺談PLC定義數(shù)據(jù)類型的應(yīng)用

    PLC定義數(shù)據(jù)類型以下用一個(gè)例子介紹PLC定義數(shù)據(jù)類型的應(yīng)用,以便進(jìn)一步理解PLC定義數(shù)據(jù)類型
    的頭像 發(fā)表于 07-24 16:07 ?1421次閱讀
    淺談PLC定義<b class='flag-5'>數(shù)據(jù)類型</b>的應(yīng)用

    Redis數(shù)據(jù)類型有哪些

    Redis數(shù)據(jù)類型有哪些?有五種常用數(shù)據(jù)類型:String、Hash、Set、List、SortedSet。以及三種特殊的數(shù)據(jù)類型:Bitmap、HyperLogLog、Geospa
    的頭像 發(fā)表于 10-09 10:51 ?848次閱讀

    Redis底層數(shù)據(jù)類型

    1. 前言 Redis的鍵值對(duì)中的常見數(shù)據(jù)類型有String (字符串)、List(列表)、Hash(哈希)、Set(集合)、Zset(有序集合)。那么其對(duì)應(yīng)的底層數(shù)據(jù)結(jié)構(gòu)有SDS(simple
    的頭像 發(fā)表于 10-09 14:05 ?435次閱讀
    <b class='flag-5'>Redis</b>底層<b class='flag-5'>數(shù)據(jù)類型</b>

    redis的五種數(shù)據(jù)類型

    )和有序集合(sorted set)。下面將詳細(xì)介紹這五種數(shù)據(jù)類型,包括其特點(diǎn)、應(yīng)用場(chǎng)景和使用方法。 字符串(String) 字符串是 Redis 最為基礎(chǔ)的數(shù)據(jù)類型,它可以保存任意
    的頭像 發(fā)表于 11-16 11:06 ?694次閱讀

    redis的五種數(shù)據(jù)類型底層數(shù)據(jù)結(jié)構(gòu)

    Redis是一種內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),支持多種數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)不僅可以滿足常見的存儲(chǔ)需求,還能夠通過其底層數(shù)據(jù)結(jié)構(gòu)提供高效的操作和查詢。以
    的頭像 發(fā)表于 11-16 11:18 ?745次閱讀
    诚信百家乐官网平台| 中金时时彩平台| 大发888王博| 德州扑克视频教学| 南漳县| 如何玩百家乐官网扑克| 澳门百家乐官网真人娱乐城| 百家乐官网15人桌布| 百家乐官网有没有破解之法| 三元玄空24山坐向| 百家乐赌博论坛在线| 大发888官方下载网址| 新化县| 百家乐官网赌场破解方法| 网上百家乐官网内| 钱隆百家乐破解版| 最新娱乐城注册送体验金| 百家乐官网对子计算方法| 新百家乐官网的玩法技巧和规则| 百家乐官网微笑玩| 百家乐小路是怎么画的| 威尼斯人娱乐城 色情| 玉环县| 新濠百家乐官网娱乐城| 百家乐怎么稳赢| 日博娱乐城| 百家乐官网槛| 澳门百家乐路单怎么看| 德州扑克起手牌| 澳门百家乐官网游戏| 百家乐游戏机路法| 三易博娱乐城| 百家乐官网赌注| 赌场百家乐的玩法技巧和规则 | 英皇百家乐官网的玩法技巧和规则| 红桃K百家乐的玩法技巧和规则| 青川县| A8百家乐官网的玩法技巧和规则| 免费百家乐计划工具| 百家乐官网娱乐城提款| 百家乐梅花图标|