1. 程式人生 > >redis的基本操作--String

redis的基本操作--String

一,SET的相關操作

1,        SETkey value [EX seconds] [PX milliseconds] [NX|XX]

EX seconds:設定key的過時時間,單位為秒。

jedis.setex("name", 60, "123");//存活時間60s

PX milliseconds:設定key的過期時間,單位為毫秒

jedis.psetex("name", 60*1000,"123");//存活時間60s

a,驗證碼

我們經常在登入一些網站或是進行付款等操作的時候,都會收到一些驗證碼,並且說10min後失效。

實際上就可以通過下面一條指令來實現:

set phone_num code ex 600

用手機號作為key,驗證碼作為值,超時6min。這樣當你輸入好驗證碼,提交的時候,後臺就可以了先get phone_num,再比較你的輸入和資料庫裡面存的值,從而完成身份的驗證。

b,session

早前,網站通過cookie來儲存使用者的使用者名稱和密碼,之後出現了很多的安全隱患,因此就提出了session的機制。

使用者登陸成功之後,本地的cookie會保留一個較長的隨機碼,而網站後的後臺則儲存了這個隨機碼和你的使用者id的對應關係。在你第二次登入的時候,cookie會傳輸到後臺,而後臺則根據你的隨機碼,獲取你的使用者資訊,如果符合,則自動登入。這樣,即使網站上有不法分子獲取了你的cookie,也得不到你的任何資訊,因為你的真實的有用的資訊都儲存在網站的後臺。

我們在登入郵箱的時候,通常都會有一個選項,7天內自動登入。這其實就是給後臺存的session設定了一個超時。聰明的你是不是已經會自己實現了呢?

NX:(if Not eXist)只有鍵key不存在的時候才會設定key的值(防止key被覆蓋)

jedis.setnx("name", "456");

XX:只有鍵key存在的時候才會設定key的值

2,        SETRANGE keyoffset value

jedis.setrange("name", 2, "123");

這個命令可以覆蓋掉key對應的string的一部分。offset表示需要覆蓋的字串的起始位置,之後會用value的值,覆蓋掉原始string的對應位置的資料。

這裡有一些比較有意思的操作:如果原始key不存在,則預設為一個長度為0的字串。如果offset超過原始string的長度,那麼會在之前的string後面補充 空格(\x00)以達到offset。

3,MSET key value [key value ...]

jedis.mset("key021","key021value","key022","key022value","key023","key023value");

Setmultiple keys to multiple values

一次性設定多個key-value。如果key的值已存在,則會直接覆蓋。

4,MSETNX key value [key value ...]

jedis.msetnx("key021","key021","key022","key022","key023","key023");

Set multiple keys tomultiple values, only if none of the keys exist

一次性設定多個key-value。如果存在任何一個key已經存在,那麼這個操作都不會執行。所以,當使用MSETNX的時候,要麼全部key都被修改,要麼全部都不被修改。

5,SETEX key seconds value
jedis.setex("name", 60, "yangshuaifei");

Setthe value and expiration of a key
設定key的值和超時。和前面的set keyvalue ex seconds一樣。

6,PSETEX key milliseconds value
edis.psetex("name",60*1000, "yangshuaifei");//存活時間60s

Setthe value and expiration in milliseconds of a key
設定key的值和超時。和前面的set keyvalue px milliseconds一樣。

7,SETNX key value
jedis.setnx("name", "456");

Setthe value of a key, only if the key does not exist

當key不存在的時候,設定key的值。和set key value nx一樣。

二、GET的相關操作

1,GET key
jedis.get("name");

Get the value of a key

根據給定的key,獲取value值。這個操作,我們之前已經使用了很多次。

如果key不存在,會返回nil。如果key對應的值不是string(List,Set等),則會報錯,因為GET只能處理string型別的value。

2,MGET key [key ...]
jedis.mget("key021","key022","key023")

Getthe values of all the given keys

還記得我們之前可以同時設定多個key-value嗎?其實我們也可以一次性獲取多個key的值。如果key不存在,則對應的地方返回nil。

3,GETRANGE key start end
jedis.substr("name",1, 10);

Geta substring of the string stored at a key

該指令只要用於獲取字串的字串,在Redis2.0版本之前,叫做SUBSTR。strat和end是字串的起始和結束的位置,可以用負數來表示距離string尾部的未知的下標。-1是最後一個字元,-2是底數第二個字元。這個表達方式和Python的獲取list的子list非常相似。

4,GETSET key value

jedis.getSet("name", "123");

Setthe string value of a key and return its old value

設定key的值,並返回之前的值。如果之前key的值不是string,則會報錯。

這個指令相當於先GET,再SET。

三、string的修改操作

1,STRLEN key
jedis.strlen("name");

Getthe length of the value stored in a key

返回key對應的string的長度,如果key對應的不是string,則報錯。如果key不存在,則返回0(還是把key對應的看成空字串)。

2,APPEND key value

jedis.append("name", "456");

Append a value to a key

如果key已經存在,且值為string,則將value追加到值的後面,如果key不存在,則會建立一個空的字串的key,然後執行追加操作。

3,INCR key

jedis.incr("add");

Incrementthe integer value of a key by one

對儲存在key的整數值進行原子的加1操作。

如果key不存在,則會設定預設值0,再加1。

如果key存在,但是儲存的值不是字串,或者儲存的字串不能表示整數,則執行該操作時,會報錯

值得注意的是,該操作是原子操作,即使有多個請求傳輸到Redis,count執行的結果都不會錯誤,所以我們可以大膽放心的用這個功能實現多執行緒的計數功能。

4,DECR key

jedis.decr("minus");

Decrementthe integer value of a key by one

對儲存在key的整數值進行原子的減1操作。

注意事項和INCR一樣。

5,INCRBY key increment
jedis.incrBy("add",10);

Incrementthe integer value of a key by the given amount

對儲存在key的整數值進行原子的加操作,加increment。

6,DECRBY key decrement
jedis.decrBy("minus",10);

Decrementthe integer value of a key by the given number

對儲存在key的整數值進行原子的減操作,減increment。

7,INCRBYFLOAT key increment
jedis.incrByFloat("add",0.1);

Incrementthe float value of a key by the given amount

對儲存造key中的浮點數進行原子的加操作,加increment。