那啥,在家里装一套Redis是个什么体验?

2024-06-05 10:56:15 39点赞 246收藏 67评论

最近的工作快忙完了,又可以回来和大家交流了。今天的话题对很多喜欢智能家居或者在家里搞一搞家居系统的人来说可能会有点启发,但要注意的是,对于普通用户来说或许是一个挑战。

先说下背景:

现在很多人在家里有各种各样的智能系统。这些系统,例如米家、苹果HomeKit、华为HiLink等,通常都有各自封闭的生态环境。虽然我们可以依靠像Home Assistant(HA)或者HomeBridge(HB)这样的“桥梁”来实现不同设备之间的互通,但这些解决方案并非万能。在很多细微的调节和控制过程中,我们仍然会感受到不同生态系统之间的巨大隔阂。

智能家居的魅力在于其个性化和自动化的可能性。然而,当我们试图将多个品牌和系统整合到一个统一的平台时,常常会遇到各种障碍。这些障碍可能是协议的不兼容、功能的限制,或者是设备之间无法顺畅通信。

但更重要的是——由于各个厂商自己的各种“策略”,实质上在智能家居系统中我们很难找到一个统一的可以随意访问的数据存储空间。这时候想真正的搞一个“大一统”的系统就难上加难了。

说下iN自己的做法——在家里部署一套Redis!

选这种东西其实没什么心理建设的过程,唯一的原因就是在很多工作和项目中Redis使用得太多,几乎想也不想的就直接拿来在家里部署上了。

首先,Redis是什么?Redis(Remote Dictionary Server,读作“Re-di-s”)是一个开源的内存数据结构存储系统。这玩意主要是在大型的商业系统中担任缓存用途的,通常大型的网站或者应用每秒钟要承担数以万计的数据库查询、读写操作。对于任何数据库服务器来说这么大的操作量都是灾难性的。于是聪明的架构师们就在应用和数据库之间设置了一个基于内存的缓存。

那啥,在家里装一套Redis是个什么体验?

在读取数据信息之前先到缓存中看一看有没有相应的结果数据,如果有,就直接调用缓存数据,如果没有则再去数据库中查询。

Redis就是这种缓存的一个具体实现产品,相应的的同类产品还有诸如:Memcached、Ehcache等等一系列的产品或者变体。

如果想用,基本上用哪个都一差不多。

iN自己的做法就相当简单粗暴了,将数据读进来,仍在Redis中,需要这类数据的应用再去Redis中查找相应的数据就好了。

举个例子:

这是iN自己家里系统看板的网络流量监控:

那啥,在家里装一套Redis是个什么体验?

屏幕就在写字台边上,每天24小时开着,这样一眼看过去就可以迅速的了解家里的网络使用情况,这就省去了出现问题的时候再去路由器的控制界面上找问题的过程。基本上所有的信息或状况也就一目了然了。

怎么实现的?

实际上所用的ROS路由器是带有编程接口的,我们可以通过一行代码:rosClient(cmd='/interface/monitor-traffic', interface = rosInterfacesList, once=b" "),就可以得到路由器上所有的端口的运行情况。

然后将数据略微的做一下整理,就可以用r.set('LocalRouterInterfaceRate', network_json)将数据存储到Redis中。

那啥,在家里装一套Redis是个什么体验?

这也是为什么iN一直和大家说Router OS的路由器好用的原因之一,我们完全可以通过程序来控制和读取路由器的所有行为。

对于Redis内的数据呈现,实际上就是一个大家常用的JSON字符串了:

那啥,在家里装一套Redis是个什么体验?

再将Redis中的数据抽取到前端的页面,也就呈现出更加直观的数据展示效果:

那啥,在家里装一套Redis是个什么体验?

从视觉上也更加容易让人理解。

为什么不直接让前端的程序来读取数据呢?其实,每一次读取ROS数据都是有时间成本和计算成本的,虽然一条语句的处理只需要几十毫秒就可以完成,但要知道——“数据产生了复用才是价值”,这个架构也就满足了一笔数据可以被多个应用和客户端共同使用的目的。

所以,如果爱折腾,还是建议在家里部署一个Redis的。

最后简单的说下Redis的安装和设置方法:

如果你有一台跑linux的系统例如ubuntu,那么只需要 sudo apt install redis-server 这么一条语句就可以在Linux上安装部署一套Redis系统。

那啥,在家里装一套Redis是个什么体验?

当Redis安装完毕之后,Redis就已经运行在你的系统中了。

对于家庭使用,其实我们还需要稍微的修改一下redis的配置信息。原因是Redis本身默认被配置为仅仅允许本机访问。但对于家庭分布式系统来说,我们经常会有从各种不同的设备访问Redis的需求。因此需要将Redis的远程访问打开。

使用命令:sudo nano /etc/redis/redis.conf

那啥,在家里装一套Redis是个什么体验?

把这台安装了Redis的服务器的IP地址设置一下绑定。Redis 就可以在网络上为其他系统进行服务了。

设置完毕后,命令行测试一下:

那啥,在家里装一套Redis是个什么体验?

加上 -h redis 服务器的IP地址,在redis界面中输入 ping (乒)你会立刻从Redis中收到返回信息 PONG(乓),这样就证明你的Redis可以良好的工作了。

