1. 程式人生 > >redis-string型別命令操作筆記

redis-string型別命令操作筆記

redis-string型別

命令

1.賦值與取值

SET key value # 賦值

GET key       # 取值

2.遞增數字

INCR num

3.增加指定的整數

`INCRBY`命令與`INCR`命令基本一樣,只不過前者可以通過`increment`引數指定一次增加的數值,如:


redis> INCRBY bar 2
(integer) 2
redis> INCRBY bar 3
(integer) 5

4.減少指定的整數

DECR key

DECRBY key decrement

5.增加指定浮點數

INCRBYFLOAT key increment

redis> INCRBYFLOAT bar 2.7
"6.7"
redis> INCRBYFLOAT bar 5E+4
"50006.69999999999999929"

6.向尾部追加值

APPEND key value

APPEND作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設定為value,即相當於SET key value。返回值是追加後字串的總長度。如:

redis> SET key hello
OK
redis> APPEND key " world!"
(integer) 12

此時key的值是"hello world!"。APPEND命令的第二個引數加了雙引號,原因是該引數包含空格,在redis-cli中輸入需要雙引號以示區分。

7.獲取字串長度

STRLEN key

STRLEN命令返回鍵值的長度,如果鍵不存在則返回0。例如:

redis> STRLEN key
(integer) 12
redis> SET key 你好
OK
redis> STRLEN key
(integer) 6

前面提到了字串型別可以儲存二進位制資料,所以它可以儲存任何編碼的字串。例子中Redis接收到的是使用UTF-8編碼的中文,由於“你”和“好”兩個字的UTF-8編碼的長度都是3,所以此例中會返回6。

8.同時獲得/設定多個鍵值

MGET key [key …]


MSET key value [key value …]

MGET/MSET與GET/SET相似,不過MGET/MSET可以同時獲得/設定多個鍵的鍵值。例如:

redis> MSET key1 v1 key2 v2 key3 v3
OK
redis> GET key2
"v2"
redis> MGET key1 key3
1) "v1"
2) "v3"

9.位操作

GETBIT key offset

SETBIT key offset value

BITCOUNT key [start] [end]

BITOP operation destkey key [key …]

一個位元組由8個二進位制位組成,Redis提供了4個命令可以直接對二進位制位進行操作。為了演示,我們首先將foo鍵賦值為bar:

redis> SET foo bar
OK

bar的3個字母“b”“a”和“r”對應的ASCII碼分別為98、97和114,轉換成二進位制後分別為1100010、1100001和1110010,

GETBIT命令可以獲得一個字串型別鍵指定位置的二進位制位的值(0或1),索引從0開始:

redis> GETBIT foo 0
(integer) 0
redis> GETBIT foo 6
(integer) 1

如果需要獲取的二進位制位的索引超出了鍵值的二進位制位的實際長度則預設位值是0:

redis> GETBIT foo 100000
(integer) 0


SETBIT命令可以設定字串型別鍵指定位置的二進位制位的值,返回值是該位置的舊值。如我們要將foo鍵值設定為aar,可以通過位操作將foo鍵的二進位制位的索引第6位設為0,第7位設為1:

redis> SETBIT foo 6 0
(integer) 1
redis> SETBIT foo 7 1
(integer) 0
redis> GET foo
"aar"


如果要設定的位置超過了鍵值的二進位制位的長度,SETBIT命令會自動將中間的二進位制位設定為0,同理設定一個不存在的鍵的指定二進位制位的值會自動將其前面的位賦值為0:

redis> SETBIT nofoo 10 1
(integer) 0
redis> GETBIT nofoo 5
(integer) 0

BITCOUNT命令可以獲得字串型別鍵中值是1的二進位制位個數,例如:


redis> BITCOUNT foo
(integer) 10

可以通過引數來限制統計的位元組範圍,如我們只希望統計前兩個位元組(即"aa"):
redis> BITCOUNT foo 0 1
(integer) 6



BITOP命令可以對多個字串型別鍵進行位運算,並將結果儲存在destkey引數指定的鍵中。BITOP命令支援的運算操作有AND、OR、XOR和NOT。如我們可以對bar和aar進行OR運算:


redis> SET foo1 bar
OK
redis> SET foo2 aar
OK
redis> BITOP OR res foo1 foo2
(integer) 3
redis> GET res
"car"




Redis 2.8.7引入了BITPOS命令,可以獲得指定鍵的第一個位值是0或者1的位置。還是以“bar”這個鍵值為例,如果想獲取鍵值中的第一個二進位制位為1的偏移量,則可以執行:



redis> SET foo bar
OK
redis> BITPOS foo 1
(integer) 1

正如BITPOS命令的結果所示,“bar”中的第一個值為1的二進位制位的偏移量為1(同其他命令一樣,BITPOS命令的索引也是從0開始算起)。那麼有沒有可能指定二進位制位的查詢範圍呢?BITPOS命令的第二個和第三個引數分別可以用來指定要查詢的起始位元組(同樣從0開始算起)和結束位元組。注意這裡的單位不再是二進位制位,而是位元組。如果我們想查詢第二個位元組到第三個位元組之間(即“a”和“r”)出現的第一個值為1的二進位制位的偏移量,則可以執行:

redis> BITPOS foo 1 1 2
(integer) 9


這裡的返回結果的偏移量是從頭開始算起的,與起始位元組無關。另外要特別說明的一個有趣的現象是如果不設定結束位元組且鍵值的所有二進位制位都是1,則當要查詢值為0的二進位制位偏移量時,返回結果會是鍵值長度的下一個字位的偏移量。這是因為Redis會認為鍵值長度之後的二進位制位都是0。

利用位操作命令可以非常緊湊地儲存布林值。比如如果網站的每個使用者都有一個遞增的整數ID,如果使用一個字串型別鍵配合位操作來記錄每個使用者的性別(使用者ID作為索引,二進位制位值1和0表示男性和女性),那麼記錄100萬個使用者的性別只需佔用100 KB多的空間,而且由於GETBIT和SETBIT的時間複雜度都是O(1),所以讀取二進位制位值效能很高。


注意:
使用SETBIT命令時,如果當前鍵的鍵值長度小於要設定的二進位制位的偏移量時,Redis會自動分配記憶體並將鍵值的當前長度到指定的偏移量之間的二進位制位都設定為0。如果要分配的記憶體過大,則很可能會造成伺服器的暫時阻塞而無法接收同一時間的其他請求。舉例而言,在一臺2014年的MacBook Pro筆記本上,設定偏移量232-1的值(即分配500 MB的記憶體)需要耗費將近1秒的時間。分配過大的偏移量除了會造成伺服器阻塞,還會造成空間浪費。還是舉剛才儲存網站使用者性別的例子,如果這個網站的使用者ID是從100000001開始的,那麼會造成10多MB的浪費,正確的做法是給每個使用者的ID減去100000000再進行儲存。

書籤:雜湊型別

相關推薦

redis-string型別命令操作筆記

redis-string型別 命令 1.賦值與取值 SET key value # 賦值 GET key # 取值 2.遞增數字 INCR num 3.增加指定的整數 `INCRBY`命令與`INCR`命令基本一樣,只不過前者可以通過`increm

redis-列表型別命令操作筆記

列表型別 命令 1.向列表兩端增加元素 LPUSH key value [value …] # LPUSH命令用來向列表左邊增加元素,返回值表示增加元素後列表的長度。 # LPUSH命令還支援同時增加多個元素,例如: redis> LPUSH numbers 2

redis-雜湊型別命令操作筆記

雜湊型別 命令 1.賦值與取值 HSET key field value # 賦值 HGET key field # 取值 HMSET key field value [field value …] # 多次賦值 HMGET key field [field …]

REDIS五種基本資料型別命令操作(1)

REDIS 五種基本資料型別命令操作 1. 字串(string) set key value #儲存一個鍵值對 get key #通過key來去對應的值 mset key1 v1 k2 v2 #一次儲存多

REDIS五種基本資料型別命令操作(2)

REDIS 五種基本資料型別命令操作 1.set集合 sadd key v1 [v2 v3] # 新增值到set集合中 smembers key # 迭代遍歷set集合 sismember key value # 判斷是否存在一個

