Phần mềm Python sử dụng thư viện redis để tương tác với cơ sở dữ liệu Redis. Dưới đây là các hàm chính cho thao tác với các kiểu dữ liệu khác nhau như chuỗi (strings), danh sách (lists), tập hợp (sets), tập hợp sắp xếp (sorted sets) và bản đồ hash.
Chuỗi (Strings)
Các hàm chính để thao tác với chuỗi bao gồm: SET, GET, GETSET, SETEX, SETNX, MSET, MSETNX, INCR, APPEND, SETRANGE, STRLEN.
- SET: Đặt giá trị cho khóa,
set(self, key, value). - GET: Lấy giá trị từ khóa,
get(self, key). - GETSET: Đặt giá trị mới cho khóa và trả về giá trị cũ,
getset(self, key, value). - SETEX: Đặt giá trị cho khóa với thời gian hết hạn,
setex(self, key, value, time). - SETNX: Đặt giá trị nếu khóa chưa tồn tại,
setnx(self, key, value). - MSET: Đặt nhiều khóa-giá trị cùng lúc,
mset(self, mapping). - MSETNX: Đặt nhiều khóa-giá trị nếu tất cả các khóa đều chưa tồn tại,
msetnx(self, mapping). - INCR: Tăng giá trị của khóa, hỗ trợ tăng hoặc giảm với bước tùy chỉnh,
incr(self, key, amount=1). - APPEND: Thêm nội dung vào cuối chuỗi,
append(self, key, value). - SETRANGE: Thay thế phần nội dung của chuỗi từ vị trí chỉ định,
setrange(self, key, offset, value). - STRLEN: Trả về độ dài của chuỗi,
strlen(self, key).
# Kết nối đến Redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
r = redis.Redis(connection_pool=pool)
r.flushall() # Xóa toàn bộ dữ liệu trong Redis
# Thao tác với chuỗi
r.setex('ten', value='liaogx', time=2) # Đặt giá trị với thời gian hết hạn 2 giây
r.mset(k1='v1', k2='v2', k3='v3') # Đặt nhiều khóa-giá trị cùng lúc
print(r.mget('k1', 'k2', 'k3', 'k4')) # Lấy nhiều giá trị cùng lúc
print(r.getset('ten', 'liaogaoxiang')) # Đặt giá trị mới và lấy giá trị cũ
print(r.getrange('ten', 0, 1)) # Lấy phần chuỗi từ vị trí 0 đến 1
r.setrange('ten', 0, 'LIAO') # Thay thế phần chuỗi từ vị trí 0
for _ in range(4):
print(r.get('ten'))
time.sleep(1)
r.set('n1', 'foo')
r.setbit('n1', 7, 1)
print(r.get('n1'))
print(r.getbit('n1', 7)) # Lấy bit thứ 7 của chuỗi
r.set('n2', 'Liao Gao Xiang')
print(r.strlen('n2')) # Độ dài chuỗi (mỗi ký tự tiếng Việt 3 byte)
r.set('so', 1)
r.incr('so', amount=10)
r.decr('so', amount=1)
print(r.get('so')) # Tăng giá trị khóa 'so'
r.append('so', '111')
print(r.get('so')) # Thêm nội dung vào cuối chuỗi 'so'
Danh sách (Lists)
Các hàm chính để thao tác với danh sách bao gồm: LPUSH, LRANGE, LINDEX, BLPOP, BRPOP.
- LPUSH: Thêm phần tử vào đầu danh sách,
lpush(self, key, value). - LRANGE: Lấy các phần tử trong khoảng chỉ định,
lrange(self, key, start, end). - LINDEX: Lấy phần tử ở vị trí chỉ định,
lindex(self, key, index). - BLPOP: Lấy và loại bỏ phần tử đầu tiên của danh sách,
blpop(self, key). - BRPOP: Lấy và loại bỏ phần tử cuối cùng của danh sách,
brpop(self, key).
# Thao tác với danh sách
r.lpush('ds', 11) # Thêm phần tử vào đầu danh sách
r.lpushx('ds', 22) # Thêm phần tử vào đầu danh sách nếu danh sách đã tồn tại
print(r.llen('ds')) # Đếm số phần tử trong danh sách
r.linsert('ds', 'before', 11, 99) # Chèn phần tử trước phần tử có giá trị 11
r.lset('ds', 1, 88) # Thay đổi giá trị phần tử ở vị trí 1
print(r.lrange('ds', 0, -1)) # Lấy tất cả các phần tử trong danh sách
r.lrem('ds', 88, num=1) # Xóa phần tử có giá trị 88
print(r.lrange('ds', 0, -1))
print(r.lpop('ds')) # Lấy và xóa phần tử đầu tiên của danh sách
print(r.lindex('ds', 0)) # Lấy phần tử ở vị trí 0
r.lpush('l1', 11)
r.rpush('l1', 22)
r.rpush('l1', 33)
r.rpush('l1', 44)
r.rpush('l1', 55)
r.ltrim('l1', 1, 3) # Cắt ngắn danh sách giữ lại phần tử từ vị trí 1 đến 3
print(r.lrange('l1', 0, -1))
r.rpoplpush('l1', 'l2') # Lấy phần tử cuối cùng của l1 và thêm vào đầu l2
print(r.lrange('l1', 0, -1))
print(r.lrange('l2', 0, -1))
print(r.blpop('l1', timeout=3)) # Lấy phần tử đầu tiên của l1, chờ tối đa 3 giây nếu danh sách trống
print(r.lrange('l1', 0, -1))
Tập hợp (Sets)
Các hàm chính để thao tác với tập hợp bao gồm: SADD, SCARD, SDIFF, SDIFFSTORE, SINTER, SINTERSTORE, SISMEMBER, SMEMBERS, SMOVE, SPOP, SRANDMEMBER, SREM, SUNION, SUNIONSTORE.
- SADD: Thêm phần tử vào tập hợp,
sadd(self, key, value). - SCARD: Đếm số phần tử trong tập hợp,
scard(self, key). - SDIFF: Trả về phần tử chỉ có trong tập hợp này mà không có trong các tập hợp khác,
sdiff(self, keys, *args). - SDIFFSTORE: Lưu kết quả của SDIFF vào một tập hợp mới,
sdiffstore(self, dest, keys, *args). - SINTER: Trả về phần tử chung giữa các tập hợp,
sinter(self, keys, *args). - SINTERSTORE: Lưu kết quả của SINTER vào một tập hợp mới,
sinterstore(self, dest, keys, *args). - SISMEMBER: Kiểm tra phần tử có thuộc tập hợp hay không,
sismember(self, key, value). - SMEMBERS: Lấy tất cả các phần tử trong tập hợp,
smembers(self, key). - SMOVE: Di chuyển phần tử từ tập hợp này sang tập hợp khác,
smove(self, src, dest, value). - SPOP: Loại bỏ và trả về một phần tử ngẫu nhiên từ tập hợp,
spop(self, key). - SRANDMEMBER: Trả về một phần tử ngẫu nhiên từ tập hợp, không loại bỏ,
srandmember(self, key). - SREM: Loại bỏ một phần tử khỏi tập hợp,
srem(self, key, value). - SUNION: Trả về tổng hợp của các tập hợp,
sunion(self, keys, *args). - SUNIONSTORE: Lưu kết quả của SUNION vào một tập hợp mới,
sunionstore(self, dest, keys, *args).
# Thao tác với tập hợp
r.sadd('s1', 'v1', 'v2', 'v3') # Thêm các phần tử vào tập hợp s1
r.sadd('s2', 'v2', 'v4') # Thêm các phần tử vào tập hợp s2
print(r.scard('s1')) # Đếm số phần tử trong s1
print(r.sdiff('s1', 's2')) # Tìm phần tử chỉ có trong s1
r.sdiffstore('s3', 's1', 's2') # Lưu kết quả của sdiff vào s3
print(r.smembers('s3')) # Lấy tất cả các phần tử trong s3
print(r.sinter('s1', 's2')) # Tìm phần tử chung giữa s1 và s2
r.sinterstore('s4', 's1', 's2') # Lưu kết quả của sinter vào s4
print(r.smembers('s4'))
print(r.sunion('s1', 's2')) # Tổng hợp các phần tử của s1 và s2
r.sunionstore('s5', 's1', 's2') # Lưu kết quả của sunion vào s5
print(r.smembers('s5'))
print(r.sismember('s4', 'v4')) # Kiểm tra v4 có thuộc s4 hay không
r.smove('s2', 's1', 'v4') # Di chuyển v4 từ s2 sang s1
print(r.smembers('s1'))
r.srem('s1', 'v1') # Loại bỏ v1 khỏi s1
print(r.spop('s1')) # Loại bỏ và trả về một phần tử ngẫu nhiên từ s1
print(r.srandmember('s1')) # Trả về một phần tử ngẫu nhiên từ s1
Tập hợp Sắp Xếp (Sorted Sets)
Các hàm chính để thao tác với tập hợp sắp xếp bao gồm: ZADD, ZCARD, ZCOUNT, ZINCRBY, ZINTERSTORE, ZLEXCOUNT, ZRANGE, ZRANGEBYLEX, ZRANGEBYSCORE, ZRANK, ZREM, ZREMRANGEBYLEX, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZREVRANGE, ZREVRANGEBYSCORE, ZREVRANK, ZSCORE, ZUNIONSTORE.
# Thao tác với tập hợp sắp xếp
r.zadd('ss1', {'11': 1, '22': 2, '33': 3}) # Thêm các phần tử vào ss1
print(r.zcard('ss1')) # Đếm số phần tử trong ss1
print(r.zcount('ss1', 1, 2)) # Đếm số phần tử có điểm số từ 1 đến 2
r.zincrby('ss1', '11', amount=5) # Tăng điểm số của '11' lên 5 đơn vị
print(r.zrange('ss1', 0, -1, withscores=True)) # Lấy tất cả các phần tử trong ss1
print(r.zrank('ss1', '33')) # Tìm vị trí của '33' trong ss1
r.zrem('ss1', '11') # Loại bỏ '11' khỏi ss1
print(r.zrange('ss1', 0, -1, withscores=True))
r.zremrangebyrank('ss1', 0, 1) # Loại bỏ các phần tử từ vị trí 0 đến 1
print(r.zrange('ss1', 0, -1, withscores=True))
r.zremrangebyscore('ss1', 3, 4) # Loại bỏ các phần tử có điểm số từ 3 đến 4
print(r.zrange('ss1', 0, -1, withscores=True))
print(r.zscore('ss1', '22')) # Lấy điểm số của '22'
r.zadd('ss2', {'a1': 6, 'a2': 2, 'a3': 5})
r.zadd('ss3', {'a1': 7, 'b1': 10, 'b2': 5})
r.zinterstore('ss4', ['ss2', 'ss3'], aggregate='SUM') # Tính giao của ss2 và ss3, cộng điểm số
print(r.zrange('ss4', 0, -1, withscores=True))
Bản đồ Hash
Các hàm chính để thao tác với bản đồ hash bao gồm: HDEL, HEXISTS, HGET, HGETALL, HINCRBY, HKEYS, HLEN, HMGET, HMSET, HSET, HSETNX, HVALS, HINCRBYFLOAT.
- HDEL: Loại bỏ trường từ bản đồ hash,
hdel(self, key, field). - HEXISTS: Kiểm tra trường có tồn tại trong bản đồ hash hay không,
hexists(self, key, field). - HGET: Lấy giá trị của trường từ bản đồ hash,
hget(self, key, field). - HGETALL: Lấy tất cả các trường và giá trị từ bản đồ hash,
hgetall(self, key). - HINCRBY: Tăng giá trị của trường trong bản đồ hash,
hincrby(self, key, field, amount). - HKEYS: Lấy tất cả các trường từ bản đồ hash,
hkeys(self, key). - HLEN: Đếm số trường trong bản đồ hash,
hlen(self, key). - HMGET: Lấy giá trị của nhiều trường từ bản đồ hash,
hmget(self, key, fields). - HMSET: Đặt nhiều trường và giá trị vào bản đồ hash,
hmset(self, key, mapping). - HSET: Đặt giá trị cho trường trong bản đồ hash,
hset(self, key, field, value). - HSETNX: Đặt giá trị cho trường nếu trường chưa tồn tại,
hsetnx(self, key, field, value). - HVALS: Lấy tất cả các giá trị từ bản đồ hash,
hvals(self, key). - HINCRBYFLOAT: Tăng giá trị của trường bằng một số thực,
hincrbyfloat(self, key, field, amount).
# Thao tác với bản đồ hash
r.hset('hs1', 'f1', 'v1') # Đặt giá trị cho trường 'f1' trong hs1
print(r.hget('hs1', 'f1')) # Lấy giá trị của trường 'f1'
r.hmset('hs2', {'f1': 'v1', 'f2': 'v2', 'f3': 'v3'}) # Đặt nhiều trường vào hs2
print(r.hmget('hs2', 'f2')) # Lấy giá trị của trường 'f2'
print(r.hgetall('hs2')) # Lấy tất cả các trường và giá trị trong hs2
print(r.hlen('hs2')) # Đếm số trường trong hs2
print(r.hkeys('hs2')) # Lấy tất cả các trường trong hs2
print(r.hvals('hs2')) # Lấy tất cả các giá trị trong hs2
print(r.hexists('hs2', 'f4')) # Kiểm tra trường 'f4' có tồn tại trong hs2 hay không
r.hdel('hs2', 'f3') # Loại bỏ trường 'f3' khỏi hs2
r.hset('hs3', 'f1', 1)
r.hincrby('hs3', 'f1', amount=1) # Tăng giá trị của trường 'f1' lên 1 đơn vị
print(r.hgetall('hs3'))