概念了解
Redis的String相当于java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,从而提升效率。
(当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M。)
Redis 所有的数据结构都是以唯一的 key 字符串作为名称。
常用命令
单key
set key value//插入,实际用的不多,缓存基本要与过期事件挂钩
setnx key value//若不存在则插入,若key已存在,则返回0,插入不成功。
exists key //是都存在,存在返回1
del key//删除key
get key//获取key
批量
mget key1 key2 key3//返回一个列表
mset key1 boy key2 girl key3 taijian
过期处理
这个具体后续单独
一开始,设置插入某个key 和 设置过期(expire key 5 单位s)时间是分开的,这样就不具备原子性,当插入了key之后,设置失效时间失败(原因很多),可能会影响后续流程。
所以大牛们,新加了一个命令:setex key value seconds ,一次性原子搞定,要么成功,要么失败。
额外的惊喜
有时候我们在项目中需要记录一个计数值count,若按照上面的命令,需要先get key 再value++ 然后set key。这种会发生会发生多线程问题等。
大牛们干脆设置一个新命令,incr(+1) incrby number
这个就很厉害了,有很多的封装运用,Spring 的 RedisAtomicLong,统计count,还是线程安全的。