Redis原子计数器incr

一:背景

现在分布式已经在互联网中广泛流行了。除了分布式以外,很多系统对高并发也有比较高的要求。因此现在的系统会对一些请求限流。当然,限流可以使用redis原子计数器incr.但是除了限流以外,很多系统会在一些节日的时候搞一些活动,当然,这些活动是有奖品的,并且奖品的数量也是有限的。为了防止在高并发的时候,出现多个人中奖的情况,那么可以使用分布式锁,比如redis的分布式锁,zookeeper的分布式锁。当然,我们也可以采用简单一点的方案,就是使用redis原子计数器incr来统计。

二 redis incr的使用

 redis incr命令将key钟存储的数字值加一。如果key不存在,那么Key的值会先被初始化为0,然后再执行INCR操作。如果值包含错误的类型,或者字符串类型的值不能表示为数字,那么就会返回一个错误。本操作的值限制在64位(bit)的有符号数字表示之内。例如:

127.0.0.1:6379> set num 10

OK

127.0.0.1:6379> incr num

(integer) 11

127.0.0.1:6379> get num    # 数字值在 Redis 中以字符串的形式保存

"11"

注意:redis并没有一个明确的类型来表示整型数据,所以这个操作是一个字符串操作。执行这个操作的时候,key对应存储的字符串被解析为10进制的64位有符号整型数据。事实上,redis内部采用整数形式来存储对应的整数值,所以对于该类字符串值实际上是用整数来保存,也就是不存在存储整数的字符串表示所带来的额外的开销。

三 使用场景

1.比如有一个web应用,想记录每个用户访问这个网站的次数。只需要通过拼接用户id和代表我们想记录每个用户每天访问这个网站的次数。 web应用只需要通过拼接用户id和代表当前时间的字符串作为key,每次用户访问这个页面的时候对这个key执行一下incr命令。
2.限流。限制某个api每秒每个ip的请求次数不超过10次

猜你喜欢

转载自blog.csdn.net/li12412414/article/details/80568934