Bermain Python dan Redis Menggunakan Redis-py

Muhammad Arslan 19 Desember 2016

Bermain Python dan Redis Menggunakan Redis-py

Salah satu bahasa pemrograman yang mendukung Redis adalah Python. Disini kita akan menggunakan library redis-py yang dibuat oleh Andy Mc Curdy. Saat ini star-nya di Github mencapai 4.637 dengan fork sekitar 1.171-an. Package ini merupakan salah satu dari sekian package yang dapat terhubung ke Redis melalui Python yang paling aktif pengembangannya. Oleh karena itu kita akan sedikit bermain dengan Python dan Redis menggunakan package ini.

Instalasi

Untuk instalasi library kita dapat menggunakan PIP. Pertama kita buat terlebih dahulu sebuah folder yang akan menyimpan file percobaan kita:
$ mkdir redis-demo
$ cd redis-demo
$ pip install redis
$ ls -l
Sekarang silahkan buat sebuah file dengan nama connect.py di dalam folder redis-demo. Lalu buat kode berikut di dalam file tersebut:
import redis

try: client = redis.Redis() print "Connection to redis has beend established..." except Exception, e: print "Cannot connect to redis..." print e

Pada kode diatas kita gunakan library yang terpasang oleh PIP. Kemudian kita gunakan class Redis yang dimiliki oleh redis-py. Selanjutnya kita buat client baru dan kita pastikan bahwa koneksi ke Redis sudah menyala. Sekarang kita coba jalankan via Terminal atau command line:

$ python connect.py 
Connection to redis has beend established...

Yeayyy, kamu berhasil terhubung ke Redis melalui Python :D. Sekarang siapkan dirimu untuk operasi - operasi dasar Redis menggunakan redis-py.

Operasi Dasar pada Key

Sebagai perkenalan, sekarang kita akan mencoba method get dan set untuk menyimpan suatu key beserta nilainya. Silahkan buat sebuah file bernama key.py kemudian buat kode berikut di dalamnya:
import redis

client = redis.Redis() client.set('user:123', 'muhammad arslan') user = client.get('user:123')

print user

Bila dijalankan di terminal, maka akan muncul output berikut:

$ python key.py 
muhammad arslan

Kamu juga dapat membubuhkan waktu kadaluwarsa. Dengan menggunakan method setex() kamu dapat menambahkan waktu kadaluwarsa pada suatu key. Dan bila ingin melihat berapa lama lagi key tersebut sampai kadaluwarsa, kamu dapat memeriksanya dengan menggunakan method ttl().

Silahkan buat file dengan nama key_expire.py dan buat kode berikut:

import redis
import time


client = redis.Redis()
client.setex('cart:12345', "{\"nama\":\"shampoo jwitsal\", \"amount\":\"10\"}", 10)

run = True
while run:
    cart = client.get('cart:12345')
    print cart

    ttl = client.ttl('cart:12345')
    print ttl

    if ttl < 0:
        run = False

    time.sleep(1)

Bila kita jalankan kode diatas, kita akan melihat bahwa setiap detik key akan kadaluwarsa:

$ python key_expire.py 
{"nama":"shampoo jwitsal", "amount":"10"}
10
{"nama":"shampoo jwitsal", "amount":"10"}
9
{"nama":"shampoo jwitsal", "amount":"10"}
8
{"nama":"shampoo jwitsal", "amount":"10"}
7
{"nama":"shampoo jwitsal", "amount":"10"}
6
{"nama":"shampoo jwitsal", "amount":"10"}
5
{"nama":"shampoo jwitsal", "amount":"10"}
4
{"nama":"shampoo jwitsal", "amount":"10"}
3
{"nama":"shampoo jwitsal", "amount":"10"}
2
{"nama":"shampoo jwitsal", "amount":"10"}
1
None
None

Kamu pun dapat melakukan operasi increment atau decrement terhadap suatu key yang berisi angka dengan menggunakan method incr() dan decr():

