Redis实战学习之【string】

目录

string的基本操作

小试牛刀

mset 与 set的选用

扩展操作1

 小试牛刀

实际场景

扩展操作2

小试牛刀

实际场景

string操作总结

数据操作不成功与正常反馈之间的差异

实战思考

两种解决方案

方案一:逐个设置

方案二:使用json格式一起设置

方案比较


string的基本操作

//设置key-value
set key value

//获取key对应value
get key

//删除key对应value
del key

//同时设置多个key-value
mset key1 val1 key2 val2

//同时获得多个key-value
mget key1 key2

//获取key的value长度
strlen key

//在key后面追加value,如果key不存在,创建key,写入对应value
append key value

小试牛刀

mset 与 set的选用

从客户端到服务器的时间分为三块:客户端传输到服务器的时间+服务器回复客户端的时间+服务器处理数据的时间

假设传输单条set指令和传输单条mset指令,从客户端到服务器的往返时间相同(实际传输的指令长度也不同,时间也会有所不同,这里简化考虑)

从客户端到服务器传输3个set单条指令,在传输的往返过程中需要3*(set+result)

从客户端到服务器传输1个mset多条指令,在传输的往返过程中需要1*(set+result)

总结:考虑每次客户端向服务器发送的指令处理时间,如果一条指令过长,服务器处理时间很长,导致其它指令无法执行,就需要将指令拆分

          而对于操作时间较短的指令,尽可能合并成一条指令进行操作,能稍微减少在网络中往返消耗的总时间


扩展操作1

 

//给key对应value+1
incr key         
                        
//给key对应value值增加increment大小(increment可以为负值,可以通过incr实现减法效果)
incrby key increment         

//在原有基础上增加浮点数
incrbyfloat key increment 

//给key对应value-1
decr key          
                      
//给key对应value值减少increment大小
decrby key increment        

 小试牛刀

观察到,当使用incrbyfloat age 1.5后,值已经不再为integer,不能对其调用decr age,decrbyfloat命令是不存在的

通过使用incrbyfloat加负浮点数的操作实现减法

实际场景

可以用于分表控制数据库表主键自增id,为数据库表提供主键生成策略,保障表的主键唯一性,适用于所有关系型数据库,且支持集群


扩展操作2

//给key设置过期时间(秒级)
setex key seconds value

//给key设置过期时间(毫秒级)
psetex key milliseconds value

小试牛刀

注意,如果已经对一个key值设置了过期时间,但key值在过期时间到期前已经更新了,则设置的过期时间失效,此数据永久不过期

实际场景

设置指定数据的生命周期,到时间自动过期,通常用于具有时效性的操作

如:明星打榜投票,每个用户在4小时内,只能投1票

       可以记录用户的id,每次投票前,查询用户id是否存在

       如果存在,不可以投票;如果不存在,则可以投票,并设置用户id过期时间4小时


string操作总结

单条最大存储量512MB

string存储单条纯数字最大范围long的最大值 9223372036854775807

数据未获取到,返回nil

数据操作不成功与正常反馈之间的差异

(integer) 0 -> false 失败       (integer)3->3 代表3

(integer) 1 -> true 成功        (integer)1->1 代表1

通过具体执行的命令做区分


实战思考

两种解决方案

方案一:逐个设置

set user:id:00789:fans 12210947

set user:id:00789:blogs 6164

set user:id:00789:focus 83

方案二:使用json格式一起设置

set user:id:00789 → {id:00789,fans:12210947,blogs:6164,focus:83}

方案比较

方案一对一个数据改动不会影响其它的数据,而方案二由于都写到一条中,改的时候其它数据不能写入,执行速度要慢一些

但对于这种实时性没有那么强的数据,两种方案都可以,定期刷新返回客户端在界面上显示,其实也能实现,不一定非要实时

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值