5.

Redis订阅和发布模式和Redis事务

-------------------Redis事务-------------------
1、概念:
    redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
 
2、事务的两种属性
    1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序的执行。事务在执行的过程中,不会被其他客户端发送过来的命令请求所打断。
    2、redis事务是原子。原子意味着要么所有的命令都执行,要么都不执行。

4.

String可以包含任何数据,比如jpg图片或者序列化的对象;string类型是Redis最基本的数据类型,一个键最大能存储512MB

Hashes 是一个string类型的field和value的映射表,hash特别适合用于存储对象

List列表类型可以存储一个有序的字符串列表,常用的操作时向列表两端添加元素,或者获得列表的某一个片段;列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(I),获取越接近两端的元素,速度就越快。

列表具有有序性,集合具有唯一性。

集合Set:多个集合类型键之间还可以进行并集、交集、差集运算。

有序集合Sort-Set...

3.

Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博、Github、StackOverflow 等大型应用中都用其作为 高速缓存。

Redis本身没有提供Windows版本的,并且在Windows上也不太稳定,一般都将其部署到Linux环境下,Redis可以在其官网上下载

Beetle.Redis虽然不够完整,但是我说几个优点:
1、底层非常稳定,几乎没有性能损耗。
2、连接数非常稳定,我用了整整一个月(经过了双十一的考验),一点问题都没有。
3、代码量很小,只有十几个类,完全开源。

2.

RedisHelper帮助类

  1. public class RedisManager
  2.  {
  3.   private static PooledRedisClientManager prcm;
  4.   /// <summary>
  5.   /// 创建链接池管理对象
  6.   /// </summary>
  7.   private static void CreateManager()
  8.   {
  9.    string[] writeServerList = SplitString(RedisConfigInfo.WriteServerList, ",");
  10.    string[] readServerList = SplitString(RedisConfigInfo.ReadServerList, ",");
  11.    prcm = new PooledRedisClientManager(readServerList, writeServerList,
  12.         new RedisClientManagerConfig
  13.         {
  14.          MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
  15.          MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
  16.          AutoStart = RedisConfigInfo.AutoStart,
  17.         });
  18.   }
  19.   private static string[] SplitString(string strSource, string split)
  20.   {
  21.    return strSource.Split(split.ToArray());
  22.   }
  23.   /// <summary>
  24.   /// 客户端缓存操作对象
  25.   /// </summary>
  26.   public static IRedisClient GetClient()
  27.   {
  28.    if (prcm == null)
  29.     CreateManager();
  30.    return prcm.GetClient();
  31.   }
  32.   /// <summary>
  33.   /// 缓存默认24小时过期
  34.   /// </summary>
  35.   public static TimeSpan expiresIn = TimeSpan.FromHours();
  36.   /// <summary>
  37.   /// 设置一个键值对,默认24小时过期
  38.   /// </summary>
  39.   /// <typeparam name="T"></typeparam>
  40.   /// <param name="key"></param>
  41.   /// <param name="value"></param>
  42.   /// <param name="redisClient"></param>
  43.   /// <returns></returns>
  44.   public static bool Set<T>(string key, T value, IRedisClient redisClient)
  45.   {
  46.    return redisClient.Set<T>(key, value, expiresIn);
  47.   }
  48.   /// <summary>
  49.   /// 将某类数据插入到list中
  50.   /// </summary>
  51.   /// <typeparam name="T"></typeparam>
  52.   /// <param name="key">一般是BiaoDiGuid</param>
  53.   /// <param name="item"></param>
  54.   /// <param name="redisClient"></param>
  55.   public static void Add2List<T>(string key, T item, IRedisClient redisClient)
  56.   {
  57.    var redis = redisClient.As<T>();
  58.    var list = redis.Lists[GetListKey(key)];
  59.    list.Add(item);
  60.   }
  61.   /// <summary>
  62.   /// 获取一个list
  63.   /// </summary>
  64.   /// <typeparam name="T"></typeparam>
  65.   /// <param name="key"></param>
  66.   /// <param name="redisClient"></param>
  67.   /// <returns></returns>
  68.   public static IRedisList<T> GetList<T>(string key, IRedisClient redisClient)
  69.   {
  70.    var redis = redisClient.As<T>();
  71.    return redis.Lists[GetListKey(key)];
  72.   }
  73.   public static string GetListKey(string key, string prefix = null)
  74.   {
  75.    if (string.IsNullOrEmpty(prefix))
  76.    {
  77.     return "urn:" + key;
  78.    }
  79.    else
  80.    {
  81.     return "urn:" + prefix + ":" + key;
  82.    }
  83.   }
  84.  }

