.net redis数据缓存(二) redis操作List集合带分页

1、编写一个简单的redishelper类库,封装ServiceStack.Redis

  1 public class RedisHelper
  2     {
  3         #region 基本用户名密码,使用配置文件
  4         /// <summary>
  5         /// 写入redis服务器的ip+port
  6         /// </summary>
  7         public static string WriteServerList = ConfigurationManager.AppSettings["WriteServerList"];
  8         /// <summary>
  9         /// 读取服务器的ip +port
 10         /// </summary>
 11         public static string ReadServerList = ConfigurationManager.AppSettings["ReadServerList"];
 12         /// <summary>
 13         /// 服务器的密码
 14         /// </summary>
 15         public static string Password = ConfigurationManager.AppSettings["Password"];
 16
 17         #endregion
 18
 19         #region Resid基础连接设置
 20
 21
 22         /// <summary>
 23         /// redis程序池
 24         /// </summary>
 25         private static PooledRedisClientManager _redisprcm;
 26
 27         /// <summary>
 28         /// 连接
 29         /// </summary>
 30         private static void CreateManager()
 31         {
 32             try
 33             {
 34                 string[] writeServerList = redisSplitString(WriteServerList, ",");
 35                 string[] readServerList = redisSplitString(ReadServerList, ",");
 36
 37
 38                 _redisprcm = new PooledRedisClientManager(readServerList, writeServerList,
 39                                        new RedisClientManagerConfig
 40                                        {
 41                                            MaxWritePoolSize = 60,
 42                                            MaxReadPoolSize = 5,
 43                                            AutoStart = true,
 44                                        });
 45                 //如果服务端有密码则设置
 46                 string pwd = Password;
 47                 if (!string.IsNullOrEmpty(pwd))
 48                 {
 49                     _redisprcm.GetClient().Password = pwd;
 50                 }
 51
 52             }
 53             catch (Exception ex)
 54             {
 55
 56                 _redisprcm = null;
 57             }
 58
 59
 60         }
 61
 62         private static string[] redisSplitString(string strSource, string split)
 63         {
 64             return strSource.Split(split.ToArray());
 65         }
 66
 67
 68         /// <summary>
 69         /// 设置redis操作对象
 70         /// </summary>
 71         /// <returns></returns>
 72         public static IRedisClient GetClient()
 73         {
 74             if (_redisprcm == null)
 75                 CreateManager();
 76
 77
 78             return _redisprcm.GetClient();
 79         }
 80         /// <summary>
 81         /// 默认缓存10分钟
 82         /// </summary>
 83         public static TimeSpan expiresIn = TimeSpan.FromMinutes(10);
 84
 85         #endregion
 86
 87         #region Object T类型
 88
 89
 90         /// <summary>
 91         /// 写入
 92         /// </summary>
 93         /// <typeparam name="T"></typeparam>
 94         /// <param name="key"></param>
 95         /// <param name="value"></param>
 96         /// <param name="redisClient"></param>
 97         /// <param name="expirIn"></param>
 98         /// <returns></returns>
 99         public static bool Set<T>(string key, T value, IRedisClient redisClient, TimeSpan? expirIn = null)
100         {
101             bool flag = false;
102             try
103             {
104                 if (string.IsNullOrEmpty(expirIn.ToString()))
105                 {
106                     expirIn = expiresIn;
107                 }
108                 redisClient.Set<T>(key, value, expirIn);
109                 flag = true;
110             }
111             catch (Exception)
112             {
113                 flag = false;
114
115             }
116             return flag;
117         }
118
119         /// <summary>
120         /// 读取
121         /// </summary>
122         /// <typeparam name="T"></typeparam>
123         /// <param name="key"></param>
124         /// <param name="redisClient"></param>
125         /// <returns></returns>
126         public static T Get<T>(string key, IRedisClient redisClient)
127         {
128             T Y = default(T);
129             try
130             {
131                 Y = redisClient.Get<T>(key);
132             }
133             catch (Exception EX)
134             {
135                 Y = default(T);
136
137             }
138             return Y;
139         }
140
141         #endregion
142
143         #region string 字符串类型操作
144         /// <summary>
145         /// 设置string
146         /// </summary>
147         /// <param name="key"></param>
148         /// <param name="value"></param>
149         /// <param name="expiry"></param>
150         /// <returns></returns>
151         public static bool StringSet(string key, string value, IRedisClient redisClient, TimeSpan? expiry = default(TimeSpan?))
152         {
153             bool flag = true;
154             try
155             {
156                 redisClient.Set(key, value, expiry);
157                 flag = true;
158             }
159             catch (Exception ex)
160             {
161                 flag = false;
162             }
163             return flag;
164         }
165
166         /// <summary>
167         /// 读取string类型
168         /// </summary>
169         /// <param name="key"></param>
170         /// <returns></returns>
171         public static string getValueString(string key, IRedisClient redisClient)
172         {
173             string value = redisClient.GetValue(key);
174             return value;
175         }
176
177         #endregion
178
179         #region 删除缓存
180
181         /// <summary>
182         /// 删除key
183         /// </summary>
184         /// <param name="key"></param>
185         /// <returns></returns>
186         public static bool Remove(string key, IRedisClient redisClient)
187         {
188             return redisClient.Remove(key);
189         }
190         #endregion
191
192         #region 释放内存
193         /// <summary>
194         /// 释放资源
195         /// </summary>
196         public static void Dispose(IRedisClient redisClient)
197         {
198             if (redisClient != null)
199             {
200                 redisClient.Dispose();
201                 redisClient = null;
202             }
203             //强制垃圾回收
204             GC.Collect();
205
206         }
207         #endregion
208     }

