中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis數據類型strings的詳細介紹

發布時間:2021-08-31 15:07:00 來源:億速云 閱讀:161 作者:chen 欄目:關系型數據庫

本篇內容主要講解“redis數據類型strings的詳細介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“redis數據類型strings的詳細介紹”吧!

1.      String(字符串)

string是最簡單的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。

redis采用結構sdshdr和sds封裝了字符串,字符串相關的操作實現在源文件sds.h/sds.c中。在Redis中字符串類型的Value最多可以容納的數據長度是512M

在Redis中是二進制安全的,這便意味著該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等

數據結構定義如下:

typedefchar*sds;

structsdshdr{

    longlen;

    longfree;

    charbuf[];

};

1.1.  SET

Set key value [EX seconds] [PXmilliseconds] [NX|XX]

將字符串值value關聯到key。如果key已經持有其他值,SET 就覆寫舊值,無視類型。對于某個原本帶有生存時間(TTL)的鍵來說,當 SET 命令成功在這個鍵上執行時, 這個鍵原有的 TTL 將被清除。

可選參數

從 Redis 2.6.12 版本開始,SET 命令的行為可以通過一系列參數來修改:

  • EXsecond:設置鍵的過期時間為 second秒。 SET key value EX second效果等同于SETEXkey second value。

  • PXmillisecond:設置鍵的過期時間為 millisecond毫秒。 SET key value PX millisecond效果等同于PSETEXkey millisecond value。

  • NX:只在鍵不存在時,才對鍵進行設置操作。SETkey value NX效果等同于 SETNX key value。

  • XX:只在鍵已經存在時,才對鍵進行設置操作。

 #賦值與取值

127.0.0.1:6379> set dbredis

OK

127.0.0.1:6379> get db

"redis"

 #使用ex選項

127.0.0.1:6379> set dbredis ex 20

OK

127.0.0.1:6379> ttl db

(integer) 16

127.0.0.1:6379> get db

"redis"

127.0.0.1:6379> ttl db

(integer) 5

127.0.0.1:6379> get db

"redis"

127.0.0.1:6379> get db

"redis"

127.0.0.1:6379> get db

(nil)

# 使用 PX 選項

127.0.0.1:6379>set db redis px 20000

OK

127.0.0.1:6379>PTTL db

(integer)15674

127.0.0.1:6379>PTTL db

(integer)8974

127.0.0.1:6379>PTTL db

(integer)8045

127.0.0.1:6379>get db

"redis"

127.0.0.1:6379>PTTL db

(integer)2482

127.0.0.1:6379>get db

"redis"

127.0.0.1:6379>get db

(nil)

# 使用 NX 選項

127.0.0.1:6379>set db oracle NX

OK

127.0.0.1:6379>get db

"oracle"

127.0.0.1:6379>set db redis NX  ---鍵存在,失敗

(nil)

127.0.0.1:6379>get db

"oracle"

# 使用 XX 選項

127.0.0.1:6379>exists name

(integer)0

127.0.0.1:6379>get name

(nil)

127.0.0.1:6379>set name hunt1574 XX  ---鍵不存在,失敗

(nil)

127.0.0.1:6379>set name redis

OK

127.0.0.1:6379>set name hunt1574 XX

OK

127.0.0.1:6379>get name

"hunt1574"

1.2.  SETEX

Setex key seconds value

將值 value 關聯到 key ,并將key 的生存時間設為 seconds (以秒為單位)。

如果 key 已經存在, SETEX 命令將覆寫舊值。

這個命令類似于以下兩個命令:

SETkey value

EXPIREkey seconds  # 設置生存時間

不同之處是, SETEX 是一個原子性(atomic)操作,關聯值和設置生存時間兩個動作會在同一時間內完成,該命令在 Redis 用作緩存時,非常實用。

#key不存在賦值

127.0.0.1:6379>EXISTS user

(integer)0

127.0.0.1:6379>setex user 30 root

OK

127.0.0.1:6379>get user

"root"

127.0.0.1:6379>ttl user

(integer)15

127.0.0.1:6379>get user

(nil)

#key存在賦值

127.0.0.1:6379>setex user 20 admin

OK

127.0.0.1:6379>get user

"admin"

127.0.0.1:6379>ttl user

(integer)14

127.0.0.1:6379>get user

(nil)

1.3.  SETNX

SETNX key value

將 key 的值設為 value ,當且僅當 key 不存在。

若給定的 key 已經存在,則 SETNX 不做任何動作。

SETNX是『SET if Not eXists』(如果不存在,則 SET)的簡寫。

#賦值與取值

127.0.0.1:6379>EXISTS www

(integer)0

127.0.0.1:6379>setnx www code.google.com

(integer)1

