1.数据类型
Redis支持五种数据类型,分别是String(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。
1.1 String(字符串)
string 是 redis 最基本的类型,可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
1.2 Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
1.3 List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
1.4 Set(集合)
Redis 的 Set 是 string 类型的无序集合,且不允许有重复的成员。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
1.5 Zset(有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
2.Redis keys命令
3. Redis String命令
4.Redis Hash命令
5.Redis List 命令
6.Redis Set 命令
7.Redis Zset 命令
8.Redis 修改密码
config set requirepass 123456 # 添加密码
config get requirepass # 获取密码
config set requirepass "" # 清空(取消)密码
9.Redis函数接口
redisConnect函数
// 函数原型
// 该函数用来连接 Redis 数据库,函数参数为字符串类型的 ip 地址和整型端口号。
// 返回值为 redisContext 类型的指针。
redisContext* redisConnect(const char *ip, int port);
string ip = "192.168.44.100";
int port = 6379;
redisContext* redis = redisConnect(ip.c_str(), port);
if (redis != nullptr && redis->err != 0) {cout << "connect error: " << redis->err << endl;
}
redisCommand函数
// 函数原型
// 该函数执行redis数据库中的操作命令,第一个参数为连接数据库时返回的redisContext*,剩下的参数为变参,
// 就如C标准函数printf函数一样的变参。
// 返回值为void*,一般强制转换成为redisReply类型,以便做进行进一步的处理。
void* redisCommand(redisContext* c, const char* format, ...);
redisReply* reply = (redisReply*)redisCommand(redis, "set key value");
redisReply* reply = (redisReply*)redisCommand(redis, "set key %s", value);
redisReply* reply = (redisReply*)redisCommand(redis, "set %s %s", key, value);redisReply* reply = (redisReply*)redisCommand(redis, "get %s", key);
redisReply* reply = (redisReply*)redisCommand(redis, "get key");// ...
// 返回的reply有几种类型
//错误码
#define REDIS_ERR_IO 1 /* Error in read or write */
#define REDIS_ERR_EOF 3 /* End of file */
#define REDIS_ERR_PROTOCOL 4 /* Protocol error */
#define REDIS_ERR_OOM 5 /* Out of memory */
#define REDIS_ERR_OTHER 2 /* Everything else... *///OK码
#define REDIS_REPLY_STRING 1 //存放在char *str
#define REDIS_REPLY_ARRAY 2 //存储数组
#define REDIS_REPLY_INTEGER 3 //integer存储为数据条数
#define REDIS_REPLY_NIL 4 // null值
#define REDIS_REPLY_STATUS 5 //成功状态码为:"OK" 存放在char *str
#define REDIS_REPLY_ERROR 6 //存放在char *str
void Redis::HMSET(const string& key, const unordered_map<string, string> values)
{unordered_map<string, string>::const_iterator iter = values.begin();cout << key << " " << iter->first << " " << iter->second << endl;this->m_reply = (redisReply*)redisCommand(this->m_connect, "HMSET %s %s %s", key.c_str(), iter->first.c_str(), iter->second.c_str());if(this->m_reply->type == REDIS_REPLY_STATUS)cout << this->m_reply->str << endl;
}
redisCommandArgv函数
// 函数原型
// 和redisCommand函数差不多,但是可以批量的执行命令。
void* redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen);
freeReplyObject函数
// 函数原型
// 用来释放 redisCommand 函数执行后返回的 redisReply 所占用的内存。
void freeReplyObject(void* reply);
redisFree函数
// 函数原型
// 用来断开 redisConnect 函数所产生的连接,并释放 redisContext 的内容。
void redisFree(redisContext* c);