展开 收起
67评论

  • 精彩
  • 最新
  • 我家是把redis的变成一个消息中心,无论什么地方产生的事件都往那里丢一份,别的地方要用的话在那里取就行了,不用各做各的接口。

    校验提示文案

    提交
  • 我也安装了个redis,不过是docker跑的,想用来实现py的asyncio版分布式锁,要求 1 不准轮训 ,减少带宽消耗2 不准重入 3 客户端崩溃的时候尽量别死锁,可惜遇到了一些问题

    难点 1 不能用轮训 只能采用(1)blpop之类的阻塞指令(2)keyspaceevent,需要修改Redis配置(3)自己pubsub

    2 用了上面的东西,如何保证2段原子性代码之间,远程的redis中状态不会被修改(为什么是2段?因为把阻塞指令放lua或者事务里面是件蠢事,redis也不允许这样,比如lua中的blpop会变成lpop)

    3 cancel问题。被cancel的时候,如何知道是哪个await出来的异常?如何知道他有没有完成?如何在事后清理资源,恢复Redis中的状态?(shield无效,这是锁,不能当缩头乌龟,就是要block住当前协程)(随着try中await语句的增加,每个await都可能是cancel的源头,需要判断的东西也变多,这是场灾难) 现在就是被这几个问题卡了好久了想不到解决的办法,3可能还好解决,2只能说去赌这种小概率事情不会发生

    校验提示文案

    提交
  • 每次你发的东西,有一定的技术含量,但总有一种脱了裤子放屁,为了使用这个技术而使用的感觉

    校验提示文案

    提交

    iN在

    作者

    gchru

    很多技术只是你想不到用而已 你以为只是看流量啊

    校验提示文案

    提交
    应该是为了 应用软件。来学习软件。或者提高性能。扩展场景。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 热点key你怎么管理?雪崩、击穿、穿透问题怎么处理?啊?值得买?不好意思,走错片场了 [黑线]

    校验提示文案

    提交
    家里没什么太大的并发,这些处理几乎可以不做,但如果需要的话可以再加进去

    校验提示文案

    提交
    😂是个互联网人

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 。。。意义是啥?就是为了看个面板?看你前面说的还以为能打通不同平台呢。。。

    校验提示文案

    提交
    可以打通啊

    校验提示文案

    提交
    小米能控制美的的家电?

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 加一层缓存的意义是什么?没看懂,就一个看板用到了,这同一份数据还在哪里用了吗?

    校验提示文案

    提交
    海用在墙面显示和自动监控

    校验提示文案

    提交
    收起所有回复
  • 这文章搞错了重点

    校验提示文案

    提交
    为什么?

    校验提示文案

    提交
    不得讲讲怎么接入数据啊,部署redis有啥看头,大家都知道

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 按你这种多个服务共用,你怎么解决key的唯一呢。像你说的做备忘录,这不会随便就被替换了吧

    校验提示文案

    提交
    不会

    校验提示文案

    提交
    收起所有回复
  • @iN在 借楼问个ros的问题,为什么pppoe在7天强制重拨后内网设备还会获取到前一次的ipv6地址,v6时间都调成1小时了

    校验提示文案

    提交
    这是因为现在运营商的pppoe服务器反应速度太快了,重播几乎是瞬间完成的,ros的ipv4和ipv6并不在一个栈上有时会检测不到pppoe的断开重播,这就导致了ipv6 保持原有的dhcp状态。 解决方法也很简单在pppoe的profile中有脚本这一项,在onup的位置上写个脚本 /ipv6 dhcp-client release 后面的find 参数你看看 你的wan口叫什么名字写进去就行了

    校验提示文案

    提交
    如果是内网设备也依赖于pppoe所提供的ipv6 地址池 就要广播一下IP地址池过期 这个基本上文档里面都有

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 这不是强行加戏吗,按照这篇文章可以把所有数据库都装一遍

    校验提示文案

    提交
    并不是 redis还是有一定的作用的

    校验提示文案

    提交
    收起所有回复
  • redis好装,但是怎么把不同家居整合到一块你是一点都没提啊

    校验提示文案

    提交
    楼主也没想到你会看完呀 [小眼睛]

    校验提示文案

    提交
    哈哈哈哈哈哈哈,就你懂 [得意]

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 啥?楼主竟然试图教会值友们如何操作Redis?? [嘿嘿嘿] [嘿嘿嘿] [嘿嘿嘿]

    校验提示文案

    提交
  • 我在一个购买网站上看redis???!! [皱眉] [皱眉] [皱眉]

    校验提示文案

    提交
  • json怎么展示到前端页面啊?前段用的是啥?

    校验提示文案

    提交
    这不随便吗套一个html服务器,js解析json。。你用什么语言都可以从redis读一下

    校验提示文案

    提交
    收起所有回复
  • 还好家里没有跑Linux系统,可以不用学了 [赞一个]

    校验提示文案

    提交
    windows也可以跑redis

    校验提示文案

    提交
    Windows可以用memurai

    校验提示文案

    提交
    收起所有回复
  • [皱眉] 还以为能拿redis实现智能家居了呐

    校验提示文案

    提交
    我以为他把智能家居储存打通了

    校验提示文案

    提交
    收起所有回复
  • 问题就是这么做的意义是什么?家庭互联怎么用 Redis 你是一点儿没讲

    校验提示文案

    提交
  • 开着矿山卡车买菜的既视感。

    校验提示文案

    提交
  • 大key你要不要治理

    校验提示文案

    提交
  • 有点兴趣,但是ros现在获取ipv6还正常么?

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
246
扫一下,分享更方便,购买更轻松