.net redis ServiceStack Hash 缓存页面点击量实现

本文介绍了一种使用RedisHash缓存技术优化页面点击量查询的方法,通过减少数据库操作,提高查询效率。重点阐述了如何利用RedisHash实现页面点击次数的实时更新与快速获取,并提供了具体代码实现。

  由于目前站点统计某页面点击量(刷新也算入点击量),且每点击进入一次页面或刷新一次也没都会向点击量log表插入一条数据,所以该表日积月累的数据量必然很大,如果想根据该log查询最热门(及点击量最多的页面信息,则查询比较耗时)。也考虑过新建一张点击统计表,统计每个页面的点击次数,点击或刷新一次就在原来的基础上+1,但是又考虑到用redis缓存,也可以实现,且效率应该还不错。开始考虑使用redis 的SortedSet(有序集合)来实现(为了方便取 top 20),发现不可行。于是,redis Hash缓存页面相关信息走起~~~~~

代码如下:

#region 车辆点击量缓存
        //获取所有竞拍的点击量
        public static Dictionary<string, string> GetAllAuctionClicks()
        {
            var result = new Dictionary<string, string>();
            if (!RedisSwitch)
                return result;

            try
            {
                var key = RedisKeyHelper.AllAuctionClicks();
                using (var client = RedisManger.GetReadwriteClient())
                {
                    if (client.ContainsKey(key))
                    {
                        result = client.GetAllEntriesFromHash(RedisKeyHelper.AllAuctionClicks());
                    }
                    return result;
                }
            }
            catch (Exception ex)
            {
                return result;
            }
        }

        //设置所有竞拍的点击量
        public static void SetAllAuctionClicks(Dictionary<string, string> clicksList)
        {
            if (!RedisSwitch)
                return;

            try
            {
                var key = RedisKeyHelper.AllAuctionClicks();
                using (var client = RedisManger.GetReadwriteClient())
                {
                    if (client.ContainsKey(key))
                    {
                        client.Remove(key);
                    }
                    client.SetRangeInHash(key, clicksList);
                }
            }
            catch (Exception ex)
            {
                return;
            }

        }

        //增加该AucId的点击次数
        public static void IncrementAuctionClicks(int aucId)
        {
            if (!RedisSwitch)//开关关闭,则返回
                return;

            try
            {
                var key = RedisKeyHelper.AllAuctionClicks();
                using (var client = RedisManger.GetReadwriteClient())
                {
                    if (client.ContainsKey(key))
                    {
                        if (client.HashContainsEntry(key, aucId.ToString()))
                        //如果 该AucId在hash中,则对该AucId的次数加1,否则,加入一个新的Aucid,1 的key-value
                        {
                            client.IncrementValueInHash(key, aucId.ToString(), 1);
                        }
                        else
                        {
                            client.SetEntryInHash(key, aucId.ToString(), "1");
                        }
                    }
                }
            }
            catch
            {
            }
        }

        //获取某一个aucid的点击次数
        public static int GetAuctionClick(int aucId)
        {
            var result = 0;
            if (!RedisSwitch)//开关关闭,则返回
                return result;

            try
            {
                var key = RedisKeyHelper.AllAuctionClicks();
                using (var client = RedisManger.GetReadwriteClient())
                {
                    if (client.ContainsKey(key))
                    {
                        if (client.HashContainsEntry(key, aucId.ToString()))
                        //如果 该AucId在hash中,则取该AucId的点击次数,否则点击次数为0
                        {
                            int.TryParse(client.GetValueFromHash(key, aucId.ToString()), out result);
                        }
                    }
                }
            }
            catch
            {
                return result;
            }
            return result;
        }
        #endregion
View Code

 

转载于:https://www.cnblogs.com/qqxiongmao/p/4402805.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值