其实吧,这种文章网上都有,但是你们没有发现吗?大多数都是在本地写代码,没有做过服务端配置,客户端进行调用的吧!!!
所以,为了总结一下,我还是得写一个博客,告诉后来者不要采坑
我最近在创业,大四狗一枚,浙江有想法创业的程序员也可以和我搭伙,哈哈哈
OK,现在开始
我的项目是用laravel做的,刚开始我一直在配置Predis,但是一直配置失败,一直在一个问题上面徘徊 就是提示我缺少扩展,一个扩展是imagick,还有一个是com_dotnet,这两个库我几乎下载遍了网上的dll扩展文件,但是他一直提示我是无效win32程序,我几乎熬夜两天,48小时不间断的百度,问人,但是会的人都是说他们没有问题,很简单啊!先说啊!这两个扩展库原生的php目录里面是没有的,要自己去下,即便你在ini文件里面开了,还是没有用的!predis这个第三方的依赖要的,我也不知道搞什么鬼,你一个redis你能用就行了,其实吧,predis做了一个持久化的动作,这个对于高并发的情况下,还是挺不错的,但是,毕竟是框架,虽然是原生的php脚本写的,没有加入什么so文件扩展文件的,但是,响应速度还是没有原生的Redis操作的快,我百度看了很多,慢了是大概0.0040秒,你们别看这么小的秒数,这个可是决定在高并发的情况下,线程安全,数据是否污染的一个重要条件,redis的可以支持高并发的一个工具数据库,但是作为一个缓存的数据库,数据是不可以污染的。我选择redis,没有选择MongoDB,其实MongoDB也支持高并发,但是我不需要直接持久化,而且redis配置简单,读写速度很快,相比来说,redis毕竟是底层是C,而且体积小,很多优点。
Redis一般我是作为跳板,一般请求之后,固化到mysql做持久化处理,redis还有一个好处就是不会重复。这个和他的数据结构也有关系,这个我可是百度了两天两夜得到的知识,现在和你们一起分享一下
Redis体积小,只是一个缓存的工具,他重启数据就没有了,这个和你们浏览器的session一样,关闭窗口就销毁了,session是一个会话窗口,有时效性,redis也有,当然要自己设置,redis本来是有15个库,默认选择是第一个,你可以在插入数据的时候自己选择一个。我也是第一次使用redis,所以坑很多,我爬了很久,虽然踩了,但是有收获,很值!!!
Redis他的高并发,源于数据结构和算法很牛逼,总而言之就是很牛逼,底层是C,没有任何胶水语言,这个倒是和苹果差不多,iOS可以用OC,为什么快,除了处理器,ios系统也快,因为他的语言,最接近底层系统,因为和系统交互的语言,都是和C打交道的。就如Java,php,底层语言也是C,C可以说是一个老古董,但是也是老当益壮
现在我们来谈技术
首先,我不要predis了,因为我配置不了,太烦人了,我直接用原生的
开启php的redis扩展
首先,你要看你的php版本,我的是php 7.3.5 nts
ok,现在来说一下这个nts和ts的区别
这个也是我采坑的时候发现的,nts not thread safe ; ts threa safe
看出来了吧,线程安全和线程不安全,什么叫线程安全和线程不安全呢?
这个我可以稍微解释一下,因为这个也算技术知识的一点,很重要
比如,同时一千人访问你的项目接口,你返回的数据和本来应该返回的数据有偏差,这个就是线程不安全的,属于脏数据,反之,线程安全就是返回的数据和原来应该返回的数据是一致的,就是线程安全的
我之前是做java的,打个比方HashMap和HashTable这两个数据结构,虽然名字差不多,都是靠哈希值进行查询和存储数据的,但是你要看源码,你就知道了区别,这里就不细说了,因为我要说我肯定要说很多,因为涉及的知识太多了,hash值和一些复杂的算法和算法逻辑的实现,和一些举例等等。。。
然后我们去php的扩展包的官网去下载
我给出链接https://pecl.php.net/package/redis/5.0.2/windows
我的服务器是windows的,64位,我就下载64位
这里提醒一下,32位的你就不要下64的,不然会提示非有效win32程序
64也是一样,不要下载32的,手不要贱
下载以后,你把里面的扩展文件解压到php的ext里面,注意
下载的压缩文件里面有两个文件,不能漏
你不要看pdb不是dll扩展名,不去复制,其实这个也有用的,属于依赖性文件
解压到ext文件夹里面后,打开php.ini文件,添加扩展配置
这两个,curl这个扩展也要打开
不要问我为什么要打开,因为这个是建立服务器和客户端安全链接的一个重要的扩展
打开以后,OK,你以为这样子就好了?
你Nginx服务也要重启,Redis服务也要重启
然后你就用下面代码连接服务器Redis数据库
然后, 你请求的时候,你会发现,你是可以连接成功redis数据库,但是你无法插入数据,总是显示为false,为毛?哈哈哈
首先,你想远程访问redis数据库,你得通过校验,怎么设置校验呢?
在服务端的redis-cli客户端里面输入以下代码 config set requirepass xuyijie1997(这个是我的名字 这个填你自己的密码)
config是redis的配置 也属于数据库里面的数据 set是设置数据
逻辑清晰了
现在我们重新来
是不是很得劲,然后你放到laravel框架里面,
那个predis是不是也不需要了,更加简单了,写代码嘛,就是让负责的事情简单化,没必要搞的太复杂,两天的时间虽然没有搞出来predis,但是我一样可以操作Redis
还有就是,如果你是阿里云的服务器,记得打开Redis的端口
如果你还不懂,加我微信 X1789780841,我手把手教你咋搞