127.0.0.1:6379>setnx www redis.io

(integer)0

127.0.0.1:6379>get www

"code.google.com"

127.0.0.1:6379>

1.4.  SETRANGE

SETRANGE key offset value

用 value 參數覆寫(overwrite)給定offset的 key 所儲存的字符串值

127.0.0.1:6379>set www code.google.com

OK

127.0.0.1:6379>get www

"code.google.com"

127.0.0.1:6379>SETRANGE www 0 mail

(integer)15

127.0.0.1:6379>get www

"mail.google.com"

127.0.0.1:6379>SETRANGE www 0 gmail

(integer)15

127.0.0.1:6379>get www

"gmailgoogle.com"

1.5.  MSET

MSET key value [key value ...]

同時設置一個或多個 key-value 對。

如果某個給定 key 已經存在,那么 MSET 會用新值覆蓋原來的舊值,如果這不是你所希望的效果,請考慮使用 MSETNX 命令:它只會在所有給定 key 都不存在的情況下進行設置操作。

MSET是一個原子性(atomic)操作,所有給定 key 都會在同一時間內被設置,某些給定 key 被更新而另一些給定 key 沒有改變的情況,不可能發生。

#賦值與取值

127.0.0.1:6379>mset os "linux" db "redis" date "2015-03-17"

OK

127.0.0.1:6379>mget os db date

1)"linux"

2)"redis"

3)"2015-03-17"

#值覆蓋

127.0.0.1:6379>mset os "linux" db "oracle" date "2015-03-17"

OK

127.0.0.1:6379>mget os db date

1)"linux"

2)"oracle"

3)"2015-03-17"

127.0.0.1:6379>

1.6.  MSETNX

MSETNX key value [key value ...]

同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在。

即使只有一個給定 key 已存在,MSETNX 也會拒絕執行所有給定 key 的設置操作。MSETNX是原子性的,因此它可以用作設置多個不同 key 表示不同字段(field)的唯一性邏輯對象(unique logic object),所有字段要么全被設置,要么全不被設置。

#賦值與取值

127.0.0.1:6379>mget os db date

1)"linux"

2)"redis"

3) "2015-03-17"

127.0.0.1:6379>msetnx os "linux" db "oracle" date "2015-03-17"

(integer)0

127.0.0.1:6379>mget os db date

1)"linux"

2)"redis"

3)"2015-03-17"

127.0.0.1:6379>

1.7.  GET

GET key

返回 key 所關聯的字符串值。

如果 key 不存在那么返回特殊值nil 。

假如 key 儲存的值不是字符串類型,返回一個錯誤,因為 GET 只能用于處理字符串值。

127.0.0.1:6379>set dbname redis

OK

127.0.0.1:6379>get dbname

"redis"

127.0.0.1:6379>get dbversion

(nil)

127.0.0.1:6379>lpush db redis mysql mongodb

(integer)3

127.0.0.1:6379>get db

(error)WRONGTYPE Operation against a key holding the wrong kind of value

1.8.  MGET

MGET key [key ...]

返回所有(一個或多個)給定 key 的值。

如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。因此,該命令永不失敗。

#賦值與取值

127.0.0.1:6379>set date 2015-03-17

OK

127.0.0.1:6379>set time 10:00

OK

127.0.0.1:6379>mget date time

1)"2015-03-17"

2)"10:00"

127.0.0.1:6379>mget date time week  ---week不存在,返回nil

1)"2015-03-17"

2)"10:00"

3)(nil)

1.9.  GETRANGE

GETRANGE key startend

返回 key 中字符串值的子字符串,字符串的截取范圍由 start 和 end 兩個偏移量決定(包括start 和 end 在內)。負數偏移量表示從字符串最后開始計數, -1 表示最后一個字符, -2 表示倒數第二個,以此類推。范圍超過字符串最大下標值以最大下標值為準。

#賦值與取值

127.0.0.1:6379>set www redis.io

OK

127.0.0.1:6379>GETRANGE www 0 4

"redis"

127.0.0.1:6379>GETRANGE www -2 -1

"io"

127.0.0.1:6379>GETRANGE www -100 -1

"redis.io"

1.10.      GETSET

GETSET key value

將給定 key 的值設為 value ,并返回key 的舊值(old value)。

當 key 存在但不是字符串類型時,返回一個錯誤。

127.0.0.1:6379>getset dbname mysql

(nil)

127.0.0.1:6379>get dbname

"mysql"

127.0.0.1:6379>getset dbname redis

"mysql"

127.0.0.1:6379>get dbname

"redis"

1.11.      INCR

INCR key

將 key 中儲存的數字值增一。

如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。

127.0.0.1:6379>EXISTS pages

(integer)0