redis string型別設定過期時間後 再進行set操作,會清除過期時間

redis的set操作實際上是: 刪除之前的key,再建立一個新的key,所以之前key就會被刪除連帶賦予的過期時間, 這時我們建議使用setrange 命令進行覆蓋操作,避免過期時間被刪除. redis 的線上測試網址 (http://try.redis.io/  )

Redis String 型別相關的命令

String 型別支援的命令表 命令 描述 set key value 設定 key 對應 String型別的值,返回 1 表示成功, 返回 0 表示失敗 setn

golang-redisstring型別簡單操作

1:安裝redigo go get github.com/garyburd/redigo/redis 2:連線redis(通過ip埠) c, err := redis.Dial("tcp", "192.168.2.225:6379") if err

C# 通過ServiceStack 操作Redis——String型別的使用及示例

1.引用Nuget包 ServiceStack.Redis 我這裡就用別人已經封裝好的Reids操作類來和大家一起參考了下,看看怎麼使用ServiceStack.Redis 操作Redis資料 RedisConfigInfo--redis配置檔案資訊 /// <summary>

Redis高級命令操作大全--推薦

例如 ati sort list 安裝 命令執行 大數 結合 字符串長度 鏈表 redis安裝和使用 redis安裝 wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.

Redis資料型別基本操作

String型別:   設定鍵值對: set key value    設定鍵值對和過期時間:setex key seconds value ( 以秒為單位 )   設定多個鍵值對: mset key1 value1 key2 value2    給已有鍵的值追加: ap

redis基本型別操作

1、Redis版本約定 小數點之後的第一位是偶數為穩定版本 小數點之後的第一位是奇數為不穩定版本 2、redis啟動與停止 啟動:redis-server redis服務會預設啟動6379埠號         

Redis資料庫】命令學習筆記——釋出訂閱、事務、指令碼、連線命令彙總

本篇基於redis 4.0.11版本,學習釋出訂閱、事務、指令碼、連線的相關命令。 Redis 釋出訂閱(pub/sub)是一種訊息通訊模式:傳送者(pub)傳送訊息,訂閱者(sub)接收訊息。 序

Redis資料型別以及操作

第二章 Redis 資料型別及操作  2.1 前言 Redis 的作者 antirez(Salvatore Sanfilippo)曾經發表了一篇名為 Redis 宣言(Redis Manifesto) 的文章,文中列舉了 Redis 的七個原則,以向大家闡明

redis資料型別命令彙總

string 字串 命令 行為 返回值 使用示例(略去回撥函式) set 設定儲存在給定鍵中的值 OK set(‘key’, ‘val

StringBuffer對String型別操作

String類是所有專案開發中一定會用到的一個功能類,並且這個類擁有如下的特點: 每一個字串的常量都屬於一個String類的匿名物件,並且不可更改; String有兩個常量池:靜態常量池、執行時常量池; String類物件例項化建議使用直接賦值的形式完成,這樣可以直接

Redis資料型別及其操作

簡介 redis預設埠是6379,自定義埠使用:reids-server –port 6380 關閉redis。在關閉redis前考慮到可能正在將記憶體中的資料同步到磁碟,強行關閉redis有可能導致資料丟失,應使用SHUTDOWN 命令進行關閉:

Redis 簡介與命令操作

tar zset ref key-value 基本 .cn 其他 安全 數據   redis 是 key-value 的數據,所以每個數據都是一個鍵值對,鍵的類型是字符串; 值的類型分為五種:string、hash、list、set(集合)、zset(有序集合)。   數據

String型別常用操作

增(cteate): 1;*.string(); 把其他型別轉換成string型別;獲得新的string 建議寫法為 "*"; 2;str = str1.concat(str2); 把兩個字串型別拼接

redis操作常用命令String型別資料)

前面已經寫過如何在Ubuntu上部署redis了,https://blog.csdn.net/zc_ad/article/details/84614991 在window中使用redis-cli連線伺服器中的redis-server 1,建立clirun.bat,並在裡面新增一下內容:1