Redis string与hash统计访问首页的次数实践

统计每个用户访问次数

1.统计每个用户访问首页的次数;
2.网站用户量比较大(10w)

有些博主建议使用hash table 占用资源更少:

使用 Hash 数据类型维护大量计数器
有时候需要维护大量计数器,比如每一个论坛主题的查看数,比如每一个用户访问页面次数,因为论坛主题和用户基数可能很大,直接基于论坛主题或用户 ID 生成计数器的话,占用 Redis 资源还是相当可观的,这时可以用 Hash 数据类型压缩所需资源。

我们分别以这两种情况来看下redis资源消耗情况;

  1. 首先看redis 查看redis 内存情况:

    127.0.0.1:6379> info memory
    # Memory
    used_memory:2452648
    used_memory_human:2.34M
    used_memory_rss:16113664
    used_memory_rss_human:15.37M
    used_memory_peak:22097048
    used_memory_peak_human:21.07M
    total_system_memory:2097569792
    total_system_memory_human:1.95G
    used_memory_lua:41984
    used_memory_lua_human:41.00K
    maxmemory:0
    maxmemory_human:0B
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:6.57
    

2. 插入string的类型的数据10w

~~~ php
 for($i=0;$i<100000;$i++) {
      Redis::set('home:view'.$i,rand(1,100055));
     }
 
  1. 查看redis memory
      127.0.0.1:6379> info memory
      # Memory
      used_memory:11180680
      used_memory_human:10.66M
      used_memory_rss:21225472
      used_memory_rss_human:20.24M
      used_memory_peak:22097048
      used_memory_peak_human:21.07M
      total_system_memory:2097569792
      total_system_memory_human:1.95G
      used_memory_lua:41984
      used_memory_lua_human:41.00K
      maxmemory:0
      maxmemory_human:0B
      maxmemory_policy:noeviction
      mem_fragmentation_ratio:1.90
      mem_allocator:jemalloc-4.0.3
  1. 添加10w hash table
       $data = [];
      for($i=0;$i<100000;$i++) {
           $data[$i] = rand(1,100055);
      }
      Redis::hmSet('home:view') ;
  1. 查看memory
      127.0.0.1:6379> info memory
      # Memory
      used_memory:20913488
      used_memory_human:19.94M
      used_memory_rss:32522240
      used_memory_rss_human:31.02M
      used_memory_peak:22769304
      used_memory_peak_human:21.71M
      total_system_memory:2097569792
      total_system_memory_human:1.95G
      used_memory_lua:41984
      used_memory_lua_human:41.00K
      maxmemory:0
      maxmemory_human:0B
      maxmemory_policy:noeviction
      mem_fragmentation_ratio:1.56
      mem_allocator:jemalloc-4.0.3

通过上述测试发现,hash table 所占用的资源更加多,而且通过string添加统计可以直接用inc()方法,巴适;

所以综上所述的话,在简单的数据统计的话可能还是string更合适点;

hash 及string 缓存

需求

1.需要获取所有分类(品牌)及单个分类信息;

2.添加缓存;

  1. 用string :找到所有的缓存序列变化,存入redis缓存;

    缺点:

    1.更新某个分类需要整个分类缓存;

    2.缓存更新设计不合理或不及时更容易导致双写不一致问题;

    3.获取单个分类需要获取整个缓存信息;

  2. 用hash table:

    1.通过hmset hset();轻松实现缓存的批量及单个更新;

    2.获取单个分类hget(),所有分类hgetall();获取缓存更自由

以上就写了方法名不上具体代码,以上都是引用predis redis拓展包

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值