bagaimana cara menyimpan bidang kustom di komponen core
<p>saya mencoba menambahkan satu bidang sederhana ke setiap item #\_\_content, dan saya telah dengan sangat hati-hati mengikuti tutorial di <a href="http://docs.joomla.org/adding\_custom\_fields\_to\_core\_components\_using\_a\_plugin">menambahkan bidang kustom ke komponen inti</a> , mengganti "konten" untuk "kontak". saya sekarang memiliki plugin yang dapat diinstal yang berhasil menyertakan tab/bidang pada formulir pengeditan item konten admin, dan berfungsi dengan sangat baik, kecuali untuk fitur "penghematan" yang sial itu.</p><p>satu-satunya referensi untuk menyimpan adalah (sekali lagi, konten alih-alih kontak):</p><blockquote> <p>kolom tambahan diambil dari bentuk file/contact.xml di direktori plugin. penting bahwa bidang-bidang ini dalam elemen bidang dengan properti nama diatur ke "params". jika anda tidak menyetel nama properti ini, bidang akan muncul di situs admin tetapi nilainya tidak akan disimpan.</p> </blockquote><p>fakta bahwa catatan peringatan ini ada, menunjukkan kepada saya bahwa joomla harus mengetahui bidang-bidang yang ada, dan kode inti menanganinya, tetapi karena itu tidak menyimpan, saya bertanya-tanya apakah ada peristiwa lain yang harus saya tambahkan.</p><p>inilah bidang sederhana yang saya butuhkan - tidak terlihat oleh pengguna, namun tetap penting, dan tidak ada yang dekat dengan kebutuhan cck untuk menyimpannya.<br> <strong> <em> apa yang salah/hilang yang mencegah bidang khusus diselamatkan?</em> </strong></p><p><em> pembaruan: berharap melampaui harapan bahwa bidang khusus disimpan dalam database, saya menambahkan kolom ke tabel #\_\_content dengan nama yang sama dan mencoba - tidak berhasil.</em></p><p><strong> gdp.php </strong></p><pre><code>class plgcontentgdp extends jplugin { protected $autoloadlanguage = true; function oncontentprepareform($form, $data) { $app = jfactory::getapplication(); $option = $app-&gt;input-&gt;get('option'); switch($option) { case 'com\_content': if ($app-&gt;isadmin()) { jform::addformpath(\_\_dir\_\_ . '/forms'); $form-&gt;loadfile('content', false); } return true; } return true; } } </code></pre><p><strong>/form/content.xml </strong></p><pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;form&gt; &lt;fields name="params" &gt; &lt;fieldset name="params" &gt; &lt;field name="content\_myfield" type="text" label="plg\_content\_gdp\_myfield" /&gt; &lt;/fieldset&gt; &lt;/fields&gt; &lt;/form&gt; </code></pre><p><strong> rendered html </strong> (tanpa label)</p><pre><code>&lt;div class="tab-pane active" id="attrib-params"&gt; &lt;div class="control-group "&gt; &lt;div class="controls"&gt; &lt;input type="text" value="" id="jform\_params\_content\_myfield" name="jform[params][content\_myfield]" class="" aria-invalid="false" &gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; </code></pre>
<p>aha! moment - #\_\_content tidak lagi memiliki kolom <code>params</code>, jadi penyesuaian berikut harus dibuat agar plugin dapat bekerja dengan komponen/tabel dengan <code>attribs</code> alih-alih <code>params</code> (yang tampaknya hanya menjadi #\_\_content pada v3.2):</p><ol> <li>ubah nama <code>fields</code> menjadi "attribs"</li> <li>ubah nama <code>fieldset</code> menjadi sesuatu yang unik (saya menggunakan nama plugin)</li> <li>tambahkan string bahasa untuk tab pada halaman pengeditan konten</li> </ol><p><strong>/ form/content.xml</strong></p><pre><code>&lt;form&gt; &lt;fields name="attribs" &gt; &lt;fieldset name="gdp" &gt; &lt;field name="myfield" type="text" label="plg\_content\_gdp\_myfield" /&gt; &lt;/fieldset&gt; &lt;/fields&gt; &lt;/form&gt; </code></pre><p><strong>en-gb.plg\_content\_pass.ini</strong></p><pre><code>com\_content\_gdp\_fieldset\_label="my custom fields" </code></pre>
<p>seperti yang saya jawab <a href="https://dba.stackexchange.com/questions/2820/why-dont-my-my-cnf-settings-work/2822#2822">di sini</a> , anda dapat menambahkan bagian untuk setiap pengguna/host/db yang anda hubungkan menggunakan sintaks di <code>~/.my.cnf</code> anda:</p><pre><code>[clienthost1] # note: client + host1 user=myuser password=mypass database=dbname host=server.location.com </code></pre><p>setelah ini ada di pengguna anda <code>.my.cnf</code>, anda dapat menggunakannya dengan melakukan ini pada baris perintah:</p><pre><code>$ mysql --defaults-group-suffix=host1 </code></pre> <p>sepertinya tidak ada cara untuk memberikan <em>integrasi aplikasi -&gt; nama domain</em> dan <em>federasi -&gt; penyedia identitas</em> melalui cloudformation.</p><p>saya hanya menemukan referensi untuk <a href="https://docs.aws.amazon.com/awscloudformation/latest/userguide/aws-resource-cognito-userpoolclient.html"><strong>user pool client</strong></a> (<em>pengaturan umum -&gt; klien aplikasi</em>) tetapi tidak akan mengonfigurasi <em>integrasi aplikasi -&gt; pengaturan klien aplikasi</em>.</p><p>jika anda perlu mengotomatisasi proses penyediaan <a href="https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-domain.html"><em>nama domain</em></a> , <a href="https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-identity-provider.html"><em>penyedia identitas</em></a> dan <a href="https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html"><em>pengaturan klien aplikasi</em></a> untuk kelompok pengguna , anda dapat melakukannya dengan membuat skrip khusus (aws cli) atau lambda (aws sdk) yang harus dilakukan setelah penyebaran tumpukan.</p><p><br/> <strong>perbarui</strong></p><p>lihatlah <a href="https://github.com/rosberglinhares/cloudformationcognitocustomresources"><strong>contoh luar biasa</strong></a> ( <a href="https://stackoverflow.com/a/50980165/9576697">jawaban di bawah</a> ) yang menunjukkan penggunaan <a href="https://docs.aws.amazon.com/awscloudformation/latest/userguide/template-custom-resources.html">cloudformation custom resources</a> dengan lambda.</p> <p>saya dari api gateway.</p><p>sayangnya, solusi terbaik yang kami miliki sampai sekarang adalah, untuk menyuntikkan header kustom origin di cloudfront dan memvalidasi itu dalam customizer (opsi 4 dalam pertanyaan anda).</p><p>kami sudah menyadari keterbatasan ini dan solusi yang tidak terlalu bagus. kami mencari untuk memberikan integrasi waf yang lebih baik di masa depan, tetapi kami tidak memiliki eta.</p> <p>aku akan menusuk pertanyaanmu kemarin, tapi kupikir aku harus memikirkannya terlebih dahulu.</p><p>saya benar-benar tidak bisa memberi tahu anda apa "fungsi lain" yang harus anda berikan untuk pengguna anda. saya tidak terpisah dari tim anda. sepertinya anda memaku sebagian besar dari mereka, tetapi pada akhirnya saya tidak dapat membuat keputusan atau memberikan saran ketika kami benar-benar tidak memiliki perincian lengkap tentang apa yang dilakukan aplikasi anda di luar yang memungkinkan mereka membuat formulir.</p><p>namun, saya dapat mengarahkan anda ke beberapa aplikasi lain di luar sana yang dapat memberi anda beberapa gagasan tentang fungsi apa yang dapat anda tambahkan.</p><ul> <li> <a href="http://pencil.evolus.vn/en-us/home.aspx">pensil</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li> <a href="http://iplotz.com/">iplotz</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li>google - <a href="http://googlesystem.blogspot.com/2007/02/learning-googles-keyboard-shortcuts.html">ikhtisar pintasan</a> </li> <li>gmail - <a href="http://mail.google.com/support/bin/answer.py?hl=en&amp;answer=6594">daftar pintasan</a> </li> <li>google documents - <a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;answer=66280">daftar pintasan</a> </li> <li> <a href="http://wufoo.com/">wufoo</a> - pembuat formulir online populer, lihat apa yang mereka lakukan</li> </ul><p>anda bisa membuat semua jenis pintasan keyboard gila untuk aplikasi anda. namun, anda mungkin ingin tetap menggunakan yang paling umum digunakan, yang sepertinya sudah anda daftarkan. jika anda akan membuat pintasan baru, pastikan pintasannya intuitif bagi pengguna.</p><p>saya harap tautan itu terbukti spark beberapa ide untuk anda dan tim anda, dan maaf saya tidak bisa memberikan contoh yang tepat.</p> Upload File kotak adalah di mana kita're saat ini jika anda don't ingin melibatkan teknologi lainnya seperti Flash, Java atau ActiveX.


