本文正在参加「技术专题19期 漫谈数据库技术」活动
前言
redis基于内存运行的,速度方面的优势想必大家都知道了。今天来讲讲我在项目中一般会用redis来实现的一些功能。
分组
在新建key时加入‘:’符号,可以在redis desktop manager中自动分组查看。比如保存用户的token,就可以用user_token:uid来作为key,manager中就会自动把user_token:1,user_token:2....以文件夹的形式存储,就像这样。
有效期
项目中常常会有很多有实效性的数据,如果用户登陆的有效期,验证码的有效时间,以及很多第三方sdk的access token的过期时间。redis中的ttl就能很好的利用。在存储这些数据的时候,可以设置ttl的值(以秒为单位)。ttl的值会倒计时减小,ttl减到0时,数据就会从redis消失。
原子性
Redis所有操作都是原子性的。在应对高并发的数据更改时非常好用。比如我最近做了一个物联网的项目,现场安装了30台电源空开,不定时的会发送数据到服务器,服务器这边需要把这些数据累加起来,统计成一个累计量数据。每次接收到一个空开传过来的数据时,利用redis的incr操作的原子性,就不必担心当多个设备同时发送数据造成多数据同时累加覆盖造成累加结果不准确的情况产生。
排名
有些项目会用到排名的功能,比如电商系统中,用户消费后能获取积分,最后生成用户消费排名榜。这时候就要用到redis的zset数据结构了。zset结构的score可以作为分数,value作为用户名,因为value是不重复的。然后使用incrementScore方法,在用户消费时,对score自增加。
其实到这里,使用redis也没有什么神奇的地方。但是,我们在增加分数后,最后的排名是要取出来的。这时候reids的reverseRangeWithScores方法就可以取出数据,zset会自动根据score排序。当然你可以说使用mysql也能做到。。。用redis还是能快点嘛。
存对象实例
redis作为缓存是很好用的。比如用户在后台每操作一次,我们需要判断用户是否具有这个权限。在用户登陆后,把用户的权限表对应的对象实例存在redis中,以用户的token作为key,每次用户操作,需要在请求接口的header中带上token,通过保存在redis中的权限做对比。redis中的权限取出后,可以直接映射成实例对象。
结尾
还有哪些奇技淫巧,谢谢大家在评论区教我。