【自己总结】Redis的总结的知识点:

接触Redis了,今天总结一波。


  • Redis的基本数据类型:

    • String:

      • 常⽤命令: set,get,decr,incr,mget 等。
        • String 数据结构是简单的 key-value 类型, value 其实不仅可以是 String ,也可以是数字。 常规 key
          value 缓存应⽤; 常规计数:微博数,粉丝数等。
    • Hash:
      • 常⽤命令: hget,hset,hgetall 等。
        • hash 是⼀个 string 类型的 field value 的映射表, hash 特别适合⽤于存储对象,后续操作的时
          候,你可以直接仅仅修改这个对象中的某个字段的值。 ⽐如我们可以 hash 数据结构来存储⽤户信
          息,商品信息等等。⽐如下⾯我就⽤ hash 类型存放了我本⼈的⼀些信息:
    • List:
      • 常⽤命令 : lpush,rpush,lpop,rpop,lrange
        • list 就是链表, Redis list 的应⽤场景⾮常多,也是 Redis 最重要的数据结构之⼀,⽐如微博的关注
          列表,粉丝列表,消息列表等功能都可以⽤ Redis list 结构来实现。
          Redis list 的实现为⼀个双向链表,即可以⽀持反向查找和遍历,更⽅便操作
    • Set:
      • 常⽤命令: sadd,spop,smembers,sunion
        • set 对外提供的功能与 list 类似是⼀个列表的功能,特殊之处在于 set 是可以⾃动排重的。
          当你需要存储⼀个列表数据,⼜不希望出现重复数据时, set 是⼀个很好的选择,并且 set 提供了判断某 个成员是否在⼀个set 集合内的重要接⼝,这个也是 list 所不能提供的。可以基于 set 轻易实现交集、 并集、差集的操作。
    • Sorted Set:
      • 常⽤命令: zadd,zrange,zrem,zcard
        • 和set 相⽐, sorted set 增加了⼀个权重参数 score ,使得集合中的元素能够按 score 进⾏有序排列。
          举例: 在直播系统中,实时排⾏信息包含直播间在线⽤户列表,各种礼物排⾏榜,弹幕消息(可以理
          解为按消息维度的消息排⾏榜)等信息,适合使⽤ Redis 中的 Sorted Set 结构进⾏存储。
  • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​为什么 Redis 单线程模型效率也能那么高?
    •  C语言实现,效率高
    •  纯内存操作
    • 基于非阻塞的IO复用模型机制
    • 单线程的话就能避免多线程的频繁上下文切换问题
    • 丰富的数据结构(全称采用hash结构,读取速度非常快,对数据存储进行了一些优化,比如亚
      索表,跳表等)
  • Redis 为什么设计成单线程的

    • 多线程处理会涉及到锁,并且多线程处理会涉及到线程切 ··· 换而消耗 CPU 。采用单线程,避免了不 必要的上下文切换和竞争条件。其次 CPU 不是 Redis 的瓶颈, Redis 的瓶颈最有可能是机器内存或
      者网络带宽。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个基于sw::redis::RedisCluster和libevent异步订阅消息的示例代码: ```cpp #include <iostream> #include <string> #include <sw/redis++/redis++.h> #include <event2/event.h> using namespace std; using namespace sw::redis; void eventCallback(evutil_socket_t fd, short what, void *arg) { RedisCluster *redis = (RedisCluster *)arg; redis->cluster_recv(); } int main() { const string redis_cluster_address = "tcp://127.0.0.1:7000"; const string channel_name = "test_channel"; // 创建 RedisCluster 实例 auto redis = RedisCluster::create(); redis->connect(redis_cluster_address); // 订阅频道 auto callback = [](const string &channel, const string &msg) { cout << "Received message from channel " << channel << ": " << msg << endl; }; auto sub = redis->subscribe(channel_name, callback); // 创建 libevent 实例 auto event_base = event_base_new(); auto event = event_new(event_base, sub->fd(), EV_READ | EV_PERSIST, eventCallback, redis.get()); // 添加事件监听 event_add(event, nullptr); // 进入事件循环 event_base_dispatch(event_base); return 0; } ``` 这个示例代码中,首先创建了一个 RedisCluster 实例,然后调用其 connect 方法连接 Redis 集群。接着,调用 subscribe 方法订阅指定的频道,并传入一个回调函数来处理接收到的消息。 然后,创建了一个 libevent 实例,并使用 event_new 函数创建一个事件对象,将其绑定到 RedisCluster 实例的 socket 描述符上,并传入一个回调函数。最后,调用 event_base_dispatch 进入事件循环。 在事件循环中,libevent 会监听 Redis 集群返回的消息,当有消息到达时,会触发事件回调函数 eventCallback,在回调函数中调用 RedisCluster 实例的 cluster_recv 方法来处理接收到的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖大瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值