123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using CSharpUtil;
- using StackExchange.Redis;
- using MongoDB;
- using MongoDB.Bson;
- using MongoDB.Driver;
- using MongoDB.Bson.Serialization;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- namespace RedisTransfer
- {
- internal class Trans2MongoDB : ITransfer
- {
- public void Trans(int db = 0)
- {
- var redis = Redis.Rdb(db);
- var mdb = Mongo.Mdb();
- var collection = mdb.GetCollection<BsonDocument>("ylsj2019taptap");
- Console.WriteLine("start");
- var s = File.ReadAllLines("keys.txt");
- s.ToList().ForEach(x =>
- {
- var t = redis.KeyType(x);
- switch (t)
- {
- case RedisType.String:
- {
- var v = redis.StringGet(x).ToString();
- var bson = new BsonDocument("key",x); // (x, BsonDocument.Parse());
- if (BsonDocument.TryParse(v, out var bo))
- {
- bson.Add("value", bo);
- }
- else
- {
- bson.Add("value", v);
- }
- collection.InsertOne(bson);
- break;
- }
- case RedisType.Hash:
- {
- var jo = new BsonDocument();
- redis.HashGetAll(x).ToList().ForEach(x =>
- {
- if (BsonDocument.TryParse(x.Value.ToString(), out var bo))
- {
- jo.Add(x.Name, bo);
- }
- else
- {
- jo.Add(x.Name, x.Value.ToString());
- }
- //jo.Add(x.Name, BsonDocument.Parse(x.Value.ToString()))
- }
- );
- var bson = new BsonDocument("key", x);
- bson.Add("value", jo);
- collection.InsertOne(bson);
- break;
- }
- case RedisType.List:
- {
- var ja = new BsonArray();
- foreach (var r in redis.ListRange(x, 0, -1))
- {
- if (BsonDocument.TryParse(r.ToString(), out var bo))
- {
- ja.Add(bo);
- }
- else
- {
- ja.Add(r.ToString());
- }
- }
- var bson = new BsonDocument("key", x);
- bson.Add("value", ja);
- collection.InsertOne(bson);
- break;
- }
- case RedisType.Set:
- {
- var ja = new BsonArray();
- foreach (var r in redis.SetMembers(x))
- {
- if (BsonDocument.TryParse(r.ToString(), out var bo))
- {
- ja.Add(bo);
- }
- else
- {
- ja.Add(r.ToString());
- }
- }
- var bson = new BsonDocument("key", x);
- bson.Add("value", ja);
- collection.InsertOne(bson);
- //Console.WriteLine(new JProperty(x, ja).ToString() + ",");
- break;
- }
- case RedisType.SortedSet:
- {
- var ja = new BsonArray();
- foreach (var r in redis.SortedSetRangeByScoreWithScores(x))
- {
- if (BsonDocument.TryParse(r.ToString(), out var bo))
- {
- ja.Add(bo);
- }
- else
- {
- ja.Add(r.ToString());
- }
- }
- var bson = new BsonDocument("key", x);
- bson.Add("value", ja);
- collection.InsertOne(bson);
- //Console.WriteLine(new JProperty(x, ja).ToString() + ",");
- break;
- }
- default:
- Console.WriteLine("不支持的redis数据类型");
- break;
- }
- });
- Console.WriteLine("end");
- }
- }
- }
|