• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

redis在C#中的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

下面介绍下,在C#中如何使用redis

1、引用 StackExchange.Redis

 

 2、redis 工具类

    public class RedisHelper
    {
        private static ConnectionMultiplexer multiplexer { get; set; }
        static RedisHelper()
        {
        }

        public static IDatabase GetDataBase(int dbNums = 1)
        {
            if (multiplexer == null)
                Init();
            return multiplexer.GetDatabase(dbNums);
        }

        public static ConnectionMultiplexer GetMultiplexer()
        {
            if (multiplexer == null)
                Init();

            return multiplexer;
        }
        public static bool IsConnect(string key, IDatabase redisDb, string module, string action)
        {
            if (!redisDb.IsConnected(key))
            {
                LogHelper.Error("current redis is not connect", null, module, action);
                return false;
            }
            return true;
        }

        private static void Init()
        {
            try
            {
                var configString = ConfigurationManager.AppSettings["RedisConfigString"];
                ConfigurationOptions options = ConfigurationOptions.Parse(configString);
                multiplexer = ConnectionMultiplexer.Connect(options);
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "RedisHelper", "Static");
            }
        }
    }
View Code

 

3、常用操作

IDatabase _cacheClient = RedisHelper.GetDataBase(4);
//key是否存在
_cacheClient.KeyExists("key")
//设置key-vaule
_cacheClient.StringSet("key", "value");
//设置过期时间
_cacheClient.KeyExpire("key", TimeSpan.FromMinutes(1));
//删除
_cacheClient.KeyDelete("key");

4、redis 虽然也可以做消息队列,实现也简单,但弊端同样明显,不推荐

//发布
ConnectionMultiplexer multiplexer = RedisHelper.GetMultiplexer();
ISubscriber sub = multiplexer.GetSubscriber();
var queue = sub.Publish("channel name", "message");

//订阅
ConnectionMultiplexer multiplexer = RedisHelper.GetMultiplexer();
ISubscriber sub = multiplexer.GetSubscriber();
sub.Subscribe("channel name", (channel, message) =>
{
    //TODO
});

 5、计数器,用于秒杀、抢购控库存

//取值,不存在则初始为0
long num = _cacheClient.StringIncrement("key", 0)

//判断,比如和缓存里的商品总库存比较

//计数增加
_cacheClient.StringIncrement("key", 2)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#动态编译、执行代码发布时间:2022-07-10
下一篇:
C#中WindowsForm常见控件的运用发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap