Redis入門之一 字串(string)

2021-08-21 15:36:19 字數 4635 閱讀 3493

redis 中最簡單的資料結構,它既可以儲存文字(比如 「hello world」),又可以儲存數字(比如整數 10086 和浮點數 3.14),還可以儲存二進位制資料(比如 10010100)。redis 為這幾種型別的值分別設定了相應的操作命令,讓使用者可以針對不同的值做不同的處理。

為字串鍵設定值、獲取字串鍵的值、獲取字串值的長度,等等。

1.1.1 set key value

將字串鍵 key 的值設定為 value ,命令返回 ok 表示設定成功。 如果字串鍵 key 已經存在,那麼用新值覆蓋原來的舊值。複雜度為 o(1)

redis> set msg "hello world"  ok

redis> set msg "goodbye"

# 覆蓋原來的值 "hello world" ok

1.1.2 set key value [nx|xx]

set 命令還支援可選的 nx 選項和 xx 選項:

redis> set nx-str "this will fail" xx                # 鍵不存在,指定 xx 選項導致設定失敗  

(nil)

redis> set nx-str "this will success" nx # 鍵不存在,所以指定 nx 選項是可行的

ok

redis> set nx-str "this will fail" nx # 鍵已經存在,指定 nx 選項導致設定失敗

(nil)

redis> set nx-str "this will success again!" xx # 鍵已經存在,指定 xx 選項是可行的

ok

1.2.1 get key

返回字串鍵 key 儲存的值。複雜度為 o(1) 。

redis> set msg "hello world"  

ok

redis> get msg

hello world

redis> set number 10086

ok

redis> get number

10086

1.3.1 setnx key value

僅在鍵 key 不存在的情況下,將鍵 key 的值設定為 value ,效果和 set key value nx 一樣。 nx 的意思為「not exists」(不存在)。鍵不存在並且設定成功時,命令返回 1 ;因為鍵已經存在而導致設定失敗時,命令返回 0 。複雜度為 o(1) 。

redis> setnx new-key

"i am a new key!"

1 redis> setnx new-key

"another new key here!"

# 鍵已經存在,設定失敗

0 redis> get

new-key

# 鍵的值沒有改變

i am a new

key!

命令

效果複雜度

mset key value [key value …]

一次為乙個或多個字串鍵設定 值,效果和同時執行多個 set 命 令一樣。 命令返回 ok 。

o(n),n 為要設定的字串鍵 數量。

mget key [key …]

一次返回乙個或多個字串 鍵的 值,效果和同時執行多個 get 命 令一樣

o(n),n 為要獲取的字串鍵 數量。

msetnx key value [key value …]

只有在所有給定鍵都不存在的情況下, msetnx 會為所有給定鍵設定值,效果和同時執行多個 setnx 一樣。如果給定的鍵至少有乙個是存在的,那麼 msetnx 將不執行任何設定操作

返回 1 表示設定成功,返回 0 表示設定失敗。複雜度為 o(n) , n 為給定的鍵數量。

redis> msetnx nx-1

"hello" nx-2

"world" nx-3

"good luck"

1 redis> set ex-key

"bad key here"

ok

redis> msetnx nx-4

"banana" ex-key

"cherry" nx-6

"durian"

0

因為 ex-key 鍵已經存在,所以第二個 msetnx 會執行失敗,所有鍵都不會被設定。

getset key new-value

將字串鍵的值設定為 new-value ,並返回字串鍵在設定新值之前儲存的舊值(old value)。

複雜度為 o(1) 。

redis> set getset-str "i'm old value"

# 先給字串鍵設定乙個值

okredis> getset getset-str "i'm new value"

# 更新字串鍵的值,並返回之前儲存的舊值

i'm old value

redis> get getset-str # 確認一下,新值已被設定

i'm new value

用偽**表示 getset 的定義
def

getset

(key, new-value):

old-value = get(key) # 記錄舊值

set(key, new-value) # 設定新值

return old-value # 返回舊值

將值 value 推入到字串鍵 key 已儲存內容的末尾。o(n), 其中 n 為被推入值的長度

redis> set myphone "nokia"  

ok(integer) 10

redis> get myphone

"nokia-1110"

增加或者減少字串鍵儲存的數字值。

對於乙個儲存著數字的字串 鍵 key ,我們可以使用 incrby 命令來增加它的值,或者使用 decrby 命令來減少它的值

命令效果

複雜度incrby key increment

將 key 所儲存的值加上增量 increment ,命 令返回操作執行之後,鍵 key 的當前值。

o(1)

decrby key decrement

將 key 所儲存的值減去減量 decrement ,命 令返回操作執行之後,鍵 key 的當前值。

o(1)

如果執行 incrby 或者 decrby 時,鍵 key 不存在,那麼命令會將鍵 key 的 值初始化為 0 ,然後再執行增加或者減少操作

incrby / decrby 示例

redis> incrby num

100# 鍵 num 不存在,命令先將 num 的值初始化為 0 ,# 然後再執行加 100 操作

(integer) 100

redis> incrby num

25# 將值再加上 25

(integer) 125

redis> decrby num

10# 將值減少 10

(integer) 115

redis> decrby num

50# 將值減少 50

(integer) 65

增一和減一

命令效果

複雜度incr key

等同於執行 incrby key 1

o(1)

decr key

等同於執行 decrby key 1

o(1)

redis> set num

10 ok

redis> incr num

(integer) 11

redis> decr num

(integer) 10

incrbyfloat key increment

為字串鍵 key 儲存的值加上浮點數增量 increment ,命令返回操作執行之後,鍵 key 的值。

沒有相應的 decrbyfloat ,但可以通過給定負值來達到 decrbyfloat 的效果。

複雜度為 o(1) 。

redis> set num

10 redis> incrbyfloat num

3.14

"13.14"

redis> incrbyfloat num -2.04

# 通過傳遞負值來達到做減法的效果

"11.1"

字串(一) 字串Hash

今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...

第一字串 Trie Topology

bessie最近在玩字串。她發現通過改變字母的順序可以使一些字串排在其他所有的字串之前 按字典序從小到大排序 比如說,bessie找到了對於字串 omm moo mom 和 ommnom 她可以用標準的字母表把 mom 排在最前面,也可以用字母表 abcdefghijklonmpqrstuvwxyz...

演算法題(一) 字串

public static string submax string strarr else if max k system.out.println max return arrays.copyofrange strarr,start,end 1 給定兩個字串str1,str2。如果兩者字元種類和相...