import redis

client = redis.Redis()

client.set('visitor:home', 1)

for i in range(0, 10):
    client.incr('visitor:home')
    print client.get('visitor:home')

print 

for i in range(0, 10):
    client.decr('visitor:home')
    print client.get('visitor:home')

client.delete('visitor:home')

Bila kita jalankan kode diatas, maka kita dapat melihat output berikut:

$ python key_incr_decr.py 
2
3
4
5
6
7
8
9
10
11

10
9
8
7
6
5
4
3
2
1

Operasi Dasar pada Hash

Sekarang kita akan coba mengoperasikan berbagai method terkait Hash. Hash sendiri adalah sebuah struktur kompleks mirip JSON yang dapat menyimpan berbagai key dan value di dalam suatu key. Kita akan mencoba menyimpan sebuah struktur user yang terdiri dari name, email, dan dob. Silahkan buat file dengan nama hash.py kemudian buat kode berikut:
import redis

client = redis.Redis()

client.hset('users:123', 'name', 'arslan') client.hset('users:123', 'email', 'arslan@gmail.com') client.hset('users:123', 'dob', '1990-09-09')

print client.hgetall('users:123')

print client.hget('users:123', 'name') print client.hget('users:123', 'email') print client.hget('users:123', 'dob')

print client.hkeys('users:123') print client.hvals('users:123')

print client.hlen('users:123') print client.hexists('users:123', 'email') print client.hexists('users:123', 'website')

client.hexists('users:123', 'dob') print client.hexists('users:123', 'dob')

client.delete('users:123')

Pada kode diatas, untuk menyimpan suatu key di dalam hash digunakan method hset(). Sedangkan untuk mengambil suatu nilai dari hash digunakan hget(), bila ingin semuanya diambil digunakan hgetall(). Bila ingin mengambil key-nya saja gunakan hkeys(), bila ingin nilainya saja gunakan hvals. Berikutnya ada hexists() untuk memeriksa apakah suatu key ada di dalam hash atau tidak.

Bila kita jalankan maka akan muncul output berikut:

$ python hash.py 
{'dob': '1990-09-09', 'name': 'arslan', 'email': 'arslan@gmail.com'}
arslan
arslan@gmail.com
1990-09-09
['name', 'email', 'dob']
['arslan', 'arslan@gmail.com', '1990-09-09']
3
True
False
True

Operasi Dasar pada List

Sekarang kita akan mencoba melakukan operasi list dengan menggunakan redis-py. Silahkan buat file dengan nama list.py dan buat kode berikut:
import redis

client = redis.Redis()

client.lpush('tim_bola', 'Persib') client.lpush('tim_bola', 'Persipura') client.lpush('tim_bola', 'Arema Cronus') client.lpush('tim_bola', 'Madura United')

print client.lrange('tim_bola', 0, -1)

client.rpush('tim_bola', 'Mitra Kukar') client.rpush('tim_bola', 'Semen Padang') client.rpush('tim_bola', 'Persija') client.rpush('tim_bola', 'PSM Makassar')

print client.lrange('tim_bola', 0, -1) print client.llen('tim_bola')

print client.lindex('tim_bola', 1) print client.lindex('tim_bola', 2) print client.lindex('tim_bola', 4) print client.lindex('tim_bola', 5) print client.lindex('tim_bola', 10) print

client.lset('tim_bola', 1, 'Persipura Jayapura FC') print client.lrange('tim_bola', 0, -1) print

client.lpop('tim_bola') print client.lrange('tim_bola', 0, -1) print

client.rpop('tim_bola') print client.lrange('tim_bola', 0, -1) print

client.delete('tim_bola')

Pada kode diatas, kamu dapat menggunakan lpush atau rpush untuk mengisi suatu list. Untuk menampilkan isi list, dapat menggunakan lrange. Untuk memeriksa panjang list dapat digunakan llen(). Untuk mengakses setiap elemen list dapat menggunakan lindex(). Sedangkan untuk mengubah salah satu isi list digunakanlah lset().