2、数据展示与分页

2.1 后台代码

 public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index(int page = 1)
        {
            PageMassage pagMsg = new PageMassage();
            pagMsg.thisPage = page;
            pagMsg.thisRow = 15;
            if (pagMsg.thisPage <= 0)
            {
                pagMsg.thisPage = 1;
            }
            ViewBag.thisPage = pagMsg.thisPage;
            //设置string
            List<UserInfoModel> user;

            using (var cliend = RedisHelper.GetClient())
            {
                //获取数据

                user = new List<UserInfoModel>();
                user = RedisHelper.Get<List<UserInfoModel>>("UserName", cliend);
                if (user == null)
                {
                    user = new List<UserInfoModel>();
                    //测试1000条数据
                    for (int i = 0; i < 1000; i++)
                    {

                        UserInfoModel uu = new UserInfoModel();
                        uu.Id = i + 1;
                        uu.Nmae = "李" + i.ToString() + "号";
                        uu.Age = 45 + i;
                        uu.Sex = new Random().Next(0, 1) == 0 ? "女" : "男";
                        uu.Bir = DateTime.Now;
                        uu.Adddate = DateTime.Now;
                        user.Add(uu);
                    }
                    //添加緩存
                    bool flag = RedisHelper.Set<List<UserInfoModel>>("UserName", user, cliend);

                }
            }

            if (pagMsg.thisSeachKey != null)
            {
                user = user.OrderBy(q => q.Id).Where(q => q.Nmae.Contains(pagMsg.thisSeachKey)).ToList();
            }
            else
            {
                user = user.OrderBy(q => q.Id).ToList();
            }
            ViewBag.User = user.ToPagedList(pagMsg.thisPage, pagMsg.thisRow);
            //ViewBag.User = user;
            return View();
        }

    }

    public class PageMassage
    {
        /// <summary>
        /// 當前頁
        /// </summary>
        public int thisPage { get; set; }
        /// <summary>
        /// 每頁顯示
        /// </summary>
        public int thisRow { get; set; }

        /// <summary>
        /// 搜索内容
        /// </summary>
        public string thisSeachKey { get; set; }

    }

2.2 前台展示

 1 @using PagedList.Mvc;
 2 @{
 3     ViewBag.Title = "Index";
 4     //PagedList.IPagedList<RedisMVC.Model.UserName> userModel =PagedList.PagedList<ViewBag.User>;
 5
 6     PagedList.IPagedList<Redis数据缓存_二_List集合的使用与分页展示.Models.UserInfoModel> userModel =
 7         (PagedList.IPagedList<Redis数据缓存_二_List集合的使用与分页展示.Models.UserInfoModel>)ViewBag.User;
 8 }
 9 <h2>数据展示</h2>
10 <table>
11
12
13
14     @{
15
16         foreach (var item in userModel)
17         {
18             <tr>
19                 <td>
20                      @item.Nmae
21                 </td>
22                 <td>
23                     @item.Age
24                 </td>
25                 <td>
26                     @item.Bir
27                 </td>
28                 <td>
29                     @item.Adddate
30                 </td>
31             </tr>
32         }
33     }
34 </table>
35      <div>
36         <span style="font-size:20px;color:blue;">
37             每页 @userModel.PageSize 条记录,共 @userModel.PageCount 页,当前第 @userModel.PageNumber 页
38          </span>
39          @Html.PagedListPager(userModel, page => Url.Action("Index", new { page }))
40      </div>
41
42  

3.配置文件
 <!--redis写入-->
    <add key="WriteServerList" value="192.168.1.188:6379" />
    <!--redis读取-->
    <add key="ReadServerList" value="192.168.1.188:6379" />
    <!--密码-->
    <add key="Password" value="" />

原文地址:https://www.cnblogs.com/lzzsf/p/11612493.html

时间: 2024-10-25 14:21:40

.net redis数据缓存(二) redis操作List集合带分页的相关文章

Redis数据缓存

Redis 锁定 编辑 本词条由“科普中国”百科科学词条编写与应用工作项目审核. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.从2013年5月开始,Redis的开发由Pivotal赞助. 中文名 Redis 外文名 Redis 分    类 数据库 相    关 NoSql 数据存储 目录 1定义 2作者 3性能 4支持语言 5数据模型

springboot中使用RedisTemplate实现redis数据缓存

SpringBoot 整合 Redis 数据库实现数据缓存的本质是整合 Redis 数据库,通过对需要"缓存"的数据存入 Redis 数据库中,下次使用时先从 Redis 中获取,Redis 中没有再从数据库中获取,这样就实现了 Redis 做数据缓存. ??按照惯例,下面一步一步的实现 Springboot 整合 Redis 来存储数据,读取数据. 项目添加依赖首页第一步还是在项目添加 Redis 的环境, Jedis. <dependency> <groupId&

Redis 详解 (二) redis的配置文件介绍

目录 1.开头说明 2.INCLUDES 3.MODULES 4.NETWORK 5.GENERAL 6.SNAPSHOTTING 7.REPLICATION 8.SECURITY 9.CLIENTS 10.MEMORY MANAGEMENT 11.APPEND ONLY MODE 12.LUA SCRIPTING 13.REDIS CLUSTER 上一篇博客我们介绍了如何安装Redis,在Redis的解压目录下有个很重要的配置文件 redis.conf (/opt/redis-4.0.9目录下

【redis】-- 缓存(redis作为缓存使用)

目录 1.redis的回收策略 redis的LRU回收算法 2.关于redis作为缓存时出现的击穿,穿透,雪崩问题 1.击穿 2.穿透 3.缓存雪崩 redis有两种使用方式一是作为数据库使用,二是作为缓存使用. 将redis作为缓存,当你新增数据时,让它自动地回收旧数据是件很方便的事情.这个行为在开发者社区非常有名,因为它是流行的memcached系统的默认行为.而redis回收数据LRU是redis唯一支持的回收算法. 1.Maxmemory配置指令 maxmemory配置指令用于配置Red

Redis3.0集群crc16算法php客户端实现方法(php取得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

数据分区        Redis集群将数据分区后存储在多个节点上,即不同的分区存储在不同的节点上,每个节点可以存储多个分区.每个分区在Redis中也被称为"hash slot",Redis集群中总共规划了16384个分区. 例如:当集群中有3个节点时,节点A将包含0-5460分区,节点B将包含5461-10922分区,节点C将包含10923-16383分区. 每个key将会存储到一个唯一的分区中,每个分区其实就是一组key的集合,两者对应关系为:key的CRC16校验码%16384=

.net redis数据缓存(一) redis在Windows环境中的安装

1.下载redis 地址:http://https://github.com/MicrosoftArchive/redis/releases Windows下载msi或者zip都是可以的.msi会在path环境变量中配置变量,我一般下载的是zip的,我这里也是用zip的讲解,下载下来后解压会看到如下文件: ??? 接下来,我们用cmd来运行redis服务器.看准我红框中的内容 回车以后,会看到如下画面,说明成功 ??? 接下来我们还有下载一个桌面redis工具,用来管理redis缓存,我这里推荐

SpringBoot:redis分布式缓存

前言 应用系统需要通过Cache来缓存不经常改变得数据来提高系统性能和增加系统吞吐量,避免直接访问数据库等低速存储系统.缓存的数据通常存放在访问速度更快的内存里或者是低延迟存取的存储器,服务器上.应用系统缓存,通常有如下作用: 缓存web系统的输出,如伪静态页面. 缓存系统的不经常改变的业务数据,如用户权限,字典数据.配置信息等 大家都知道springBoot项目都是微服务部署,A服务和B服务分开部署,那么它们如何更新或者获取共有模块的缓存数据,或者给A服务做分布式集群负载,如何确保A服务的所有

redis的作用和redis为什么那么快

1 redis的作用: 用redis做缓存,redis可以用作数据库,缓存和消息中间件. redis如何做持久化:可以每隔一定时间将数据集导出到磁盘(快照),或者追加到命令日志中,会在执行写命令时,将被执行的写命令复制到硬盘里面. redis为什么快:redis将数据存储在内存里面,读写数据的时候都不会受到磁盘i/o速度的限制,所以速度极快. 1 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.类似于hashmap,hashmap的优势就是查找和操作的时间复杂度都是O(1): 2 数据结构

Spring整合Redis做数据缓存(Windows环境)

当我们一个项目的数据量很大的时候,就需要做一些缓存机制来减轻数据库的压力,提升应用程序的性能,对于java项目来说,最常用的缓存组件有Redis.Ehcache和Memcached. Ehcache是用java开发的缓存组件,和java结合良好,直接在jvm虚拟机中运行,不需要额外安装什么东西,效率也很高:但是由于和java结合的太紧密了,导致缓存共享麻烦,分布式集群应用不方便,所以比较适合单个部署的应用. Redis需要额外单独安装,是通过socket访问到缓存服务,效率比Ehcache低,但