redis是一个key-value数据库,就像是java中List,Set,Map一样,使用内存存储数据,c语言编写,读写速度都很快。下载程序包,只有2Mb大小,可以说非常轻量级了。打开redis的目录,可以看到一个makefile,这个正是为了c语言编译的。如果有编译好的二进制文件,只要运行就可以了。
和Zookeeper一样,可以使用软件自身提供的client访问redis。但是这很不方变,并且会有权限相关的问题。
然后就是使用redis-cli练习5种数据类型的使用,这是属性redis的过程,然后才能好好的使用jedis访问redis。自己可以想象怎么开发java版本的redis客户端,基本理念就是连接到3306端口,然后向其发送命令行,获取输出。这个就有点类似于一次rest请求,只是是这个命令行的解析和返回结果的解析比较复杂。查看这个官方推荐的java-redis-client,这个带注释不到400行的代码就完成了这个功能,说明作者的基本功真的很强大,值得一读并模仿。
查看官网资料,在document菜单下面,有一个specification,可以看到Redis Protocol specification超链接,说明了client和server的交互使用了一种称作RESP的协议,英文描述:
A client connects to a Redis server creating a TCP connection to the port 6379. While RESP is technically non-TCP specific, in the context of Redis the protocol is only used with TCP connections
(or equivalent stream oriented connections like Unix sockets).
大意是没有使用TCP协议,而只是使用了TCP连接,那就更没有用到HTTP连接,关于网络连接,这里面还是大有学问。只要我们编写的代码遵守这个RESP协议就可以了,不管什么语言都可以。可以看到,在protol层,是没有数据类型的概念的,全部都是以byte数组形式传输。对这个协议进行封装后,就可以像在本地使用redis一样。
熟练使用redis就要对redis的集合特性非常清楚,并且熟悉其命令
String:set/get
HashMap: hmset/hgetall List:lpush/lrange
Set:sadd/smembers
ZSet:zadd/zrangebyscore
# name是其保留字(hold key)
redis除了常见的集合操作命令外,就是一些功能性的,比如订阅发布系统。在cs模式中,当有消息到达时,服务端要通知客户端。
现在流行redis集群吧,
要练习使用jedis发送接收pojo消息,毕竟是结构型数据,不是能老使用string对象
从我的redis使用体验来说,有两个主要问题:一是依赖于键查找,查询功能受限。二是软件小,没有可视化和监控工具,需要非常熟悉命令行,不像mysql数据库,把它当黑盒是不可以的。比如info。
redis还有一个问题就是数据迁移问题,或者谁数据导出,比如格式为json?,数据清理等,都是不太好处理的问题。
参考博文:http://lanjingling.github.io/2015/11/20/redis-pub-sub
参考博文: https://www.w3cschool.cn/redis/redis-data-types.html
发布和订阅功能:https://blog.csdn.net/weixin_38111957/article/details/82957842