• Redis初使用


    redis是一个key-value存储系统。和Memcached类似,Redis不仅仅支持简单的k/v类型的数据,同时还提供list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等存储方式。它支持存储的value类型相对更多。这些数据类型都 支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文 件,并且在此基础上实现了master-slave(主从)同步。(来自百度百科)

    目前大型企业用到Redis做缓存的主要有新浪微博、Github、StackOverflow等;

    下载安装redis-3.2.100-setup-64-bit.exe(根据需要更新版本,我的是64位操作系统),打开CMD编辑命令,找到安装包的根目录运行命令:

     redis-server --service-install redis.windows-service.conf --loglevel verbose 

    NuGet管理包安装:

    RedisHelper操作类

      1 /// <summary>
      2     /// Redis 操作类
      3     /// </summary>
      4     public class RedisHelper {
      5         /// <summary>
      6         /// 连接字符串
      7         /// </summary>
      8         private static readonly string ConnectionString = "172.21.24.104:6379";
      9 
     10         /// <summary>
     11         /// 12         /// </summary>
     13         private readonly object _lock = new object();
     14 
     15         /// <summary>
     16         /// 连接对象
     17         /// </summary>
     18         private volatile IConnectionMultiplexer _connection;
     19 
     20         /// <summary>
     21         /// 数据库
     22         /// </summary>
     23         private IDatabase _db;
     24 
     25         public RedisHelper() {
     26             this._connection = ConnectionMultiplexer.Connect(ConnectionString);
     27             this._db = this.GetDatabase();
     28         }
     29 
     30         /// <summary>
     31         /// 获取连接
     32         /// </summary>
     33         /// <returns></returns>
     34         protected IConnectionMultiplexer GetConnection() {
     35             if (this._connection != null && this._connection.IsConnected) {
     36                 return this._connection;
     37             }
     38 
     39             lock(this._lock) {
     40                 if (this._connection != null && this._connection.IsConnected) {
     41                     return this._connection;
     42                 }
     43 
     44                 if (this._connection != null) {
     45                     this._connection.Dispose();
     46                 }
     47 
     48                 this._connection = ConnectionMultiplexer.Connect(ConnectionString);
     49             }
     50 
     51             return this._connection;
     52         }
     53 
     54         /// <summary>
     55         /// 获取数据库
     56         /// </summary>
     57         /// <param name="db"></param>
     58         /// <returns></returns>
     59         public IDatabase GetDatabase(int? db = null) {
     60             return this.GetConnection().GetDatabase(db ?? -1);
     61         }
     62 
     63         /// <summary>
     64         /// 设置
     65         /// </summary>
     66         /// <param name="key"></param>
     67         /// <param name="data"></param>
     68         /// <param name="cacheTime">时间</param>
     69         public virtual void Set(string key, object data, int? cacheTime = null) {
     70             if (data == null) {
     71                 return;
     72             }
     73 
     74             var entryBytes = this.Serialize(data);
     75             if (cacheTime == null) {
     76                 cacheTime = 60 * 24 * 30;
     77             }
     78 
     79             var expiresIn = TimeSpan.FromMinutes((int)cacheTime);
     80             this._db.StringSet(key, entryBytes, expiresIn);
     81         }
     82 
     83         /// <summary>
     84         /// 根据键获取值
     85         /// </summary>
     86         /// <typeparam name="T"></typeparam>
     87         /// <param name="key"></param>
     88         /// <returns></returns>
     89         public virtual T Get<T>(string key) {
     90 
     91             var rValue = this._db.StringGet(key);
     92             if (!rValue.HasValue) {
     93                 return default(T);
     94             }
     95 
     96             var result = this.Deserialize<T>(rValue);
     97 
     98             return result;
     99         }
    100 
    101         /// <summary>
    102         /// 反序列化
    103         /// </summary>
    104         /// <typeparam name="T"></typeparam>
    105         /// <param name="serializedObject"></param>
    106         /// <returns></returns>
    107         protected virtual T Deserialize<T>(byte[] serializedObject) {
    108             if (serializedObject == null) {
    109                 return default(T);
    110             }
    111 
    112             var json = Encoding.UTF8.GetString(serializedObject);
    113             return JsonConvert.DeserializeObject<T>(json);
    114         }
    115 
    116         /// <summary>
    117         /// 判断是否已经设置
    118         /// </summary>
    119         /// <param name="key"></param>
    120         /// <returns></returns>
    121         public virtual bool IsSet(string key) {
    122             return this._db.KeyExists(key);
    123         }
    124 
    125         /// <summary>
    126         /// 序列化
    127         /// </summary>
    128         /// <param name="data"></param>
    129         /// <returns>byte[]</returns>
    130         private byte[] Serialize(object data) {
    131             var json = JsonConvert.SerializeObject(data);
    132             return Encoding.UTF8.GetBytes(json);
    133         }
    134 
    135         public virtual int GetHashCode<T>(T ojb) {
    136             StringBuilder r = new StringBuilder();
    137             foreach (var item in ojb.GetType().GetProperties().ToList()) {
    138                 if (item.PropertyType.IsValueType || item.PropertyType.Name=="String") {
    139                     r.Append(item.GetValue(ojb));
    140                 }
    141                 else if(!item.PropertyType.IsValueType &&  item.PropertyType.Name!="String" && !item.PropertyType.Name.StartsWith("ICollection")) {
    142                     var classItem = item.GetType().GetProperties().ToList();
    143                     foreach (var info in classItem) {
    144                         if (info.PropertyType.IsValueType || info.PropertyType.Name == "String") {
    145                             r.Append(info.GetValue(ojb));
    146                         }
    147                     }
    148                 }
    149             }
    150             return r.ToString().GetHashCode();
    151         }
    152     }
    View Code
  • 相关阅读:
    如何做一个富文本编辑器
    chrome插件开发示例
    使用github Pages和Jekyll搭建一个Blog
    使用JavaScript制作简单的动画
    JQuery模拟七------利用extend包装ajax实现
    JQuery模拟六------jQuery处理事件简化版
    JQuery模拟五------实现属性set&get和CSS set&get
    JQuery模拟四------把用到Sizzle的地方先用CSS3选择器实现
    JQuery模拟三------利用extend函数扩展jQuery自身的方法和浏览器判断
    JQuery模拟二------添加extend函数和简单选择器
  • 原文地址:https://www.cnblogs.com/ArsenalArsig/p/9354432.html
Copyright © 2020-2023  润新知