一,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对应的看成空字符串)。
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。