Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Menyiapkan Redis di Webfaction

Pengantar

Karena batasan lingkungan khusus dari server Webfaction, instruksi penginstalan tidak semudah yang diharapkan. Namun demikian pada akhirnya Anda akan memiliki server Redis yang berfungsi penuh yang tetap menyala bahkan setelah reboot. Saya pribadi menginstal Redis dengan prosedur berikut sekitar setengah tahun yang lalu dan sejak itu telah berjalan dengan sempurna. Sedikit peringatan, setengah tahun bukanlah waktu yang lama, terutama karena server belum banyak digunakan.

Instruksi terdiri dari lima bagian:Instalasi, Pengujian, Memulai Server, Mengelola Server, dan Menjaga Server Tetap Berjalan.

Pemasangan

Masuk ke shell Webfaction Anda

ssh [email protected]

Unduh Redis terbaru dari situs unduhan Redis.

> mkdir -p ~/src/
> cd ~/src/
> wget http://download.redis.io/releases/redis-2.6.16.tar.gz
> tar -xzf redis-2.6.16.tar.gz
> cd redis-2.6.16/

Sebelum membuat, lihat apakah server Anda Linux 32 atau 64 bit. Skrip instalasi tidak menangani lingkungan 32 bit dengan baik, setidaknya pada mesin CentOS 5 Webfaction. Perintah untuk bit adalah uname -m . Jika Linux 32 bit hasilnya akan menjadi i686, jika 64 bit maka x86_64. Lihat jawaban ini untuk detailnya.

> uname -m
i686

Jika server Anda 64 bit (x86_64) maka cukup buat saja.

> make

Tetapi jika server Anda 32 bit (i686) maka Anda harus melakukan sedikit hal tambahan. Ada perintah make 32bit tetapi menghasilkan kesalahan. Edit satu baris dalam skrip instalasi untuk membuat make 32bit untuk bekerja.

> nano ~/src/redis-2.6.16/src/Makefile

Ubah baris 214 dari ini

$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"

untuk ini

$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"

dan simpan. Kemudian jalankan make dengan flag 32bit.

> cd ~/src/redis-2.6.16/  ## Note the dir, no trailing src/
> make 32bit

Eksekusi dibuat ke dalam direktori ~/src/redis-2.6.16/src/ . Yang dapat dieksekusi termasuk redis-cli , redis-server , redis-benchmark dan redis-sentinel .

Pengujian (opsional)

Seperti yang disarankan oleh keluaran penginstalan, alangkah baiknya untuk memastikan bahwa semuanya berfungsi seperti yang diharapkan dengan menjalankan pengujian.

Hint: To run 'make test' is a good idea ;)

Sayangnya pengujian membutuhkan tlc8.6.0 untuk diinstal yang bukan default setidaknya pada mesin web223. Jadi Anda harus menginstalnya terlebih dahulu, dari sumbernya. Lihat catatan instalasi Tcl/Tk dan kompilasi catatan.

> cd ~/src/
> wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz
> tar -xzf tcl8.6.0-src.tar.gz
> cd tcl8.6.0-src/unix/
> ./configure --prefix=$HOME
> make
> make test # Optional, see notes below
> make install

Menguji Tcl dengan make test akan memakan waktu dan juga akan gagal karena batasan lingkungan WebFaction. Saya sarankan Anda melewatkan ini.

Sekarang kami telah menginstal Tlc, kami dapat menjalankan tes Redis. Pengujian akan memakan waktu lama dan juga menggunakan memori yang cukup besar untuk sementara.

> cd ~/src/redis-2.6.16/
> make test

Setelah tes, Anda siap untuk melanjutkan.

Memulai Server

Pertama, buat aplikasi khusus melalui Panel Kontrol Webfaction (Aplikasi khusus (mendengarkan di port)). Beri nama misalnya foodedis . Perhatikan bahwa Anda tidak perlu membuat domain atau situs web untuk aplikasi jika Redis hanya digunakan secara lokal, yaitu dari host yang sama.

Kedua, buat catatan tentang nomor port soket yang diberikan untuk aplikasi. Biarkan contohnya menjadi 23015 .

Salin executable yang dikompilasi sebelumnya ke direktori aplikasi. Anda dapat memilih untuk menyalin semua atau hanya yang Anda butuhkan.

> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .

Salin juga contoh file konfigurasi. Anda akan segera mengubahnya.

> cp ~/src/redis-2.6.16/redis.conf .

Sekarang Redis sudah bisa dijalankan. Ada masalah pasangan sekalipun. Pertama, port Redis default 6379 mungkin sudah digunakan. Kedua, bahkan jika portnya gratis, ya, Anda dapat memulai server tetapi berhenti berjalan pada saat yang sama saat Anda keluar dari shell. Untuk yang pertama redis.conf harus diedit dan yang kedua, Anda memerlukan daemon yang juga diselesaikan dengan mengedit redis.conf.

