C#使用redis 处理过程

最近使用java从oracle处理大量BOM数据,中间处理过程使用的sqlite3,但中间处理速度明显过慢。换成redis后,速度提高几个数量级。
正好一个C#的程序处理大量售后数据,需要一些逻辑运算。程序跑了两周还没计算完一半的数据量。当前使用的是SqlServer数据库,现决定修改程序改用redis完成中间运算,再写回SqlServer。

项目加入redis支持

尝试安装过程

打开现有项目,进入“管理解决方案的 NuGet程序包”,输入ServiceStack.Redis

杯具是这安装这个失败了,改用:

可以安装,但运行失败。没找到原因,无奈尝试解决问题。

处理过程

卸载这个NServiceKit.Redis。
卸载NuGet Package Manager

然后重新安装NuGet Package Manager。安装好重启。
再尝试安装:
C#使用redis 处理过程_第1张图片

安装成功。

NServiceKit.Redis项目地址:
https://github.com/NServiceKit/NServiceKit.Redis

讨论组:
https://groups.google.com/forum/#!forum/redis-db

测试代码

string redisHost="127.0.0.1";
RedisClient redis = new RedisClient(redisHost, 6379);
string key = m.order_number;
//redis.Set(key, JsonMapper.ToJson(m)); //需另外引用LitJson http://blog.csdn.net/xundh/article/details/48491109
也可以这样写:
redis.Set<ModelType>(key,m);

遗留问题:
Set大量数据时,会报

Unable to Connect: sPort: 5403

端口数字每次提示不同。使用WireShark发现,每次Set会连接不同redis的端口号。端口会很快被耗完。

解决方案。避免短时间大量的Set操作,改用mset:


static void main(){
    //写入
    using (RedisClient redis = new RedisClient(redisHost))
    {
        redis.Db = 1;
        redis.ConnectTimeout = 0;
        //主体逻辑
        ArrayList keys = new ArrayList();
        List<byte[]> values = new List<byte[]>();
        for(int i=0;i<10000;i++){ //循环
            string key = "key"+i;

            keys.Add(key);
            values.Add(System.Text.Encoding.Default.GetBytes( JsonMapper.ToJson(model)));
        }
        string[] string_keys = (string[])keys.ToArray(typeof(string));
        byte[][] byte_values = values.ToArray();
        redis.MSet(string_keys, byte_values);
        redis.Quit();
        redis.Shutdown();
    }
}

批量删除

redis.RemoveByRegex("MTL_SYSTEM_ITEMS_B:.*");

你可能感兴趣的:(redis)