Dengan HTML anda cukup banyak terbatas pada pengalaman anda've dijelaskan (tidak ada progress bar, double menyampaikan, dll). Jika anda bersedia untuk menggunakan beberapa javascript, anda dapat memecahkan beberapa masalah dengan memberikan umpan balik yang upload sedang berlangsung dan bahkan [menunjukkan kemajuan upload](http://www.raditha.com/php/progress.php) (ini adalah hack karena anda tidak't harus melakukan full round-trip ke server dan kembali, tapi setidaknya ia bekerja).


Jika anda bersedia untuk menggunakan Flash (yang tersedia cukup banyak di mana saja dan pada banyak platform), anda dapat mengatasi hampir semua masalah ini. Cepat googling muncul [dua](http://www.downloadsquad.com/2006/11/16/swfupload-open-source-flash-multi-file-upload/) [seperti](http://www.codeproject.com/KB/aspnet/FlashUpload.aspx) komponen, keduanya gratis *dan* open source. Saya tidak pernah menggunakan salah satu dari mereka, tapi mereka terlihat baik. BTW, Flash isn't tanpa masalah yang baik, misalnya ketika menggunakan multi-file uploader untuk slide share, browser yang terus-menerus menerjang pada saya :-(


Mungkin solusi terbaik saat ini adalah untuk mendeteksi secara dinamis jika pengguna memiliki Flash, dan jika itu's kasus, memberikan versi flash uploader, sementara masih membuat itu mungkin untuk memilih HTML dasar satu.


HTH <p><s>satu-satunya waktu penyimpanan dibagi antara produk google lainnya adalah ketika ruang tambahan dibeli: <a href="https://www.google.com/accounts/purchasestorage">https://www.google.com/accounts/purchasestorage</a> </s></p><p><s>di google picasa <a href="http://picasa.google.com/support/bin/answer.py?answer=39567">bagian bantuan tentang penyimpanan google</a> mereka mengatakan bahwa "ruang penyimpanan gratis khusus untuk setiap produk. album web picasa menawarkan penyimpanan 1 gb hanya untuk foto dan video. gmail menyediakan 7+ gb (dan menghitung) yang disediakan hanya untuk pesan gmail. docs memberi anda 1 gb untuk semuanya: semua dokumen, spreadsheet, presentasi, dan file yang diunggah. penyimpanan gratis dari satu produk tidak dapat digunakan oleh atau ditransfer ke produk lain. "</s></p><p><strong> - edit - </strong></p><p>seperti yang ditunjukkan oleh al everett <a href="http://gmailblog.blogspot.com/2013/05/bringing-it-all-together-15-gb-now.html">penyimpanan sekarang digabungkan</a> antara properti google.</p> widget ini sangat cocok apabila diletakkan dibagian akhir postingan maupun dibagian sidebar blog. cara kerja dari widget berlangganan ini adalah memanfaatkan fitu dari feedburner yang akan mengirmkan pesan yang berisi artikel terbaru kepada pelanggan yang telah berlangganan memasukkan email mereka melalui widget berlangganan. dengan memasang widget berlangganan ini berpotensi dapat meningkatkan jumlah visitor pada blog, namun tentunya harus diimbangi dengan artikel yang menarik dan berkualitas. supaya pelanggan tidak merasa sia-sia berlangganan pada blog kalian. <p>arsitektur innodb menuntut penggunaan empat tipe dasar halaman info</p><ul> <li>halaman data tabel</li> <li>halaman indeks tabel</li> <li>tabel metadata</li> <li> <a href="http://en.wikipedia.org/wiki/multiversion\_concurrency\_control"><strong> [~ # ~] mvcc [~ # ~] </strong></a> data (untuk mendukung isolasi transaksi dan <a href="http://en.wikipedia.org/wiki/acid"><strong> kepatuhan acid </strong></a> ) <ul> <li>segmen kembalikan</li> <li>batalkan spasi</li> <li>double write buffer (penulisan latar belakang untuk mencegah ketergantungan pada caching os)</li> <li>masukkan buffer (mengelola perubahan pada indeks sekunder yang tidak unik)</li> </ul> </li> </ul><p> <a href="http://www.scribd.com/doc/31337494/xtradb-innodb-internals-in-drawing"><strong> <em> lihat representasi pictorial dari ibdata1</em> </strong></a> </p><p>secara default, <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan. ini menyebabkan keempat jenis halaman info mendaratkan satu file bernama ibdata1. banyak orang mencoba menyebar data dengan membuat banyak file ibdata. ini dapat menyebabkan fragmentasi data dan halaman indeks.</p><p>inilah sebabnya saya sering <a href="https://stackoverflow.com/a/4056261/491757">merekomendasikan untuk membersihkan infrastruktur innodb, menggunakan file ibdata1 default dan tidak lebih</a> .</p><p>menyalin sangat berbahaya karena infrastruktur di mana innodb bekerja. ada dua infrastruktur dasar</p><ul> <li>innodb\_file\_per\_table dinonaktifkan</li> <li>innodb\_file\_per\_table diaktifkan</li> </ul><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan, semua jenis info innodb ini tinggal di dalam ibdata1. satu-satunya manifestasi dari setiap tabel innodb di luar ibdata1 adalah file .frm dari tabel innodb. menyalin semua data innodb sekaligus membutuhkan menyalin semua/var/lib/mysql.</p><p>menyalin tabel innodb individu sama sekali tidak mungkin. anda harus membuang mysql untuk mengekstrak dump tabel sebagai representasi logis dari data dan definisi indeks yang sesuai. anda kemudian akan memuat dump itu ke database lain di server yang sama atau server lain.</p><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan, data tabel dan indeksnya tinggal di folder database di sebelah file .frm. misalnya, untuk tabel db1.mytable, manifestasi dari tabel innodb di luar ibdata1 adalah:</p><ul> <li><code>/var/lib/mysql/db1/mytable.frm</code></li> <li><code>/var/lib/mysql/db1/mytable.ibd</code></li> </ul><h1>tablespace sistem <code>ibdata1</code></h1><p>semua metadata untuk db1.mytable masih berada di ibdata1 dan <em> sama sekali tidak ada jalan lain</em>. redo log dan data mvcc juga masih hidup dengan ibdata1.</p><p>ketika datang ke tabel fragmentasi, inilah yang terjadi pada ibdata1:</p><ul> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan </strong>: anda dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code>. ini menghasilkan /var/lib/mysql/db1/mytable.ibd secara fisik lebih kecil tanpa fragmentasi.</li> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan </strong>: anda tidak dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code> karena berada dengan ibdata1. menjalankan perintah mana pun sebenarnya, membuat tabel berdekatan dan lebih cepat untuk membaca dan menulis. sayangnya, itu terjadi pada akhir ibdata1. ini membuat ibdata1 tumbuh dengan cepat. <a href="https://stackoverflow.com/a/4056261/491757">ini sepenuhnya dibahas di pos pembersihan innodb saya</a> .</li> </ul><h1>peringatan (atau bahaya sebagai <a href="http://www.youtube.com/watch?v=rg0ochx16dg&amp;feature=related">robot akan mengatakan dalam lost in space</a> )</h1><p>jika anda berpikir untuk hanya menyalin file .frm dan .ibd, anda sejalan dengan dunia yang menyakitkan. menyalin file .frm dan .ibd dari tabel innodb hanya baik <strong> <em> jika dan hanya jika anda dapat menjamin bahwa id tablespace dari file .ibd cocok persis dengan entri tablespace id di metadata dari file ibdata1</em> </strong>.</p><p>saya menulis dua posting di dba stackexchange tentang konsep id tablespace ini</p><ul> <li> <a href="https://dba.stackexchange.com/questions/9500/table-compression-in-innodb/9555#9555">kompresi tabel dalam innodb?</a> (di bawah judul 'memulihkan database')</li> <li> <a href="https://dba.stackexchange.com/questions/6268/how-to-recover-an-innodb-table-whose-files-were-moved-around/6269#6269">cara memulihkan tabel innodb yang file-nya dipindahkan</a> </li> </ul><p>berikut ini adalah tautan yang sangat baik tentang cara memasang kembali file .ibd ke ibdata1 jika id tablespace tidak cocok: <a href="http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file">http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in- file</a> . setelah membaca ini, anda harus segera menyadari bahwa menyalin file .ibd benar-benar gila.</p><p>untuk innodb, anda hanya perlu memindahkan sesuatu ini</p><pre><code>create table db2.mytable like db1.mytable; insert into db2.mytable select * from db1.mytable; </code></pre><p>untuk membuat salinan tabel innodb.</p><p>jika anda memigrasikannya ke server db lain, gunakan mysqldump.</p><p>sehubungan dengan mencampur semua tabel innodb dari semua database, saya benar-benar dapat melihat kebijaksanaan dalam melakukannya. di perusahaan hosting db/web perusahaan saya, saya memiliki satu klien mysql yang memiliki tabel di satu basis data yang batasannya dipetakan ke tabel lain di basis data lain dalam instance mysql yang sama. dengan satu repositori metadata yang umum, itu membuat dukungan transaksional dan pengoperasian mvcc mungkin di beberapa basis data.</p> <p>saya tidak yakin di sini, tapi saya akan mengambil risiko. saya pikir masalah anda mungkin dengan catatan <code>deny control</code> anda. lihat <a href="http://msdn.microsoft.com/en-us/library/ms188338.aspx">di sini</a> sekitar setengah halaman:</p><p><strong> menolak izin kontrol pada database secara implisit menolak izin connect pada database. prinsipal yang ditolak izin kontrol pada database tidak akan dapat terhubung ke database itu. </strong></p><p>saya menyadari bahwa contoh adalah untuk basis data, tetapi gunakan satu tingkat lagi. a <code>deny control</code> di atas tabel akan menolak <em> semua</em> hak istimewa di atasnya, saya menduga. lakukan <code>revoke control</code> untuk menyingkirkannya dan lihat apakah itu memperbaiki masalah anda.</p><p>jika demikian, anda harus menempatkan pengguna dalam peran basis data atau menolak mereka hak istimewa eksplisit terhadap tabel.</p> <p>tidak, redis lebih dari sekadar cache. </p><p>seperti cache, redis menyimpan kunci = pasangan nilai. tetapi tidak seperti cache, redis memungkinkan anda beroperasi pada nilai-nilai. ada 5 tipe data dalam redis - string, set, hash, daftar dan set diurutkan. setiap tipe data memperlihatkan berbagai operasi.</p><p>cara terbaik untuk memahami redis adalah dengan memodelkan suatu aplikasi tanpa memikirkan bagaimana anda akan menyimpannya dalam database. </p><p>katakanlah kita ingin membangun stackoverflow.com. untuk membuatnya sederhana, kita membutuhkan pertanyaan, jawaban, tag, dan pengguna.</p><h2>pertanyaan modeling, pengguna dan jawaban</h2><p>setiap objek dapat dimodelkan sebagai peta. misalnya, pertanyaan adalah peta dengan bidang {id, judul, date\_asked, suara, asked\_by, status}. demikian pula, sebuah jawaban adalah peta dengan bidang {id, question\_id, answer\_text, answer\_by, suara, status}. demikian pula, kita dapat memodelkan objek pengguna.</p><p>masing-masing benda ini dapat langsung disimpan di redis sebagai hash. untuk menghasilkan id unik, anda dapat menggunakan perintah kenaikan atom. sesuatu seperti ini - </p><pre><code>$ hincrby unique\_ids question 1 (integer) 1 $ hmset question:1 title "is redis just a cache?" asked\_by 12 votes 0 ok $ hincrby unique\_ids answer 1 (integer) 1 $ hmset answer:1 question\_id 1 answer\_text "no, its a lot more" answered\_by 15 votes 1 ok </code></pre><h2>menangani suara</h2><p>sekarang, setiap kali seseorang menjawab pertanyaan atau jawaban, anda hanya perlu melakukan ini </p><pre><code>$ hincrby question:1 votes 1 (integer) 1 $ hincrby question:1 votes 1 (integer) 2 </code></pre><h2>daftar pertanyaan untuk beranda</h2><p>selanjutnya, kami ingin menyimpan pertanyaan terbaru untuk ditampilkan di beranda. jika anda sedang menulis program .net atau java, anda akan menyimpan pertanyaan dalam daftar. ternyata, itu adalah cara terbaik untuk menyimpan ini di redis juga. </p><p>setiap kali seseorang mengajukan pertanyaan, kami menambahkan idnya ke daftar. </p><pre><code>$ lpush questions question:1 (integer) 1 $ lpush questions question:2 (integer) 1 </code></pre><p>sekarang, ketika anda ingin merender beranda, anda meminta redis untuk 25 pertanyaan terbaru. </p><pre><code>$ lrange questions 0 24 1) "question:100" 2) "question:99" 3) "question:98" 4) "question:97" 5) "question:96" ... 25) "question:76" </code></pre><p>sekarang setelah anda memiliki id, ambil item dari redis menggunakan pipelining dan menunjukkannya kepada pengguna.</p><h2>pertanyaan dengan tag, diurut berdasarkan pilihan</h2><p>selanjutnya, kami ingin mengambil pertanyaan untuk setiap tag. tetapi so memungkinkan anda untuk melihat pertanyaan pilihan teratas, pertanyaan baru atau pertanyaan yang tidak dijawab di bawah setiap tag.</p><p>untuk memodelkan ini, kami menggunakan fitur set diurutkan redis. set diurutkan memungkinkan anda untuk mengaitkan skor dengan setiap elemen. anda kemudian dapat mengambil elemen berdasarkan skor mereka. </p><p>ayo maju dan lakukan ini untuk tag redis </p><pre><code>$ zadd questions\_by\_votes\_tagged:redis 2 question:1 (integer) 1 $ zadd questions\_by\_votes\_tagged:redis 10 question:2 (integer) 1 $ zadd questions\_by\_votes\_tagged:redis 5 question:613 (integer) 1 $ zrange questions\_by\_votes\_tagged:redis 0 5 1) "question:1" 2) "question:613" 3) "question:2" $ zrevrange questions\_by\_votes\_tagged:redis 0 5 1) "question:2" 2) "question:613" 3) "question:1" </code></pre><p>apa yang kita lakukan di sini? kami menambahkan pertanyaan ke set yang diurutkan, dan mengaitkan skor (jumlah suara) untuk setiap pertanyaan. setiap kali sebuah pertanyaan dibatalkan, kami akan menambah nilainya. dan ketika pengguna mengklik &quot;pertanyaan yang ditandai redis, disortir berdasarkan suara&quot;, kami hanya melakukan <code>zrevrange</code> dan mendapatkan kembali pertanyaan teratas.</p><h2>pertanyaan waktu nyata tanpa halaman yang menyegarkan</h2><p>dan akhirnya, fitur bonus. jika anda membiarkan halaman pertanyaan terbuka, so akan memberi tahu anda ketika pertanyaan baru ditambahkan. bagaimana redis bisa membantu di sini?</p><p>redis memiliki model pub-sub. anda dapat membuat saluran, misalnya &quot;channel\_questions\_tagged\_redis&quot;. anda kemudian <code>subscribe</code> pengguna ke saluran tertentu. ketika pertanyaan baru ditambahkan, anda akan <code>publish</code> pesan ke saluran itu. semua pengguna akan mendapatkan pesan. anda harus menggunakan teknologi web seperti soket atau komet web untuk benar-benar mengirimkan pesan ke browser, tetapi redis membantu anda dengan semua pipa ledeng di sisi server.</p><h2>kegigihan, keandalan, dll.</h2><p>tidak seperti cache, redis tetap menyimpan data pada hard disk. anda dapat memiliki pengaturan master-slave untuk memberikan keandalan yang lebih baik. untuk mempelajari lebih lanjut, buka topik kegigihan dan replikasi di sini - <a href="http://redis.io/documentation">http://redis.io/documentation</a> </p>