Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

सशर्त रेडिस सेट/केवल नवीनतम संस्करण के साथ अद्यतन?

आप एक लुआ स्क्रिप्ट लिख सकते हैं जो कुंजी के वर्तमान मूल्य की जांच करेगी और यदि मान नए से भिन्न हो तो इसे बदल दें। मैंने सी-प्रोग्राम के माध्यम से लुआ स्क्रिप्ट को लागू करने और आवश्यक कार्य करने के लिए सी में एक उदाहरण जोड़ा है।

  //g++ -g -o condition condition.cpp  -I/usr/local/include/hiredis -L/usr/local/lib  -levent -lhiredis
/*----------------------
  EVAL
  ------------------------*/

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <hiredis/hiredis.h>

using namespace std;

struct timeval _timeout ;
redisContext *_redisContext;
const long long SEC_TO_USEC = 1000000 ;

void connect(const std::string &ip,
    int port,
    int timeoutInUsec )
{
  _timeout.tv_sec = timeoutInUsec / SEC_TO_USEC ;
  _timeout.tv_usec = timeoutInUsec % SEC_TO_USEC ;

  _redisContext = redisConnectWithTimeout(ip.c_str(), port, _timeout);
  if (_redisContext->err)
  {
    std::cout << "Cannot connect to redis server. "
      << " Error : " << _redisContext->errstr
      << std::endl ;
    exit(1);
  }
}

//lua scrip for conditional set
string scriptMultipleCommands =
"local res = redis.call(\"GET\", KEYS[1])              "
"if res == ARGV[1] then                                "
" return nil                                           "
"else                                                  "
"redis.call(\"SET\", KEYS[1],  ARGV[1])                "
"end                                                   "
"local data = redis.call(\"GET\",KEYS[1])              "
"return data                                           ";

void luaCommand(char** argv)
{
  string command;
  command.append( scriptMultipleCommands );
  redisReply *reply =
    ( redisReply * ) redisCommand( _redisContext,
        "EVAL %s %d %s %s ",command.c_str(),1,argv[1],argv[2]);

  cout<<"Redis reply type "<<reply->type<<endl;

  if (reply->type == REDIS_REPLY_ARRAY)
  {
    cout<<"Redis reply size "<<reply->elements<<endl;
    for (int j = 0; j < reply->elements; j++)
    {
      if((j+1) < reply->elements)
      {
        cout<<(reply->element[j]->str)<<","<<(reply->element[j+1]->str)<<endl;
        ++j;
      }
    }
  }
  else if (reply->type == REDIS_REPLY_INTEGER) {
    cout<<"Key value "<<reply->integer<<endl;
  }
  else
    cout<<endl<<"EVAL: "<< reply->str<<endl;

  freeReplyObject(reply);
}

int main(int argc,char** argv)
{
  connect("10.0.0.30",6379,1500000);
  luaCommand(argv);

  return 0;
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. डेटा की तुलना में रेडिस 10 गुना अधिक मेमोरी उपयोग

  2. रेडिस पब/सब ऑन रेल्स

  3. पाइथन में रेडिस बनाम मेमोरी से बेंचमार्किंग पुनर्प्राप्ति (टाइमिट का उपयोग करके)

  4. स्प्रिंग बूट में रेडिस के लिए मल्टीटेनेंसी कैसे लागू करें

  5. क्या मैं दो स्तंभों को एक दूसरे के लिए अद्वितीय बना सकता हूँ? या रेडिस में समग्र प्राथमिक कुंजी का उपयोग करें?