[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.그것은 전적으로 올바른 것입니다. "가져 오기"(BookSleeve)가 연기 바이트를 반환합니다 []. 당신은 정확하게 실제 바이트 [] 얻기 위해 대기를 사용하고, 다음 역 직렬화를 통해 protobuf - 그물을 호출이 바이트 []를 통해 MemoryStream을 사용했다.
그것은 전적으로 올바른 것입니다. "가져 오기"(BookSleeve)가 연기 바이트를 반환합니다 []. 당신은 정확하게 실제 바이트 [] 얻기 위해 대기를 사용하고, 다음 역 직렬화를 통해 protobuf - 그물을 호출이 바이트 []를 통해 MemoryStream을 사용했다.
문제 없다.
당신은 당신이 추하다는 점을 발견하는 것이 어떤 단계를 취소 한 경우, 좀 더 구체적 일 수 있지만, 수 :
당신이 일반적인 유틸리티 메소드 (어쩌면 확장 방법)을 추가하는 경우 물론, 당신은 한 번만 작성해야합니다.
그리고 (일부 추적 / 슬라이딩 만료에 대한) 래퍼 클래스와 L1 캐시 (L2로 레디 스)가, 이것이 우리가 유래에 그것을 사용하는 방법 거의 exacty 경우 추가와 함께.
한 참고 : 연결이 스레드 안전하고 대규모 공유하기위한 것입니다 작업 당 연결을하지 않습니다.
from https://stackoverflow.com/questions/6477623/how-should-i-be-using-booksleeve-with-protobuf-net by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 레디 스를 사용하여 NodeJs와 PHP 사이에 공유 세션에? (0) | 2020.01.01 |
---|---|
[REDIS] 당신은 레디 스에 저장할 수있는 최대 값의 크기는 얼마입니까? (0) | 2020.01.01 |
[REDIS] 레디 스 매장의 UID를 설정하고 최선의 방법을 분류 (0) | 2020.01.01 |
[REDIS] AWS에 ActionCable : 예기치 않은 응답 코드 : 404 웹 소켓 핸드 셰이크 중에 오류 (0) | 2020.01.01 |
[REDIS] 값을 기준으로 키 찾기 (0) | 2020.01.01 |