복붙노트

[REDIS] 어떻게 내가 protobuf - 그물 Booksleeve을 이용해야 하는가?

REDIS

어떻게 내가 protobuf - 그물 Booksleeve을 이용해야 하는가?

나는 바이트 배열을 설정 RedisConnection 설정 방법을 사용하지만 내가 어떻게 데이터를받을 수 있나요? 가져 오기는 포장 바이트 배열을 반환?

연결:

이 작품은 그러나 느낌이 좋지 않습니다

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BookSleeve;
using ProtoBuf;
using System.IO;
namespace RedisTest001
{
    [ProtoContract, Serializable]
    public class Price
    {
        private string _ticker;
        private double _value;

        public Price()
        {
        }

        public Price(string ticker, double value)
        {
            _ticker = ticker;
            _value = value;
        }


        [ProtoMember(1)]
        public string Ticker
        {
            get { return _ticker; }
            set { _ticker = value; }
        }

        [ProtoMember(2)]
        public double Value
        {
            get { return _value; }
            set { _value = value; }
        }


    }

    class Program
    {
        static void Main(string[] args)
        {
            using (var conn = new RedisConnection("localhost"))
            {
                Price p = new Price("IBM", 101.55);

                byte[] raw;
                using (MemoryStream ms = new MemoryStream())
                {
                    Serializer.Serialize<Price>(ms,p);
                    raw = ms.ToArray();
                }

                conn.Open();
                conn.Set(1, p.Ticker, raw);


                var tb  = conn.Get(1,"IBM");

                var str = conn.Wait(tb);

                 Price p2 = Serializer.Deserialize<Price>(new MemoryStream(str));

            }
        }
    }
}

더 많은 정보:

public static class pex
{
    public static byte[] ToBArray<T>(this T o)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            Serializer.Serialize<T>(ms, o);
            return ms.ToArray();
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Random RandomClass = new Random();

        using (var conn = new RedisConnection("localhost"))
        {

            conn.Open();

            for (int i = 0; i < 500000; i++)
            {
                Price p = new Price("IBM", RandomClass.Next(0, 1000));
                conn.AddToSet(2, "PRICE.IBM", p.ToBArray());
            }

해결법

  1. ==============================

    1.그것은 전적으로 올바른 것입니다. "가져 오기"(BookSleeve)가 연기 바이트를 반환합니다 []. 당신은 정확하게 실제 바이트 [] 얻기 위해 대기를 사용하고, 다음 역 직렬화를 통해 protobuf - 그물을 호출이 바이트 []를 통해 MemoryStream을 사용했다.

    그것은 전적으로 올바른 것입니다. "가져 오기"(BookSleeve)가 연기 바이트를 반환합니다 []. 당신은 정확하게 실제 바이트 [] 얻기 위해 대기를 사용하고, 다음 역 직렬화를 통해 protobuf - 그물을 호출이 바이트 []를 통해 MemoryStream을 사용했다.

    문제 없다.

    당신은 당신이 추하다는 점을 발견하는 것이 어떤 단계를 취소 한 경우, 좀 더 구체적 일 수 있지만, 수 :

    당신이 일반적인 유틸리티 메소드 (어쩌면 확장 방법)을 추가하는 경우 물론, 당신은 한 번만 작성해야합니다.

    그리고 (일부 추적 / 슬라이딩 만료에 대한) 래퍼 클래스와 L1 캐시 (L2로 레디 스)가, 이것이 우리가 유래에 그것을 사용하는 방법 거의 exacty 경우 추가와 함께.

    한 참고 ​​: 연결이 스레드 안전하고 대규모 공유하기위한 것입니다 작업 당 연결을하지 않습니다.

  2. from https://stackoverflow.com/questions/6477623/how-should-i-be-using-booksleeve-with-protobuf-net by cc-by-sa and MIT license