C# redis缓存分页

本文介绍了使用C#实现Redis缓存分页的方法,通过借鉴他人思路,提供代码实现。当用户请求页面时,首先检查Redis缓存,若缓存中无数据,则从数据库获取指定页的数据。前端采用layui的流显示技术。强调思路的重要性,认为代码的灵魂在于思路。
摘要由CSDN通过智能技术生成

前言:我是借鉴别人的“redis缓存分页”的思路进行实现的,下面是代码实现部分(在我的博客中有一篇“转载”就是写的思路实现部分的,大家可以借鉴一下)

  /// <summary>
        /// 得到分页数据
        /// 说明:使用了redis缓存分页
        /// </summary>
        /// <param name="pageNo"></param>
        /// <returns></returns>
        public Page.pa_ForumMain getPageData(int pageNo)
        {
   
            string userNum = "2091928133";

            //string userNum = HttpContext.Current.Session["UNumber"].ToString();

            Page.pa_ForumMain forumMain = new Page.pa_ForumMain();
            forumMain.pageNo = pageNo;//当前页
            forumMain.pageSize = (int)nf_ForumMain.PageNum;//每页显示条数
            forumMain.pageCountByParameter = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(new DAL.DAL_nf_ForumMain().getPageCount(userNum, forumMain.pageSize, forumMain.pageNo) + .0000)));//获得总页数【有一个三元表达式:防止用户没有博文抛异常】
            forumMain.pageCount = new BLL_nf_ForumMain().getDataCount(userNum);

            if (forumMain.pageCountByParameter < 0)//判断用户请求页数是否有数据
                return new Page.pa_ForumMain() {
    pageCountByParameter = 0 };

            using (var client = RedisManager.GetClient())//判断redis中的ZSet集合里面是否存在数据
            {
   
                if (client.GetSortedSetCount(userNum + "userBlogsZSet") == 0)//如果“ZSet集合”里面没有数据,但是数据库里面有
                   new VO.vo_redis_nf_ForumMain().getInitUserBlogsIdByRedisToZSet(userNum, forumMain);
            };//using end

            //如果“ZSet集合”存在数据
            using (var client = RedisManager.GetClient())
            {
   
                //如果redis的ZSet里面存在数据,则查看Hash集合里面时候存在“指定区间”的数据。【存在就返回,不存在就先去数据库里面找。两个判断都要判断过期时间】
                if (client.GetSortedSetCount(userNum + "userBlogsZSet") != 0)//如果“ZSet集合里面存在数据”,就获取指定区间内的
                {
   
                    List<string> strlins = new VO.vo_redis_nf_ForumMain().getRedisBlogsIdByZSet(userNum, forumMain);//将“ZSet集合指定区间内的数据暂时存储到泛型集合里面”
                   
                    if (strlins.Count > 0)//如果“ZSet集合”的数据存在,“Hash集合里面又没有数据”,就不进行“Hash过期时间的判断”
                    {
   
                        foreach (string item in strlins)
                        {
                            
                            if (client.GetHashCount(item) == 0)//如果“ZSet集合”的数据存在,并且指定“Hash集合里面不存在数据”,就增加指定区间内的数据
                            {
   
                                if (new VO.vo_redis_nf_ForumMain().getInitUserBlogsIdByRedisToHash(userNum, strlins) == true)
                                    return new Page.pa_ForumMain() {
   pageNo= forumMain.pageNo, pageSize= forumMain.pageSize, pageCount=forumMain.pageCount, pageCountByParameter = forumMain.pageCountByParameter, forumMains= new VO.vo_redis_nf_ForumMain().getgetInitUserBlogsIdByRedisToHashValues(userNum,strlins) };
                            }
                            if (client.GetHashCount(item) != 0)//如果“ZSet集合存在数据”,指定“Hash集合”里面也存在数据,就进行“Hash过期时间”的判断
                            {
   
                                DateTime time = Convert.ToDateTime(client.GetItemFromList(userNum + "userBlogsDatasTimeByRedisHash", 0));
                                if (time == DateTime.Now.AddDays(30))//如果现在时间和过期时间一样,就删除“Hash集合”过期时间
                                {
   
                                    client.Remove(item);//删除指定的“Hash集合”群【这里的】
                                }//if end
                                if (time != DateTime.Now.AddDays(30))//如果现在时间和过期时间不一样(Hash集合里面存在数据),将Hash集合指定区间内的数据取出来
                                {
   
                                    if (new VO.vo_redis_nf_ForumMain().getInitUserBlogsIdByRedisToHash(userNum, strlins) == true)
                                        return new Page.pa_ForumMain() {
    pageNo = forumMain.pageNo, pageSize = forumMain.pageSize, pageCount = forumMain.pageCount, pageCountByParameter = forumMain.pageCountByParameter, forumMains = new VO.vo_redis_nf_ForumMain().getgetInitUserBlogsIdByRedisToHashValues(userNum, strlins) };
                                }
                            }//if end
                        }//foreach end
                    }//if end
                }//if end              
            };//using end      

            //如果出错,就直接返回“-1”
            return new Page.pa_ForumMain() {
    pageNo=-
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值