Redis 数据结构 字符串(二)

    字符串类型是Redis最基础的数据结构,键,值均为字符串类型,并且其他数据结构都是在字符串的基础上构建的。

    注:字符串值最大不能超过512MB;

一、命令

    1、常用命令

        1)设置值

            set key value [ ex seconds]  [px millseconds] [nx | xx]

        ex seconds 为键设置秒级过期时间

        px milliseconds 为键设置毫秒级过期时间

       nx   键必须不存在才能设置成功,用于新增

       xx   键必须存在才能设置成功,用于更新,与nx相反

 

//设置1000秒

127.0.0.1:6379> set test test EX 1000 

OK

127.0.0.1:6379> ttl test

(integer) 999

//更新为500秒

set test test EX 500 XX

OK

127.0.0.1:6379> ttl test

(integer) 498

//由于nx用于新增,所以更新会失败

 

127.0.0.1:6379> set test test EX 500 NX

(nil)

127.0.0.1:6379>

 

        2)判断键是否存在

            exists  key   返回0表示不存在,1表示存在

        3)除了set,redis还提供了setex 和setnx两个命令

           setnx和nx 选项一样,setex和ex选项一样

            setnx   key  value   如果键存在,则返回0,表示存储失败

          setex  key  seconds  value    设置key的值过期时间seconds秒

   使用场景:

            setnx可以作为分布式锁的一种实现方案,官网给出的setnx分布式锁方法:https://redis.io/topics/distlock

         4) 获取值

                get key      如果获取的键不存在,返回nil(空)

          5)批量设置值

                mset key1 value1  key2 value2 ...

            6)批量获取值

                mget key1  key2  key3   如果某些键不存在,则对应位置返回nil

                

127.0.0.1:6379> mset a 1 b 2 c 3

OK

127.0.0.1:6379> mget a d b c f

1) "1"

2) (nil)

3) "2"

4) "3"

5) (nil)

   

tip:如果没有mget批量操作,那么n次get的是时间= n次网络时间+n次命令时间

                    使用mget的时间     n次get的时间   = 1次网络时间  +  n次命令时间

              7)计数(场景:统计浏览次数等)

            incr key  该命令用于对值做自增操作,返回结果分为三种情况

                   i 值不是整数,返回错误

                   ii  值是整数,返回自增后的结果

                   iii  键不存在,创建键,并且将值默认为0自增,返回结果为1 

 

//值不为整数,返回错误

127.0.0.1:6379> incr ff

(error) ERR value is not an integer or out of range

127.0.0.1:6379> 

 

redis还提供了 decr(自减)   incrby(自增指定数字)  decrby(自减指定数字)    incrbyfloat(自增浮点数)

 

127.0.0.1:6379> set number  5

OK

127.0.0.1:6379> decr number

(integer) 4

127.0.0.1:6379> incrby number 3

(integer) 7

127.0.0.1:6379> incrbyfloat number 1.5

"8.5"

 

        2、不常用命令

 

               1)追加值     

                         append key value       可以向字符串尾部追加值

 

127.0.0.1:6379> get number

"8.5"

 

127.0.0.1:6379> append number w

(integer) 4

127.0.0.1:6379> get number

"8.5w"

127.0.0.1:6379> 

 

 

                2)字符串长度

 

 

                        strlen  key   返回字符串的长度 ,integer类型,如果是中文,一个中文占3字节

 

127.0.0.1:6379> set china 中国

OK

127.0.0.1:6379> strlen china

(integer) 6

 

127.0.0.1:6379> set ceshi 12

OK

127.0.0.1:6379> strlen ceshi

(integer) 2

127.0.0.1:6379>

 

               3)设置并返回原来的值

                        getset key value

 

127.0.0.1:6379> getset test ceshi

(nil)

127.0.0.1:6379> getset test hehe

"ceshi"

127.0.0.1:6379> 

 

                4)设置指定位置的字符

                    setrange  key  offeset  value      offeset:表示指定位置

 

127.0.0.1:6379> set tes pest

OK

127.0.0.1:6379> setrange tes 0 b

(integer) 4

127.0.0.1:6379> get tes

"best"

127.0.0.1:6379> 

 

                5)获取部分字符串

 

                        getrange  key  start  end         [start,end]包左也包右

 

127.0.0.1:6379> get tes

"be1t"

127.0.0.1:6379> getrange tes 1 2

"e1"

127.0.0.1:6379> 

 

                6)返回当前键的数据结构

 

 

127.0.0.1:6379> type tes

string

 

                7)每种数据结构都有至少两种以上的编码,redis会根据当前的值以及长度决定使用哪种内部编码

 

                       object  encoding   key     查询内部编码

127.0.0.1:6379> object encoding tes

"raw"

 

               3、共享session 

 

                        分布式的web服务将用户的信息如果保存在各服务器中,出于负载均衡的考虑,分布式服务会将用户的访问分发到不同的服务器上,用户可能刷新一次就需要重新登录,为了解决这个问题,可以将用户的session进行统一管理,存储到redis,每次用户刷新或者查询登录信息直接从redis获取即可。

                4、限速

                    为了安全考虑入,如每次登录时让用户输入手机验证码,但是不能频繁调用短信网关,会限制用户每分钟获取验证码评率;如下伪代码

                    phoneNum="151xxxxxxxx";

                    key =  "shortMsg:limit:" + phoneNum;

                    isExists  = redis.set(key,1,"EX 60","NX");

                        if(isExists != null || redis.incr(key) <= 5){   // !=null说名设置成功,为第一次获取;

                                //通过

                        }  else{

                                //限速

                                }

            

                    

 

         

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三丶竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值