前言:我是借鉴别人的“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=-