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。