C# Redis学习笔记

介绍:

Redis 是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。
补充:

支持存储的value类型相对更多,包括string、list、set、zset(sortedset –有序集合) 和hash(哈希类型)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入磁盘或者把修改操作写入追加的记录文件,并且再次基础上实现了master-slave(主从)同步。Redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器,这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。

Redus支持两种持久化方式:

1.    Snapshotting(快照)也是默认方式。 把数据做一个备份,将数据存储到文件

2.    Append-only file(aof)的方式

快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写到二进制文件中,默认的文件名称为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key键修改就会自动做快照。

aof方式:由于快照方式是在一定间隔时间做一次,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。Aof比快照方式又更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

文件说明:

Redis-server.exe : 服务程序

Redis-check-dumo.exe 本地数据库检查

Redis-check-aof.exe 更新日志检查

Redis-benchmark.exe 性能测试,用以模拟同时由N个客户端发送M个Sets/Gets查询

Redis-cli.exe 服务端开启后,我们的客户端就可以输入各种命令测试

 

Nuget 包安装

命令:Install-Packageservicestack.redis.5.0.2.nupkg

路径:C:\Program Files (x86)\Microsoft VisualStudio\2017\Enterprise\Common7\IDE   (对应VS版本,错误会提示)

 

Redis部署参考地址:http://keenwon.com/1275.html (亲测好使)

 

GitHub 源码地址:https://github.com/MicrosoftArchive/redis  注意的是3.0以上才可支持集群部署

注册服务:redis-server --service-install redis.windows.conf  --service-name RedisService_guanzhx

开启redis服务:redis-server--service-start  --service-name RedisService_guanzhx

停止服务:redis-server --service-stop  --service-name RedisService_guanzhx

 

卸载服务:redis-server --service-uninstall --service-nameRedisService_guanzhx

 

 

内存分配命令:

--maxmemory 例:redis-serverredis.windows.conf --maxmemory 200m

修改配置文件:redis.windows.conf

maxmemory 209715200  注意单位是字节

安装多实例:-port

命令:

redis-server --service-install–service-name redisService1 –port10001

redis-server --service-start –service-nameredisService1

redis-server --service-install–service-name redisService2 –port10002

redis-server --service-start –service-nameredisService2

redis-server --service-install–service-name redisService3 –port10003

redis-server --service-start –service-nameredisService3

     

C# 使用:

Nuget包获取到ServiceStack.Redis安装后可以得到下图所示的文件夹中的DLL,引用至项目即可。

RedisHelper类:

using ServiceStack.Redis;
using ServiceStack.Redis.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApp1
{
    public static class RedisHelper
    {
        private static RedisClient Redis = new RedisClient("127.0.0.1", 6379);
        //缓存池  
        static PooledRedisClientManager prcm = new PooledRedisClientManager();


        //默认缓存过期时间单位秒  
        private static int secondsTimeOut = 30 * 60;
        private static readonly Dictionary<int, PooledRedisClientManager> pools = new Dictionary<int, PooledRedisClientManager>();
        /// <summary>  
        /// 缓冲池  
        /// </summary>  
        /// <param name="readWriteHosts"></param>  
        /// <param name="readOnlyHosts"></param>  
        /// <returns></returns>  
        private static void CreateManager(
         string[] readWriteHosts, string[] readOnlyHosts)
        {
            for (int i = 0; i <= 15; i++)
            {
                PooledRedisClientManager prc = new PooledRedisClientManager(readWriteHosts, readOnlyHosts,
                new RedisClientManagerConfig
                {
                    MaxWritePoolSize = readWriteHosts.Length * 5,
                    MaxReadPoolSize = readOnlyHosts.Length * 5,
                    AutoStart = true,
                }, i, 200, 10);// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) }; 
                pools.Add(i, prc);
            }
        }
        public static PooledRedisClientManager ChooseRedisInstance(int database)
        {
            if (database > 16) return pools[0];
            return pools[database];
        }
        /// <summary>  
        /// 构造函数  
        /// </summary>  
        /// <param name="openPooledRedis">是否开启缓冲池</param>  
        static RedisHelper()
        {


            CreateManager(new string[] { "127.0.0.1:6379" }, new string[] { "127.0.0.1:6379" });
            //Redis = prcm.GetClient() as RedisClient;
        }


        #region Key/Value存储  
        /// <summary>  
        /// 设置缓存  
        /// </summary>  
        /// <typeparam name="T"></typeparam>  
        /// <param name="key">缓存建</param>  
        /// <param name="t">缓存值</param>  
        /// <param name="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param>  
        /// <returns></returns>  
        public static bool Set<T>(string key, T t, int timeout = 0, int db = 0)
        {
            Redis = (RedisClient)ChooseRedisInstance(db).GetClient();
            if (timeout >= 0)
            {
                if (timeout > 0)
                {
                    secondsTimeOut = timeout;
                }
                Redis.Expire(key, secondsTimeOut);
            }


            return Redis.Add<T>(key, t);
        }
        /// <summary>  
        /// 获取  
        /// </summary>  
        /// <typeparam name="T"></typeparam>  
        /// <param name="key"></param>  
        /// <returns></returns>  
        public static T Get<T>(string key, int db = 0)
        {
            Redis = (RedisClient)ChooseRedisInstance(db).GetClient();
            return Redis.Get<T>(key);
        }
        /// <summary>  
        /// 删除  
        /// </summary>  
        /// <param name="key"></param>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值