配置设置

  1. .3将参数写入配置文件
  2.  
  3. <appSettings>
  4. <add key="WriteServerList" value="127.0.0.1:6379" />
  5. <add key="ReadServerList" value="127.0.0.1:6379" />
  6. <add key="MaxWritePoolSize" value="" />
  7. <add key="MaxReadPoolSize" value="" />
  8. <add key="AutoStart" value="true" />
  9. <add key="LocalCacheTime" value="" />
  10. <add key="RecordeLog" value="false" />
  11. </appSettings>
  12. .4读取配置文件参数类
  13.  
  14. public class RedisConfigInfo
  15. {
  16. public static string WriteServerList = ConfigurationManager.AppSettings["WriteServerList"];
  17. public static string ReadServerList = ConfigurationManager.AppSettings["ReadServerList"];
  18. public static int MaxWritePoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxWritePoolSize"]);
  19. public static int MaxReadPoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxReadPoolSize"]);
  20. public static int LocalCacheTime = Convert.ToInt32(ConfigurationManager.AppSettings["LocalCacheTime"]);
  21. public static bool AutoStart = ConfigurationManager.AppSettings["AutoStart"].Equals("true") ? true : false;
  22. }

使用:

  1. protected void btn1_Click(object sender, EventArgs e)
  2. {
  3. string UserName;
  4. //读取数据,如果缓存存在直接从缓存中读取,否则从数据库读取然后写入redis
  5. using (var redisClient = RedisManager.GetClient())
  6. {
  7. UserName = redisClient.Get<string>("UserInfo_123");
  8. if (string.IsNullOrEmpty(UserName)) //初始化缓存
  9. {
  10. //TODO 从数据库中获取数据,并写入缓存
  11. UserName = "张三";
  12. redisClient.Set<string>("UserInfo_123", UserName, DateTime.Now.AddSeconds());
  13. lbtest.Text = "数据库数据:" + "张三";
  14. return;
  15. }
  16. lbtest.Text = "Redis缓存数据:" + UserName;
  17. }
  18. }

Redis安装与启动

1. 下载Redis

Redis本身没有提供Windows版本的,并且在Windows上也不太稳定,一般都将其部署到Linux环境下,Redis可以在其官网上下载, MSOpenTech中提供了Windows版本,这里为了学习安装这一版本。

点击跳转到Github后,直接点击Zip下载。下载后根据自己计算机的版本选择32位或者64位进行安装。我将64位的解压后放到D:\Redis文件夹下,同时将文件夹内的redis.conf也拷贝到该目录下,这个是redis的配置信息:

2. 启动Redis

在Windows下面启用Redis和启动MogoDB一样,需要使用命令行启动,首先定位到该目录,运行如下命令:

  1. D:\Redis>redis-server.exe redis.conf

因为是在本机运行的,这里要注意端口号,同时要保持端口不要关闭。

当然您也可以将Redis作为Windows服务在后台一直开启。

3. 使用

现在再开一个控制台应用程序连接之前启动的Redis,如下:

  1. D:\Redis>redis-cli.exe -h 172.16.147.121 -p 6379

其中 –h后面是本机的ip地址,后面的是端口。

然后就可以执行set 给key为city赋值:

  1. redis 172.16.147.121:6379> set city Shanghai

通过get可以获取指定key为city的值了。

  1. redis 172.16.147.121:6379> get city

同时,在我们往redis上写数据的时候,Redis服务也会定时的往文件中写数据

这里仅简单的介绍了get和set命令,更多命令可以查看 http://redis.io/commands

.初探Redis

下载ServiceStack.Redis

和MongoDB一样,在.NET中使用Redis其实也是使用第三方驱动,官网推荐的是使用ServiceStack.Redis 下载后解压得到如下dll

.NET项目中使用Redis

新建一个Console程序,引用上一步骤解压的四个dll。

做一个简单的例子,在.NET中获取之前我们设置的city的值。

  1. class Program
  2. {
  3. static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);//redis服务IP和端口
  4. static void Main(string[] args)
  5. {
  6. Console.WriteLine(redisClient.Get<string>("city"));
  7. Console.ReadKey();
  8. }
  9. }

首先通过 static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);

建立连接 ,然后就可以直接用redisClient里面的Get方法获取 key为city的值了。

在前面的命令行中,我们网city中存入了Shanghai,现在我们获取到了这个值。

ServerStack中有很多方法可以在.NET中调用,其类结构图如下:

总结

本文简单介绍了Redis,Redis如何在Windows下安装,以及如何在.NET中使用访问和使用Redis,希望对您有所帮助,下文将讲解如何在.NET中网Redis中读写复杂对象。

【每日更新】【Redis学习】的更多相关文章

  1. Android学习资料PDF免费大放送,每日更新!有需要的亲看这里

    说明:以前有资料分享的时候,都叫大家留下自己的QQ邮箱,这样被很多的程序猿们认为我是专门来钓你们的QQ邮箱的.为此给大家带来的顾虑,深表抱歉.从现在开始,以后的分享资料我都会放在自己的百度网盘中,提供 ...

  2. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  3. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  4. Redis学习笔记1-Redis的介绍和认识

    说明:文章内容来自百度百科和redis官方对redis的介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API ...

  5. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  6. 转载:第二弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿!每日更新!

    今天一波三折,承受了超出预料的压力和煎熬,最后还是决定继续放出我的更新教程.我想我一没有泄露公司的代码,二没有提供泄露开发工具下载,只是从程序猿角度写了篇开发日志.我已经做好了最坏的准备,就算放弃这份 ...

  7. 【原】Redis学习资料推荐

    Redis学习资料推荐 网址: Redis官网http://redis.io/ Redis命令 http://redis.io/commands Redis教程 https://www.tutoria ...

  8. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

  9. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  10. Redis学习笔记(2)——Redis的下载安装部署

    一.下载Redis Redis的官网下载页上有各种各样的版本,如图 但是官网下载的Redis项目不正式支持Windows.如果需要再windows系统上部署,要去GitHub上下载.我下载的是Redi ...

随机推荐

  1. Java中的static修饰int值做全局变量与static修饰词初始化顺序

    先看一道题 public class HasStatic{ private static int x=100; public static void main(String args[]){ HasS ...

  2. suList() 和 asList()

    String[] arr = { "a", "b", "c" }; List<String> aslist = Arrays.a ...

  3. php查询mysql数据库

    1.连接数据库,写成一个php,其他文件直接include <?php $connect = mysql_connect("ip地址","用户",&quo ...

  4. CSS画三角形图标

    /* 等腰三角形(箭头朝上): */ #div1{ width: 0; height: 0; border-bottom: 100px solid cyan; border-left: 50px so ...

  5. C语言博客作业4--数组

    C语言博客作业4--数组 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...

  6. php中上传图片,原生代码

    一.实现图片上传方法一 html的写法: <form action="handle.php" name="form" method="post& ...

  7. Oracle树形查询

    sql树形递归查询是数据库查询的一种特殊情形,也是组织结构.行政区划查询的一种最常用的的情形之一.下面对该种查询进行一些总结: start with子句: 递归的条件,需要注意的是如果with后面的值 ...

  8. JAVA的第二次作业

    1.编写“人”类及其测试类.1.1 “人”类: 类名:Person 属性:姓名.性别.年龄.身份证号码 方法:在控制台输出各个信息1.2 测试类 类名:TestPerson 方法:main ...

  9. 利用selenium爬取京东商品信息存放到mongodb

    利用selenium爬取京东商城的商品信息思路: 1.首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构 2.根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归.等待 ...

  10. Confluence安装部署

    前言:Confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享.现在大多数公司都会部署一套Confluence,用作内部WiKi. ...