redis命令简介和hiredis的使用

1.数据库的类型

  • 关系型数据库

    • 操作数据库必须使用SQL语句
    • 数据存储再磁盘上
  • 非关系型数据库

    • 操作数据库不使用SQL语句
    • 数据默认存储在内存
  • 关系型数据库和非关系型数据的联合使用

    • RDBMS:关系型数据库管理系统
      • 所用数据默认存储在关系数据库里
      • 客户端访问数据库,有一些数据需要频繁的查数据库
        • 服务器首先将数据从关系型数据中读出来->第一次
          • 再将数据写到redis里面
        • 客户端第二次访问数据库时,直接从redis读出

2.redis

  • redis中的两个角色

    • 服务端
      • redis-server # 默认启动
      • redis-server confFileName # 根据配置文件的设置启动
    • 客户端
      • redis-cli # 默认连接本地 , 绑定了 6379 默认端口的服务器
      • redis-cli -p 端口号
      • redis-cli -h IP 地址 -p 端口 # 连接远程主机的指定端口的 redis
  • redis中常用命令

    • String 类型

 

key -> string value -> string 
# 设置一个键值对->string:string 
SET key value 
# 通过key得到value 
GET key 
# 同时设置一个或多个 key-value 对 
MSET key value [key value ...] 
# 同时查看过个key 
MGET key [key ...] 
# 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾 
# key: hello, value: world, append: 12345 
APPEND key value 
# 返回 key 所储存的字符串值的长度 
STRLEN key 
# 将 key 中储存的数字值减一。 
# 前提, value必须是数字字符串 -"12345" 
DECR key
  • List类型
key -> string 
value -> list 
# 将一个或多个值 value 插入到列表 key 的表头 
LPUSH key value [value ...] 
# 将一个或多个值 value 插入到列表 key 的表尾 (最右边)。 
RPUSH key value [value ...] 
# list中删除元素 
LPOP key # 删除最左侧元素 
RPOP key # 删除最右侧元素 
# 遍历 
LRANGE key start stop
start: 起始位置, 0 stop: 结束位置, -1
# 通过下标得到对应位置的字符串 
LINDEX key index 
# list中字符串的个数 LLEN key
  •  Set类型
key -> string value -> set类型 ("string", "string1") 
# 添加元素 
# 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略 
SADD key member [member ...] 
# 遍历 
SMEMBERS key 
# 差集 
SDIFF key [key ...] 
# 交集 
SINTER key [key ...] 
# 并集 
SUNION key [key ...]
  •  SortedSet 类型

 

key -> string value -> sorted ([socre, member], [socre, member], ...) 
# 添加元素 
ZADD key score member [[score member] [score member] ...] 
# 遍历 
ZRANGE key start stop [WITHSCORES] # -> 升序集合 
ZREVRANGE key start stop [WITHSCORES] # -> 降序集合 
# 指定分数区间内元素的个数 
ZCOUNT key min max

 

  •  Hash类型

 

key ->string value -> hash ([key:value], [key:value], [key:value], ...) 
# 添加数据 
HSET key field value 
# 取数据 
HGET key field 
# 批量插入键值对 
HMSET key field value [field value ...] 
# 批量取数据 
HMGET key field [field ...] 
# 删除键值对 
HDEL key field [field ...]
  • key相关命令
# 删除键值对 
DEL key [key ...] 
# 查看key值 
KEYS pattern 查找所有符合给定模式 pattern 的 key 。 
KEYS * 匹配数据库中所有 key 。 
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。 
KEYS h*llo 匹配 hllo 和 heeeeello 等。 
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 
# 给key设置生存时长 
EXPIRE key seconds 
# 取消生存时长 
PERSIST key 
# key对应的valued类型 
TYPE key
  • redis配置文件

# redis服务器绑定谁之后, 谁就能访问redis服务器 
# 任何客户端都能访问服务器, 需要注释该选项 
bind 127.0.0.1 192.168.1.100 
# 保护模式, 如果要远程客户端访问服务器, 该模式要关闭 
protected-mode yes 
# reids服务器启动时候绑定的端口, 默认为6379 
port 6379 
# 超时时长, 0位关闭该选项, >0则开启 
timeout 0 
# 服务器启动之后不是守护进程 
daemonize no 
# 如果服务器是守护进程, 就会生成一个pid文件 
# ./ -> reids服务器启动时候对应的目录
  • redis数据持久化

    • 持久化的两种方式:
      • ​​​​​​​rdb方式
        • ​​​​​​​​​​​​​​这是一种默认的持久化方式, 默认打开
        • 磁盘的持久化文件xxx.rdb
        • 将内存数据以二进制的方式直接写入磁盘文件
        • 文件比较小, 恢复时间短, 效率高
        • 以用户设定的频率 -> 容易丢失数据
        • 数据完整性相对较低
      • aof方式
        • ​​​​​​​默认是关闭的
        • 磁盘的持久化文件xxx.aof
        • 直接将生成数据的命令写入磁盘文件
        • 文件比较大, 恢复时间长, 效率低
        • 以某种频率 -> 1sec
        • 数据完整性高

3.hiredis的使用

  • hiredis API接口的使用

 

// 连接数据库 
redisContext *redisConnect(const char *ip, int port); 
redisContext *redisConnectWithTimeout(const char *ip, int port, const struct timeval tv);
// 执行redis命令 
void *redisCommand(redisContext *c, const char *format, ...); 
// redisCommand 函数实际的返回值类型 
typedef struct redisReply { 
/* 命令执行结果的返回类型 */ 
    int type; 
/* 存储执行结果返回为整数 */ 
    long long integer; 
/* str变量的字符串值长度 */ 
    size_t len; 
/* 存储命令执行结果返回是字符串, 或者错误信息 */ 
    char *str; 
/* 返回结果是数组, 代表数据的大小 */ 
    size_t elements; 
/* 存储执行结果返回是数组*/ 
struct redisReply **element; 
} redisReply; 
redisReply a[100]; 
element[i]->str
  •  示例程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <hiredis.h>

int main() {
        // 1.连接数据k库
        redisContext* c = redisConnect("127.0.0.1", 6379);
        if (c->err != 0) {
                return -1;
        }
        // 2. 向数据库中存入数据
        void* ptr = redisCommand(c, "hmset user3 username hansy passwd 123456 age 23");
        redisReply* ply = (redisReply*)ptr;
        if (ply->type == 5) {
                printf("state : %s\n", ply->str);
        }
        freeReplyObject(ply);
        // 3. 从数据库中查找数据
        ptr = redisCommand(c, "hgetall user3");
        ply = (redisReply*)ptr;
        if (ply->type == 2) {
                // 4.遍历数组
                int i;
                for (i = 0; i < ply->elements; i += 2) {
                        printf("key : %s, value : %s\n", ply->element[i]->str, ply->element[i + 1]->str);
                }

        }
        freeReplyObject(ply);
        redisFree(c);
        return 0;
}
  • 编译命令
gcc example.c -I /usr/local/include/hiredis/ -lhiredis -o ex
  • 结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值