String基本操作
添加、修改数据
set key value // 添加单个 key value
mset key1 value1 key2 value2 ... //添加多个 key value
获得数据
get key //获得单个数据
mget key1 key2 //获得多个数据
删除数据
del key
*注意:在Redis中操作成功返回的是(integer)1 , 操作失败返回的是(integer)0
获得数据字符个数(相当于string.length)
strlen key
追加信息到原始信息后面(存在就追加,不存在就新建)
append key value
单指令操作和多指令操作的选择(例mset和set)
如果单指令操作返回时间很久、单指令包含的数据量很大,那么就采用拆分进行单指令操作
如果单指令操作的返回时间很快、单指令包含得数据量小,那么就可以采用多指令操作
String扩展操作
场景1:
当数据库数量增加到一定程度时,我们会采用分库分表的策略,如果我们的主键生成策略是Auto_Increment策略时,并发量到达一定程度时可能就会出现相同主键的情况。
解决方式:
redis是单线程的,Redis的操作是原子性的,让Redis来控制id的生成方式,保证数据的唯一性
对数值进行操作:
增加
incr key // 对指定key的value值+1
incrby key increment // 对指定key的value值+increment(只能为整数)的值
incrbyfloat key increment // 对指定key的value值+increment(可以为小数)的值
减少
decr key // 对指定key的value值-1
decrby key increment // 对指定key的value值-increment(可以为小数)的值
场景2:
微信投票功能,每天只能投一票
解决方式:
使用Redis的数据生命周期
设置数据具有指定的生命周期:
setex key seconds value // 设置key的值为value值且在seconds秒后消失
psetex key millseconds value // 设置key的值为value值且在millseconds毫秒后消失
问题3:
微博点赞功能,实时显示热点数据点赞数
解决方式1:
以 user:id:fans:20来表示 user表示用户,id表示用户id数据,fans表示显示得字段,20表示数据值,不用查数据库,加载速度很快。
约定key一般以 表名:主键名:主键值:字段名 得形式存放
解决方式2:
以Json字符串得形式存储在Redis中,快速返回
String的运行结果分析
- 操作是否成功
(integer) 0 // 表示false
(integer) 1 // 表示true
- 表示影响的行数
(integer) 3 表示影响了三个数据(例如del key1 key2 key3)
- 数据没有查询到
(nil) null 表示没有查询到
- 成功新建
OK