博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis——学习之路五(简单的C#使用redis)
阅读量:6917 次
发布时间:2019-06-27

本文共 5237 字,大约阅读时间需要 17 分钟。

redis官方推荐使用的客户端程序
打星星表示推荐使用的客户端程序,一个笑脸表示最近6个月内有过正式活动的。
从这里我们可以判断官方推荐我们使用ServiceSatck.Redis与StackExchange.Redis,首先要注意的是在ServiceStack.Redis在4.0开始商业化收费的。所以我们这里就不做介绍了,我们只使用StackExChange.Redis做一些简单的C#上面的操作。
这是StackExChange.Redis在Github官网上的 代码,下面有文档教程大家可以自己去看看,同时我为大家找到了一位博友对上面一些文档教程的翻译,大家可以作为参考使用。http://www.cnblogs.com/deosky
下面是我对StackExCahnge.Redis做的一个简单的例子以及一些简单的处理。
  static void Main(string[] args)  {    #region 简单dome    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("127.0.0.1:6379,password=CeshiPassword");    IDatabase db = redis.GetDatabase();    string value = "name";    db.StringSet("mykey", value);    Console.WriteLine(db.StringGet("mykey"));    #endregion     #region 使用ConfigurationOptions连接redis服务器    ConfigurationOptions configurationOptions = new ConfigurationOptions()    {      EndPoints = { { "127.0.0.1", 6379 } },      CommandMap = CommandMap.Create(new HashSet
()      {        "INFO",        "CONFIG",        "CLUSTER",        "PING",        "ECHO",        "CLIENT"      }, available: false),      KeepAlive = 180,      DefaultVersion = new Version(2, 8, 24),      Password = "CeshiPassword"    };    IDatabase db1 = redis.GetDatabase();    string value2 = "name2";    db.StringSet("mykey2", value2);    Console.WriteLine(db.StringGet("mykey2"));    #endregion     Console.ReadKey();  }
以上我参考说明作者的文档一二简单的写出来了,大家可当成测试使用。
下面是本人做的了一些封装
在文档一中作者提到在ConnectionMulitiplexer在内部走了很多事情,所有我们不需要在每一步操作时创建ConnectionMulitiplexer对象。英文原文:
Because the 
ConnectionMultiplexer does a lot, it is designed to be 
shared and reused between callers. You should not create a 
ConnectionMultiplexer per operation. It is fully thread-safe and ready for this usage. In all the subsequent examples it will be assumed that you have a 
ConnectionMultiplexer instance stored away for re-use. But for now, let's create one.
所以我们创建一个单例来保存一个ConnectionMulitiplexer对象就可以了,同时我把一些配置放在config文件。
  public class RedisManager    {        ///         /// redis配置文件信息        ///         private static RedisConfig RedisConfig = RedisConfig.GetConfig();        private static ConnectionMultiplexer _redis;        private static object _locker = new object();        public static ConnectionMultiplexer Manager        {            get            {                if (_redis == null)                {                    lock (_locker)                    {                        if (_redis != null) return _redis;                        _redis = GetManager();                        return _redis;                    }                }                return _redis;            }        }        private static ConnectionMultiplexer GetManager(ConfigurationOptions configurationOptions = null)        {            if (configurationOptions == null)            {                configurationOptions = new ConfigurationOptions()                {                    EndPoints = { { RedisConfig.WriteServerConStr } },                    CommandMap = CommandMap.Create(new HashSet
() { "INFO", "CONFIG", "CLUSTER", "PING", "ECHO", "CLIENT" }, available: false), KeepAlive = RedisConfig.KeepAlive, DefaultVersion = new Version(2, 8, 24), Password = RedisConfig.PassWord }; } return ConnectionMultiplexer.Connect(configurationOptions); } }
public class RedisCacheManager : ICacheManager    {        public static RedisCacheManager Instance = new RedisCacheManager();        public string Get(string key)        {            var db = RedisManager.Manager.GetDatabase();            return db.StringGet(key);        }        public T Get
(string key) { var db = RedisManager.Manager.GetDatabase(); return JsonConvert.DeserializeObject
(db.StringGet(key)); } public void Set
(string key, T data, int cacheTime) { var db = RedisManager.Manager.GetDatabase(); string str = JsonConvert.SerializeObject(data); db.StringSet(key, str, TimeSpan.FromMinutes(cacheTime)); } public void Set(string key, object data, int cacheTime) { var db = RedisManager.Manager.GetDatabase(); string str = JsonConvert.SerializeObject(data); db.StringSet(key, str, TimeSpan.FromMinutes(cacheTime)); } public void Set(string key, object data) { var db = RedisManager.Manager.GetDatabase(); string str = JsonConvert.SerializeObject(data); db.StringSet(key, str); } public bool IsSet(string key) { var db = RedisManager.Manager.GetDatabase(); return db.KeyExists(key); } public void Remove(string key) { var db = RedisManager.Manager.GetDatabase(); db.KeyDelete(key); }
我们只需要在每一个操作时获取要操作的db,这里是否只需要获取一次db就OK呢?这个本人还没有弄明白,如果大家有谁了解的欢迎指正。
 
本来这篇文章我早就应该写了,由于公司准备搬家到深圳,本人去不了,正准备面试换工作,所以一直没有更新。
 
你可能感兴趣的文章
JavaScript从作用域到闭包
查看>>
ubuntu mldonkey 设置
查看>>
java 空指针异常造成的原因有哪些
查看>>
linux 的软连接与硬连接
查看>>
解决vmware克隆虚拟机网卡无法启动
查看>>
Linux CentOS 安装Java SDK
查看>>
crontab
查看>>
HTTP协议详解
查看>>
自己写token类(无视jwt)
查看>>
NIOS2随笔——中断控制
查看>>
VNX VMX and delete luns
查看>>
Saltstack部署
查看>>
「人物特写」工程院院士谭建荣:马云不是制造业的杀手,工业机器人也不是救命良药...
查看>>
PHP添加zip&&curl扩展
查看>>
Ubuntn16 部署shellinabox--web shell工具
查看>>
SVN的部署和仓库的备份及WIN7客户端测试
查看>>
saltstack搭建集群3
查看>>
Python学习(13)--Lambda表达式和switch语句的实现
查看>>
the vmrc console has disconnected attempting to reconnect
查看>>
配置bind主域名服务器
查看>>