TairHash adalah struktur data yang memungkinkan Anda menentukan waktu hidup (TTL) dan nomor versi untuk sebuah field. TairHash lebih fleksibel digunakan serta menyederhanakan pengembangan aplikasi.
Informasi latar belakang
String Redis dapat digunakan untuk mengelola log masuk pengguna dari satu perangkat dengan mudah. Namun, untuk log masuk multi-perangkat dari satu pengguna, string Redis memerlukan penggabungan string antara ID pengguna dan jenis perangkat. Contoh: User_1_phone. Pendekatan ini memiliki kekurangan berikut:
Pengembangan aplikasi: Membutuhkan beban kerja tambahan untuk penggabungan string.
Pemrograman: Pengkodean dan dekode ulang diperlukan secara berulang.
Penyimpanan: Awalan duplikat dari ID pengguna mengakibatkan pemborosan ruang penyimpanan.
Topik ini menjelaskan cara menggunakan TairHash untuk mengelola log masuk multi-perangkat dari satu pengguna. TairHash adalah struktur data ekstensi internal Tair. TairHash memungkinkan Anda mengonfigurasi pengaturan TTL untuk kunci dan field. Dalam hal ini, Anda dapat menetapkan key sebagai ID pengguna, field sebagai jenis perangkat, dan value sebagai token pengguna. Anda juga dapat menentukan TTL untuk setiap field.
Gambar 1. Perbandingan antara String Redis dan TairHash
Contoh kode
Dalam contoh ini, Python 3.8 digunakan, dan Tair-py diinstal. Anda dapat menjalankan perintah pip3 install tair untuk menginstal Tair-py.
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import time
from tair import Tair
from tair import ResponseError
def get_tair() -> Tair:
"""
Metode ini digunakan untuk terhubung ke instance Tair.
* host: titik akhir yang digunakan untuk terhubung ke instance Tair.
* port: nomor port yang digunakan untuk terhubung ke instance Tair. Nilai default: 6379.
* username: nama pengguna akun database. Jika parameter ini tidak ditentukan, akun default digunakan.
* password: kata sandi akun database.
"""
tair: Tair = Tair(
host = "r-bp************.redis.rds.aliyuncs.com",
port = 6379,
db = 0,
username = "",
password = "D****123",
)
return tair
def add_user_pass(userID: str, device: str, token: str, timeout: int) -> bool:
"""
Metode ini menggunakan perintah EXHSET untuk menyimpan informasi log masuk pengguna dalam TairHash.
* Set key menjadi ID pengguna.
* Set field menjadi jenis perangkat.
* Set value menjadi token pengguna.
* Set ex menjadi TTL dari token pengguna.
"""
try:
tair = get_tair()
ret = tair.exhset(userID, device, token, ex=timeout)
return ret == 1
except ResponseError as e:
print(e)
return False
def print_up(userID):
"""
Metode ini digunakan untuk menampilkan informasi token pengguna yang belum kedaluwarsa.
"""
for i in tair.exhgetall(userID):
print('{}:{}'.format (userID,i))
if __name__ == "__main__":
tair = get_tair()
# Menambahkan data uji User 1 dan User 2.
user_1 = "user1"
user_2 = "user2"
add_user_pass(user_1, "phone", "token_123", 5)
add_user_pass(user_1, "pad", "token_124", 10)
add_user_pass(user_2, "pad", "token_456", 10)
add_user_pass(user_2, "pc", "token_457", 10)
# Tunggu 6 detik.
print("Tunggu 6 detik")
time.sleep(6)
# Menampilkan informasi token pengguna yang belum kedaluwarsa.
print_up(user_1)
print_up(user_2)
Contoh Keluaran Sukses:
Tunggu 6 detik
user1:{field: pad, value: token_124}
user2:{field: pad, value: token_456}
user2:{field: pc, value: token_457}Deskripsi hasil: Total empat token pengguna ditulis. Namun, hanya informasi dari tiga token pengguna yang ditampilkan 6 detik setelah semua token ditulis. Hal ini karena TTL dari token pengguna pertama adalah 5 detik.