관리 메뉴

개발이야기

[Database] Python - Redis : lpush, ltrim, hset, hget (해시) 본문

DB & Infra/Database

[Database] Python - Redis : lpush, ltrim, hset, hget (해시)

안성주지몬 2019. 2. 27. 00:00

오늘은 python에서 redis에 lpush 명령을 이용하여 리스트 자료형에 값을 저장하는 방법과 hset을 이용하여 해시 자료형에 값을 넣는 방법에 대해서 살펴보도록 하겠습니다.



1. lpush


먼저 lpush 명령입니다. lpush 명령을 사용하면 해당 키 값의 리스트 자료형에 첫 부분에 값을 저장하게 됩니다. 이를 파이썬에서 한번 확인해 보도록 하겠습니다. 


import redis
conn = redis.Redis(host='YourHostNumber', port="YourPostNumber", db="select db")
conn.lpush('test', 1,2,3,4,5)


lpush 를 사용하여 키가 'test'인 자료형의 1,2,3,4,5를 순차적으로 넣었습니다.


이를 lrange 명령을 통해 순차적으로 가져오면 다음과 같은 결과가 나옵니다.


<코드>

print(conn.lrange('test',0,-1))


<결과>

[b'5', b'4', b'3', b'2', b'1']


결과에서 보실 수 있듯이 가장 마지막에 들어간 5가 가장 먼저 출력되는 것을 알 수 있습니다.

결과를 보시면 b 가 포함되어 있는데 이는 redis에서 결과를 가져올때 타입이 바이트 타입이기 때문입니다. 이는 간단하게 뒤에 decode()를 붙여주면 됩니다.


for item in conn.lrange('test',0,-1):

print(item.decode()) 



그리고 ltrim이라는 명령이 있습니다. 이는 특정 키 값에 들어가는 값의 수를 제한해주는 명령입니다. 예를들어 ltrim('test',0,99)는 'test' 키를 가지는 값의 수를 0번 인덱스부터 99번인덱스까지만 유지한다는 뜻입니다. 즉 100개의 데이터만 가지고 있는거죠. lpush는 마지막에 넣는 값을 가장 먼저 넣기때문에 이 ltrim 명령을 사용하면 최신의 데이터값을 계속 유지할 수 있습니다. 


+ 추가 

ltrim에 인자로 0,99 를 넣으면 0번부터 99번 인덱스를 제외한 인덱스를 모두 삭제하는 명령입니다.


예시코드를 작성하면서 살펴보도록 하겠습니다. 먼저 0~99까지의 값을 'test2' 키 값에 lpush 를 사용하여 넣어줍니다.


<코드>

import redis
conn = redis.Redis(host='YourHostNumber', port="YourPostNumber", db="select db")
for i in range(0,100):
conn.lpush('test2',i)
print(conn.lrange('test2',0,-1))


<결과>

[b'99', b'98', b'97', b'96', b'95', b'94', b'93', b'92', b'91', b'90', b'89', b'88', b'87', b'86', b'85', b'84', b'83', b'82', b'81', b'80', b'79', b'78', b'77', b'76', b'75', b'74', b'73', b'72', b'71', b'70', b'69', b'68', b'67', b'66', b'65', b'64', b'63', b'62', b'61', b'60', b'59', b'58', b'57', b'56', b'55', b'54', b'53', b'52', b'51', b'50', b'49', b'48', b'47', b'46', b'45', b'44', b'43',b'42', b'41', b'40', b'39', b'38', b'37', b'36', b'35', b'34', b'33', b'32', b'31', b'30', b'29', b'28', b'27', b'26', b'25', b'24', b'23', b'22', b'21', b'20', b'19', b'18', b'17', b'16', b'15', b'14', b'13', b'12', b'11', b'10', b'9', b'8', b'7', b'6', b'5', b'4', b'3', b'2', b'1', b'0']


다시 lpush 를 사용하여 100~149까지의 숫자를 넣어줍니다. 


conn.ltrim('test2',0,99)


lpush를 한 다음 코드에 이 코드를 추가해줍니다. 'test2' 키 값에 0번 인덱스부터 99번 인덱스만 남아있게 합니다. 


<결과>

[b'149', b'148', b'147', b'146', b'145', b'144', b'143', b'142', b'141', b'140', b'139', b'138', b'137', b'136', b'135', b'134', b'133', b'132', b'131', b'130', b'129', b'128', b'127', b'126', b'125', b'124', b'123', b'122', b'121', b'120', b'119', b'118', b'117', b'116', b'115', b'114', b'113', b'112', b'111', b'110', b'109', b'108', b'107', b'106', b'105', b'104', b'103', b'102', b'101', b'100', b'99', b'98', b'97', b'96', b'95', b'94', b'93', b'92', b'91', b'90', b'89', b'88', b'87', b'86', b'85', b'84', b'83', b'82', b'81', b'80', b'79', b'78', b'77', b'76', b'75', b'74', b'73', b'72', b'71', b'70', b'69', b'68', b'67', b'66', b'65', b'64', b'63', b'62', b'61', b'60', b'59', b'58', b'57', b'56', b'55', b'54', b'53', b'52', b'51', b'50']


<전체 코드 >

import redis
conn = redis.Redis(host='YourHostNumber', port="YourPostNumber", db="select db")
for i in range(0,100):
conn.lpush('test2',i)
print(conn.lrange('test2',0,-1))
for i in range(100,150):
conn.lpush('test2', i)
conn.ltrim('test2',0,99)
print(conn.lrange('test2',0,-1))



2. hset


hset 은 해시 테이블 형태로 값을 저장합니다. 

먼저 인자부터 살펴보도록 하죠.


hset(key, field1, value) 


먼저 key는 해당 해시테이블에 접근할 수 있게하는 main_key가 됩니다. 다음 field1은 해시 테이블 내부에 키 값을 의미합니다. 여러개의 키를 가질 수 있고 이미 사용되고 있는 키를 입력하게 되면 덮어쓰게 됩니다.


아래는 파이썬을 통한 예시입니다.


<코드>

import redis
conn = redis.Redis(host='YourHostNumber', port="YourPostNumber", db="select db")
conn.hset('hash:test', 'weather', 'good')
print(conn.hget('hash:test', 'weather'))


<결과>

b'good'


hset으로 저장한 값은 hget 함수를 사용하여 가져올 수 있으며 인자는 key 와 field입니다. 



이상으로 redis에서 자주 사용하는 명령인 lpush와 hset 명령을 파이썬을 통해 사용하는 방법에 대해서 알아보았습니다.



레퍼런스

[1] lpush : https://redis.io/commands/lpush

[2] ltrim : https://redis.io/commands/ltrim

[3] hset : https://redis.io/commands/hset


Comments