在WebApi的Controller类里面,定义了一个static类型的类,以此想让多个请求,共享这个类里的数据。但事实,不同的请求,并没有共享它。应该怎么做?
贴下你这个static类的代码及外边如何使用的
static class Queue { //长度为1000的队列 public static Document[] blogpostZzkDoc = new Document[1000]; //首指针,尾指针 public static int rear, front; //入队列 public static Document[] temporary = new Document[50]; public static void init() { for (int i = 0; i < 1000; i++) blogpostZzkDoc[i] = new Document(); for (int i = 0; i < 50; i++) temporary[i] = new Document(); rear = 0; front = 0; } public static void push(Document[] post, int len) { for (int i = 0; i < len; i++) { rear = (rear + 1) % 1000; if (rear == front) { while (true) { if (rear != front) break; Thread.Sleep(3000); System.Console.WriteLine("数据已经满了,插不进去了"); } } postDoc[rear] = post[i]; } System.Console.WriteLine("我又插入了 " + len.ToString() + "个数据, 现在尾指针已经到了" + rear.ToString() + "头指针已经到了" + front.ToString()); } //出队列 public static Document[] pop(int len) { int j = 0; while (front != rear) { temporary[j++] = postDoc[front]; front = (front + 1) % 1000; if (j == len) { System.Console.WriteLine("数据已经被取空了"); break; } } System.Console.WriteLine("我取出了了 " + j.ToString() + "个数据, 现在尾指针已经到了" + rear.ToString() + "头指针已经到了" + front.ToString()); return temporary; } }
上面是我要共享的类以及变量
下面是,Controller的函数调用
[HttpGet("api/getdata")] public void Get() { Queue.init(); GetData(); } [HttpGet("api/write")] public void write() { Write(); }
两个函数的操作:
public void GetData() { int len = 50; Document[] s = new Document[len]; int start = 1; while (true) { s = post.getData(); Queue.push(s, s.Length); if (s.Length == 0) break; } }
public void Write() { int len = 50; Document[] s = new Document[len]; List<Dictionary<string, string>> doc = new List<Dictionary<string, string>>(); while (Queue.front != Queue.rear) { s = Queue.pop(len); int l = s.Length; for (int i = 0; i < l; i++) { doc.Add(ToMap(s[i])); } _service.Write(doc.Select(p => new DocDto(p))); if (Queue.front >= Queue.rear) break; } }
就是,一个请求是往队列里面写入数据,一个请求是往队列里面拿出数据。然后两个请求不能共享一个队列。
我找到问题的关键了,是我的队列写的有问题!
用第三方缓存 redis ,轻轻松松实现
我的共享资源其实就是一个队列,但是redis是一个key/value 结构,没办法实现我想要的。
@Shendu.cc: redis 的list类型可以做消息队列