[REDIS] 어떻게 저장하고 레디 스와 사전을 검색 할
REDIS어떻게 저장하고 레디 스와 사전을 검색 할
# I have the dictionary my_dict
my_dict = {
'var1' : 5
'var2' : 9
}
r = redis.StrictRedis()
어떻게 my_dict를 저장하고 레디 스로를 검색 할 것입니다. 예를 들어, 다음 코드는 작동하지 않습니다.
#Code that doesn't work
r.set('this_dict', my_dict) # to store my_dict in this_dict
r.get('this_dict') # to retrieve my_dict
해결법
-
==============================
1.당신은 (여러 개의 키가 hmset를 사용하여 설정할 수 있습니다) hmset에 의해 그것을 할 수 있습니다.
당신은 (여러 개의 키가 hmset를 사용하여 설정할 수 있습니다) hmset에 의해 그것을 할 수 있습니다.
hmset ( "RedisKey", dictionaryToSet)
import redis conn = redis.Redis('localhost') user = {"Name":"Pradeep", "Company":"SCTL", "Address":"Mumbai", "Location":"RCP"} conn.hmset("pythonDict", user) conn.hgetall("pythonDict") {'Company': 'SCTL', 'Address': 'Mumbai', 'Location': 'RCP', 'Name': 'Pradeep'}
-
==============================
2.당신은 당신의 DICT 피클과 문자열로 저장할 수 있습니다.
당신은 당신의 DICT 피클과 문자열로 저장할 수 있습니다.
import pickle import redis r = redis.StrictRedis('localhost') mydict = {1:2,2:3,3:4} p_mydict = pickle.dumps(mydict) r.set('mydict',p_mydict) read_dict = r.get('mydict') yourdict = pickle.loads(read_dict)
-
==============================
3.또 다른 방법 : 당신이 RedisWorks 라이브러리를 사용할 수 있습니다.
또 다른 방법 : 당신이 RedisWorks 라이브러리를 사용할 수 있습니다.
핍 redisworks 설치
>>> from redisworks import Root >>> root = Root() >>> root.something = {1:"a", "b": {2: 2}} # saves it as Hash type in Redis ... >>> print(root.something) # loads it from Redis {'b': {2: 2}, 1: 'a'} >>> root.something['b'][2] 2
그것은 레디 스 유형과 그 반대로 파이썬 유형을 변환합니다.
>>> root.sides = [10, [1, 2]] # saves it as list in Redis. >>> print(root.sides) # loads it from Redis [10, [1, 2]] >>> type(root.sides[1]) <class 'list'>
면책 조항 : 나는 라이브러리를 썼다. 여기 코드는 다음과 같습니다 https://github.com/seperman/redisworks
-
==============================
4.당신은 레디 스에서 파이썬 딕셔너리를 저장할 경우, JSON 문자열로 저장하는 것이 좋습니다.
당신은 레디 스에서 파이썬 딕셔너리를 저장할 경우, JSON 문자열로 저장하는 것이 좋습니다.
import redis r = redis.StrictRedis(host='localhost', port=6379, db=0) mydict = { 'var1' : 5, 'var2' : 9, 'var3': [1, 5, 9] } rval = json.dumps(mydict) r.set('key1', rval)
역 직렬화를 검색하는 동안 그것은 json.loads를 사용하여
data = r.get('key1') result = json.loads(data) arr = result['var3']
무엇 JSON 기능에 의해 직렬화되지 않은 유형 (eg.bytes)에 대한?
당신은 JSON 기능에 의해 직렬화 할 수없는 종류의 인코더 / 디코더 기능을 쓸 수 있습니다. 예를 들면. 바이트 어레이베이스 64 / ASCII 인코더 / 디코더 기능을 작성.
-
==============================
5.기본적인 대답은 이미 다른 사람에 의해 제공되면서, 나는 몇 가지를 추가하고 싶습니다.
기본적인 대답은 이미 다른 사람에 의해 제공되면서, 나는 몇 가지를 추가하고 싶습니다.
HashMap의 / 사전 / 매핑 유형 값으로 기본 작업을 수행 할 수있는 레디 스의 명령은 다음과 같습니다.
다음 레디 스-PY 라이브러리에 각각의 방법은 다음과 같습니다 -
이 존재하지 않는 경우 위의 setter 메소드의 모든 매핑을 만듭니다. 매핑 매핑 / 키가 존재하지 않는 경우 위의 getter 메소드의 모든 에러 / 예외를 발생시키지 않습니다.
Example: ======= In [98]: import redis In [99]: conn = redis.Redis('localhost') In [100]: user = {"Name":"Pradeep", "Company":"SCTL", "Address":"Mumbai", "Location":"RCP"} In [101]: con.hmset("pythonDict", {"Location": "Ahmedabad"}) Out[101]: True In [102]: con.hgetall("pythonDict") Out[102]: {b'Address': b'Mumbai', b'Company': b'SCTL', b'Last Name': b'Rajpurohit', b'Location': b'Ahmedabad', b'Name': b'Mangu Singh'} In [103]: con.hmset("pythonDict", {"Location": "Ahmedabad", "Company": ["A/C Pri ...: sm", "ECW", "Musikaar"]}) Out[103]: True In [104]: con.hgetall("pythonDict") Out[104]: {b'Address': b'Mumbai', b'Company': b"['A/C Prism', 'ECW', 'Musikaar']", b'Last Name': b'Rajpurohit', b'Location': b'Ahmedabad', b'Name': b'Mangu Singh'} In [105]: con.hget("pythonDict", "Name") Out[105]: b'Mangu Singh' In [106]: con.hmget("pythonDict", "Name", "Location") Out[106]: [b'Mangu Singh', b'Ahmedabad']
나는 일을 더 명확하게 희망.
-
==============================
6.는 SET 명령 저장을 문자열이 아니라 임의의 데이터를 레디 스. 당신은 같은 뭔가 해시 레디 스로 DICT를 저장하기 위해이 HSET 명령을 레디 스 사용을 시도 할 수
는 SET 명령 저장을 문자열이 아니라 임의의 데이터를 레디 스. 당신은 같은 뭔가 해시 레디 스로 DICT를 저장하기 위해이 HSET 명령을 레디 스 사용을 시도 할 수
for k,v in my_dict.iteritems(): r.hset('my_dict', k, v)
하지만 레디 스 데이터 유형 및 파이썬 데이터 유형은 매우 일치하지 않습니다. 파이썬 dicts 임의로 중첩 될 수 있지만, 레디 스 해시는 값이 문자열해야 할 것이다. 당신이 취할 수있는 또 다른 방법은 문자열에 파이썬 데이터를 변환하고 저장하는 것입니다 레디 스에서, 뭔가 같은
r.set('this_dict', str(my_dict))
당신이 얻을 때 다음 밖으로 문자열은 파이썬 개체를 다시 구문 분석해야합니다.
-
==============================
7.당신이 문제를 접근 할 수있는 다른 방법 :
당신이 문제를 접근 할 수있는 다른 방법 :
import redis conn = redis.Redis('localhost') v={'class':'user','grants': 0, 'nome': 'Roberto', 'cognome': 'Brunialti'} y=str(v) print(y['nome']) #<=== this return an error as y is actually a string conn.set('test',y) z=eval(conn.get('test')) print(z['nome']) #<=== this really works!
내가 효율성 / 속도를 테스트하지 않았다.
-
==============================
8.이 소개에서 2017 봐 이후 비교적 새로운 rejson-평을보십시오.
이 소개에서 2017 봐 이후 비교적 새로운 rejson-평을보십시오.
from rejson import Client, Path rj = Client(host='localhost', port=6379) # Set the key `obj` to some object obj = { 'answer': 42, 'arr': [None, True, 3.14], 'truth': { 'coord': 'out there' } } rj.jsonset('obj', Path.rootPath(), obj) # Get something print 'Is there anybody... {}?'.format( rj.jsonget('obj', Path('.truth.coord')) ) # Delete something (or perhaps nothing), append something and pop it rj.jsondel('obj', Path('.arr[0]')) rj.jsonarrappend('obj', Path('.arr'), 'something') print '{} popped!'.format(rj.jsonarrpop('obj', Path('.arr'))) # Update something else rj.jsonset('obj', Path('.answer'), 2.17)
from https://stackoverflow.com/questions/32276493/how-to-store-and-retrieve-a-dictionary-with-redis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 저장하고 레디 스에서 세션을 검색 할 (0) | 2019.12.31 |
---|---|
[REDIS] 포크 메모리를 할당 할 수 없습니다 때문에 레디 스 실패 bgsave (0) | 2019.12.31 |
[REDIS] 어떻게 익스프레스 응용 프로그램에서 디버깅 제거하려면? (0) | 2019.12.31 |
[REDIS] 어떻게 생산 resque 노동자를 배포하려면? (0) | 2019.12.31 |
[REDIS] 어떻게 붙어 / 오래된 Resque 노동자를 삭제합니까? (0) | 2019.12.31 |