Redis常见数据结构及其在项目中用法
Redis 可以使用 String 数据类型和 INCR 命令来统计访问量。
以下是在 Redis 控制台中统计访问量的示例:
-
设置计数器:
SET page_views 0
这将创建一个名为
page_views
的键,并将其初始值设置为 0。如果该键已经存在,则会覆盖其值。 -
增加访问量:
INCR page_views
每次有页面访问时,都执行
INCR
命令。这将原子性地将page_views
键的值增加 1。 -
获取当前访问量:
GET page_views
这将返回
page_views
键的当前值,即当前的访问量。
示例:
假设一个网站的首页被访问了几次,以下是在 Redis 控制台中的操作:
127.0.0.1:6379> SET page_views 0 # 初始化计数器
OK
127.0.0.1:6379> INCR page_views # 第一次访问
(integer) 1
127.0.0.1:6379> INCR page_views # 第二次访问
(integer) 2
127.0.0.1:6379> INCR page_views # 第三次访问
(integer) 3
127.0.0.1:6379> GET page_views # 获取当前访问量
"3"
在这个例子中,page_views
键的值从 0 开始,每次访问后递增,最后通过 GET
命令获取到当前的访问量为 3。
除了String,Redis 还有其他数据结构可以用于更复杂的计数场景,例如:
- Hash: 可以用来存储每个用户的访问次数。
- Sorted Set: 可以用来存储访问量排行榜。
- HyperLogLog: 可以用来估算独立访客数(UV)。
但对于简单的总访问量统计,String 和 INCR 命令是最简单高效的方法。
Hash: 可以用来存储每个用户的访问次数。
使用 Redis Hash 来存储每个用户的访问次数,关键在于如何设计 Hash 的 key 和 field。以下是一个常用的设计方案和示例:
设计方案:
- Hash Key: 使用一个统一的前缀,加上一个能区分不同计数场景的标识。例如,如果我们要统计网站每个页面的用户访问次数,可以使用
page_views:{page_id}
作为 key,其中{page_id}
是页面的 ID。 - Field: 使用用户 ID 作为 field。
- Value: 用户的访问次数。
示例:
假设我们要统计页面 ID 为 1
和 2
的页面的用户访问次数。
Redis 控制台操作:
-
用户访问页面 1:
-
用户 ID 为
user1
访问了页面 1:HINCRBY page_views:1 user1 1
如果
page_views:1
这个 Hash 不存在,会自动创建。user1
这个 field 不存在也会自动创建,并将其值初始化为 1。如果user1
已经存在,则将其值加 1。 -
用户 ID 为
user2
访问了页面 1:HINCRBY page_views:1 user2 1
-
用户ID为
user1
再次访问了页面1:HINCRBY page_views:1 user1 1
-
-
用户访问页面 2:
-
用户 ID 为
user1
访问了页面 2:HINCRBY page_views:2 user1 1
-
-
获取访问次数:
-
获取
user1
访问页面 1 的次数:HGET page_views:1 user1
返回结果应为 “2”
-
获取
user2
访问页面 1 的次数:HGET page_views:1 user2
返回结果应为 “1”
-
获取所有用户访问页面 1 的次数:
HGETALL page_views:1
返回结果类似于:
1) "user1" 2) "2" 3) "user2" 4) "1"
-
获取访问页面1的总次数
HVALS page_views:1
返回页面1的所有value的列表,例如:
1) "2" 2) "1"
然后对返回的列表求和,即可得到总的访问次数。
-
获取访问页面 2 的用户数:
HLEN page_views:2
返回结果应为 “1”
-
总结:
page_views:{page_id}
作为 Hash 的 key,保证了不同页面的访问计数相互独立;用户 ID 作为 field,可以方便地查询特定用户的访问数据。