redis的基本操作--String

4 篇文章 0 订阅

一,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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值