Redis dapat berjalan sendiri dalam mode daemon. Untuk itu Anda perlu menyiapkan tempat di mana daemon menyimpan id prosesnya, PID. Biasanya pidfiles disimpan di /var/run/ tetapi karena batasan lingkungan Anda harus memilih tempat untuk mereka di direktori home Anda. Karena alasan yang dijelaskan nanti di bagian Mengelola Server, pilihan yang baik adalah meletakkan pidfile di bawah direktori yang sama dengan executable. Anda tidak perlu membuat file sendiri, Redis membuatnya untuk Anda secara otomatis.

Sekarang buka redis.conf untuk mengedit.

> cd ~/webapps/fooredis/
> nano redis.conf

Ubah konfigurasi dengan cara berikut.

  • daemonize no -> daemonize yes
  • pidfile /var/run/redis.pid -> pidfile /home/foouser/webapps/fooredis/redis.pid
  • port 6379 -> port 23015

Sekarang akhirnya, mulai server Redis. Tentukan file conf sehingga Redis mendengarkan port yang tepat dan berjalan sebagai daemon.

> cd ~/webapps/fooredis/
> ./redis-server redis.conf
> 

Lihat itu berjalan.

> cd ~/webapps/fooredis/
> ./redis-cli -p 23015
redis 127.0.0.1:23015> SET myfeeling Phew.
OK
redis 127.0.0.1:23015> GET myfeeling
"Phew."
redis 127.0.0.1:23015> (ctrl-d)
>

Hentikan server jika Anda mau.

> ps -u $USER -o pid,command | grep redis
  718 grep redis
10735 ./redis-server redis.conf
> kill 10735

atau

> cat redis.pid | xargs kill

Mengelola Server

Untuk kemudahan penggunaan dan sebagai pekerjaan persiapan untuk bagian selanjutnya, buat skrip yang membantu membuka klien dan memulai, memulai ulang, dan menghentikan server. Solusi mudah adalah dengan menulis makefile. Saat menulis makefile, ingatlah untuk menggunakan tab daripada spasi.

> cd ~/webapps/fooredis/
> nano Makefile

# Redis Makefile
client cli:
    ./redis-cli -p 23015

start restart:
    ./redis-server redis.conf

stop:
    cat redis.pid | xargs kill

Aturannya cukup jelas. Keistimewaan dari aturan kedua adalah saat dalam mode daemon, memanggil ./redis-server tidak membuat proses baru jika sudah ada proses yang berjalan.

Aturan ketiga memiliki beberapa kebijaksanaan yang tenang di dalamnya. Jika redis.pid tidak disimpan di bawah direktori fooredis tetapi misalnya ke /var/run/redis.pid maka tidak akan mudah untuk menghentikan server. Ini terutama benar jika Anda menjalankan beberapa instance Redis secara bersamaan.

Untuk menjalankan aturan:

> make start

Menjaga Server Tetap Berjalan

Anda sekarang memiliki instance Redis yang berjalan dalam mode daemon yang memungkinkan Anda keluar dari shell tanpa menghentikannya. Ini masih belum cukup. Bagaimana jika prosesnya macet? Bagaimana jika mesin server di-boot ulang? Untuk menutupi ini, Anda harus membuat dua cronjobs.

> export EDITOR=nano
> crontab -e

Tambahkan dua baris berikut dan simpan.

*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start

Yang pertama memastikan setiap lima menit bahwa fooredis berjalan. Seperti yang dikatakan di atas ini tidak memulai proses baru jika sudah berjalan. Yang kedua memastikan bahwa fooredis dimulai segera setelah mesin server reboot dan jauh sebelum aturan pertama dimulai.

Beberapa metode yang lebih halus untuk ini dapat digunakan, misalnya selamanya. Lihat juga utas Komunitas Webfaction ini untuk mengetahui topik selengkapnya.

Kesimpulan

Sekarang Anda memilikinya. Banyak hal yang dilakukan tetapi mungkin lebih banyak lagi yang akan datang. Hal-hal yang mungkin ingin Anda lakukan di masa mendatang yang tidak tercakup di sini mencakup hal-hal berikut.

  • Menyetel kata sandi, mencegah pengguna lain mem-flush database Anda. (Lihat redis.conf)
  • Membatasi penggunaan memori (Lihat redis.conf)
  • Mencatat penggunaan dan kesalahan (Lihat redis.conf)
  • Mencadangkan data sesekali.

Ada ide, komentar, atau koreksi?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pengantar Redis

  2. Redis store key tanpa nilai

  3. DB relasional dalam memori?

  4. blpop berhenti memproses antrian setelah beberapa saat

  5. Mengapa SQLite lebih cepat daripada Redis dalam benchmark sederhana ini?