Bila ingin membuang suatu elemen pada list dapat menggunakan lpop() atau rpop().

Bila kita jalankan maka akan muncul output berikut:

$ python list.py 
['Madura United', 'Arema Cronus', 'Persipura', 'Persib']
['Madura United', 'Arema Cronus', 'Persipura', 'Persib', 'Mitra Kukar', 'Semen Padang', 'Persija', 'PSM Makassar']
8
Arema Cronus
Persipura
Mitra Kukar
Semen Padang
None

['Madura United', 'Persipura Jayapura FC', 'Persipura', 'Persib', 'Mitra Kukar', 'Semen Padang', 'Persija', 'PSM Makassar']

['Persipura Jayapura FC', 'Persipura', 'Persib', 'Mitra Kukar', 'Semen Padang', 'Persija', 'PSM Makassar']

['Persipura Jayapura FC', 'Persipura', 'Persib', 'Mitra Kukar', 'Semen Padang', 'Persija']

Operasi Dasar pada Set

Pada dasarnya set hampir sama dengan list, hanya saja di dalam set tidak akan ada nilai yang duplikat. Sehingga bila kita mengisi suatu nilai yang sama berkali - kali, hanya satu saja yang akan disimpan. Sekarang silahkan buat file bernama set.py dan buat kode berikut:
import redis

client = redis.Redis()

client.sadd('myset', 'Andik') client.sadd('myset', 'Sergio') client.sadd('myset', 'Irfan') client.sadd('myset', 'Zola')

client.sadd('employee', 'Andik') client.sadd('employee', 'Sergio') client.sadd('employee', 'Lilipaly') client.sadd('employee', 'Beni') client.sadd('employee', 'Bayu') client.sadd('employee', 'Boaz') client.sadd('employee', 'Kurnia') client.sadd('employee', 'Rizky')

print client.smembers('myset') print client.sismember('myset', 'Andik') print client.sismember('myset', 'Siroch Chatong')

client.srem('myset', 'Zola') print client.smembers('myset')

print client.sdiff('employee', 'myset') print client.sinter('employee', 'myset') print client.sunion('employee', 'myset')

client.delete('myset') client.delete('employee')

Untuk menambah elemen baru pada suatu set, kamu dapat menggunakan sadd(). Untuk mencetak isinya, kamu dapat menggunakan smembers(), sedangkan untuk memeriksa apakah suatu nilai merupakan anggota dari set dapat menggunakan sismember().

Untuk menghapus suatu nilai, dapat digunakan srem(). Dan karena ini merupakan set, kamu dapat melakukan operasi himpunan menggunakan sdiff(), sinter(), dan sunion().

Bila kita jalankan maka akan muncul output berikut:

$ python set.py 
set(['Zola', 'Irfan', 'Sergio', 'Andik'])
True
False
set(['Irfan', 'Sergio', 'Andik'])
set(['Lilipaly', 'Rizky', 'Kurnia', 'Boaz', 'Bayu', 'Beni'])
set(['Sergio', 'Andik'])
set(['Lilipaly', 'Rizky', 'Kurnia', 'Irfan', 'Sergio', 'Andik', 'Boaz', 'Bayu', 'Beni'])

Penutup

Dengan tutorial ini, diharapkan ada output yang dapat dikuasai seputar Python dan Redis. Kamu dapat mulai memanfaatkan Redis untuk mencatat session, caching, atau menggunakannya sebagai sistem queue messaging atau juga menggunakannya sebagai backend untuk Celery. Selain itu, kamu juga mulai dapat bereksperimen Redis dengan memanfaatkan teknologi virtualisasi seperti Docker atau lainnya.

Referensi

  • https://github.com/andymccurdy/redis-py
  • https://redis.io/documentation
(arslan/redis-py/redis)