目录
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}
方案比较
方案一对一个数据改动不会影响其它的数据,而方案二由于都写到一条中,改的时候其它数据不能写入,执行速度要慢一些
但对于这种实时性没有那么强的数据,两种方案都可以,定期刷新返回客户端在界面上显示,其实也能实现,不一定非要实时