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
    评论
redis-plus-plus是一个面向对象的Redis C++客户端库,它提供了一组易于使用的API,使得与Redis进行通信变得更加容易。下面是redis-plus-plus的一些基本使用方法: 1. 连接Redis服务器 ```c++ #include <sw/redis++/redis++.h> // 创建Redis对象 sw::redis::Redis redis("tcp://127.0.0.1:6379"); ``` 在上面的代码中,我们创建了一个Redis对象,并指定了Redis服务器的地址和端口。如果需要密码验证,可以在地址后面添加?auth=password,其中password是你的Redis密码。 2. 设置和获取key-value ```c++ // 设置key-value redis.set("key", "value"); // 获取key-value std::string value = redis.get("key"); ``` 在上面的代码中,我们使用set()方法来设置一个key-value,get()方法来获取这个key对应的value。 3. 设置过期时间 ```c++ // 设置key-value,并设置过期时间为10秒 redis.set("key", "value", std::chrono::seconds(10)); ``` 在上面的代码中,我们使用set()方法设置了一个key-value,并设置了过期时间为10秒。 4. 删除key ```c++ // 删除key redis.del("key"); ``` 在上面的代码中,我们使用del()方法删除了一个key。 5. 判断key是否存在 ```c++ // 判断key是否存在 bool exists = redis.exists("key"); ``` 在上面的代码中,我们使用exists()方法判断了一个key是否存在。 6. 批量操作 ```c++ // 批量设置key-value redis.mset({{"key1", "value1"}, {"key2", "value2"}}); // 批量获取key-value std::vector<std::string> values; redis.mget({"key1", "key2"}, std::back_inserter(values)); ``` 在上面的代码中,我们使用mset()方法批量设置了多个key-value,使用mget()方法批量获取了多个key对应的value。 除了上述基本的使用方法,redis-plus-plus还提供了很多其他的API,比如hash操作、list操作、set操作等等。你可以参考redis-plus-plus的文档来了解更多的使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值