127.0.0.1:6379>incr pages

(integer)1

127.0.0.1:6379>get pages

"1"

127.0.0.1:6379>set rows 0

OK

127.0.0.1:6379>incr rows

(integer)1

127.0.0.1:6379>incr rows

(integer)2

127.0.0.1:6379>incr rows

(integer)3

127.0.0.1:6379>get rows

"3"

127.0.0.1:6379>

1.12.      INCRBY

INCRBY keyincrement

將 key 所儲存的值加上增量 increment 。

如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCRBY 命令。

如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內

#鍵存在

127.0.0.1:6379>get rows

"3"

127.0.0.1:6379>INCRBY rows 3

(integer)6

127.0.0.1:6379>INCRBY rows 3

(integer)9

127.0.0.1:6379>INCRBY rows 3

(integer)12

#鍵不存在

127.0.0.1:6379>get num

(nil)

127.0.0.1:6379>INCRBY num -2

(integer)-2

127.0.0.1:6379>INCRBY num -2

(integer)-4

127.0.0.1:6379>INCRBY num -2

(integer)-6

1.13.      INCRBYFLOAT

INCRBYFLOAT keyincrement

為 key 中所儲存的值加上浮點數增量 increment 。

如果 key 不存在,那么 INCRBYFLOAT 會先將 key 的值設為 0 ,再執行加法操作。

如果命令執行成功,那么 key 的值會被更新為(執行加法之后的)新值,并且新值會以字符串的形式返回給調用者。

無論是 key 的值,還是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 那樣的指數符號(exponential notation)來表示,但是,執行 INCRBYFLOAT 命令之后的值總是以同樣的形式儲存,也即是,它們總是由一個數字,一個(可選的)小數點和一個任意位的小數部分組成(比如 3.14 、 69.768 ,諸如此類),小數部分尾隨的 0 會被移除,如果有需要的話,還會將浮點數改為整數(比如 3.0 會被保存成 3 )。

127.0.0.1:6379>set price 45.99

OK

127.0.0.1:6379>INCRBYFLOAT price 4.5

"50.49"

127.0.0.1:6379>INCRBYFLOAT price 4.5

"54.99"

127.0.0.1:6379>get num

(nil)

127.0.0.1:6379>INCRBYFLOAT num 5.3

"5.3"

127.0.0.1:6379>INCRBYFLOAT num 5.3

"10.6"

1.14.      DECR

DECR key

將 key 中儲存的數字值減一。

如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECR 操作。

如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。

127.0.0.1:6379>set price 398.99

OK

127.0.0.1:6379>decr price

(error)ERR value is not an integer or out of range

127.0.0.1:6379>set pages 98

OK

127.0.0.1:6379>decr pages

(integer)97

127.0.0.1:6379>decr pages

(integer)96

1.15.      DECRBY

DECRBY keydecrement

將 key 所儲存的值減去減量 decrement 。

如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECRBY 操作。

如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。

127.0.0.1:6379>get pages

"96"

127.0.0.1:6379>decrby pages 5

(integer)91

127.0.0.1:6379>decrby pages 5

(integer)86

127.0.0.1:6379>decrby pages -5

(integer)91

127.0.0.1:6379>decrby pages -5

(integer)96

127.0.0.1:6379>

1.16.      APPEND

APPEND key value

如果 key 已經存在并且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。

如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。

127.0.0.1:6379> get db

(nil)

127.0.0.1:6379> APPENDdb redis

(integer) 5

127.0.0.1:6379> APPENDdb .io

(integer) 8

127.0.0.1:6379> get db

"redis.io"

127.0.0.1:6379>

1.17.      STRLEN

STRLEN key

返回 key 所儲存的字符串值的長度。

當 key 儲存的不是字符串值時,返回一個錯誤。

127.0.0.1:6379> getpages

"96"

127.0.0.1:6379> STRLENpages

(integer) 2

127.0.0.1:6379> get db

"redis.io"

127.0.0.1:6379> STRLENdb

(integer) 8

127.0.0.1:6379>

到此,相信大家對“redis數據類型strings的詳細介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

全州县| 广元市| 连州市| 根河市| 阿鲁科尔沁旗| 五大连池市| 罗甸县| 海南省| 东山县| 乌拉特后旗| 博客| 宜宾市| 富裕县| 八宿县| 蓬安县| 蛟河市| 普格县| 衢州市| 剑川县| 泗洪县| 浦北县| 芜湖市| 汶上县| 金乡县| 红河县| 仁寿县| 荆州市| 湘潭县| 句容市| 朝阳市| 叶城县| 平塘县| 泸州市| 武定县| 莱西市| 岳西县| 贡嘎县| 汪清县| 个旧市| 逊克县| 南部县|