redis 简介 redis 是一个很火的开源键值内存数据库。官方网站是 http://redis.io/。 redis的应用很广泛,就我的感觉来说,web app用的比较多。 项目中的经验 我在项目中用到了redis来作为缓存和pubsub功能,体会到了它的一些强大,这里做一下总结。 刚接触re
redis 简介
redis 是一个很火的开源键值内存数据库。官方网站是 http://redis.io/。
redis的应用很广泛,就我的感觉来说,web app用的比较多。
项目中的经验
我在项目中用到了redis来作为缓存和pubsub功能,体会到了它的一些强大,这里做一下总结。
刚接触redis时的两个命令是 get/set,很简单,set key val,就在redis的某个编号的数据库中存放了一个键值对,通过get key 可以获取这个键对应的值。和平时使用的mysql等关系型数据库有很大的区别,设置值,读取值太简洁了,这也是内存数据库的一个特点,要能够快速,简洁的添加、读取、删除值。
在我的项目中,把redis当做了一个pubsub工具来用,同时也用作了写文件的缓存。下面将分别描述一下如何使用的。
redis作为写文件的缓存
我有大概四千个文件需要被写入,源数据都是一条数据只有58字节,一秒钟大概有1000条这样的数据产生,也就是说,一秒钟要打开关闭1000个文件并写入数据,对系统和磁盘来说,都是个压力,并且这样的解决方法很有问题,很自然的就想到了用缓存。缓存了一定量的数据后,再写入文件中,减少磁盘操作,同时也提高了写入效率。
如何做缓存,如果自己来维护,就要维护4000份不同文件的缓存,用程序来维护4000份缓存,并且根据不同的缓存大小触发写文件的操作,想想都觉得困难有点大。这个时候自然地就想到了redis这个内存数据库。
redis有一个操作室 append,它向一个key追加内容,如果key不存在就创建一个,同时返回变更后的字符串长度,这个命令实在是太好用了,一下子就解决了我的问题。
通过在redis中维护4000个key,根据接收到的不同的数据,追加到不同的key上,根据返回的数据长度,当达到预期的长度后,就取出来并清空原来的值,把取出来的值写入文件中,整个过程,逻辑清晰明白。
在实际编写程序的过程中,还有一些细节需要处理,比如说,对于每一个append操作,客户端都要和redis服务器进行交互,获取提交结果,那么有无办法减少这个操作,改为批量提交呢?有的。redis有个pipeline命令,就是干这个活的,客户端通过pipeline向服务器提交数据,redis服务器不立即返回结果,而是放在一个队列中,当客户端执行了execute操作后,一次性按照提交的顺序返回执行的结果。然后再对返回的结果进行对比,寻找符合长度的数据。这样的操作,可以大幅度降低耗时,提高程序运行速度和性能。
当寻找到了符合预定长度的数据时,就使用redis的 getset(key, "") 命令,这个命令取出来key中的值,同时给key赋一个新值,这就满足了原子操作性,不会出现当一个进程对这个key取数据后,赋值新数据前,另外一个进程往这个key中写数据而导致数据的丢失的问题。找到了需要写入文件的数据后,如何通知程序写入文件呢?有同步和异步两种方法,同步就是在同一个进程/线程中继续写文件,等文件写完毕后,再做其他操作,这样的好处也许是程序实现相对简单,但是在高性能环境下,却不一定是可以接受的方法,耗时!异步呢?实现异步的方式有很多,一种是启一个新的线程去做这个时,另外一种就是用消息队列。在这个场景中,起一个新的线程去做这个事不讨好,并且也不够稳定。有一个celery的消息队列,网站自身的介绍是近乎实时的分布式消息队列。
正好,把celery拿过来用,当程序检测到符合长度后,取出来数据,通过publish的方式,通知一个sub client,subclient 接收到这个消息后,就调用celery 的task 去执行写的操作,如此,整个业务逻辑流程就串了起来,见下图的描述。
redis使用感受
redis使用起来非常的方便,同时也容易造成滥用。任何工具都有它的适用场景,有很多人拿到一个好用的工具,干什么都要用上来。我以前也犯过类似的错误,觉得c语言就是好,写一个下载网页的程序都要用c来写,结果换用python 就是几句话的事,人生苦短,不要和自己过不去,用合适的工具,完成合适的事情。
原文地址:redis 应用实践, 感谢原作者分享。

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。

mySqlManagesCharacterSetsetSandCollationsyutusututf-8asthEdeFault,允許ConfigurationAtdataBase,table和columnlevels,AndrequiringCarefullageLignmentToavoidMismatches.1)setDefeaultCharactersetTercharactersetEtCollacterSeteTandColletationForAdataBase.2)conformentcollecharactersettersetertersetcollatertersetcollationcollation

MySQL觸發器是與表相關聯的自動執行的存儲過程,用於在特定數據操作時執行一系列操作。 1)觸發器定義與作用:用於數據校驗、日誌記錄等。 2)工作原理:分為BEFORE和AFTER,支持行級觸發。 3)使用示例:可用於記錄薪資變更或更新庫存。 4)調試技巧:使用SHOWTRIGGERS和SHOWCREATETRIGGER命令。 5)性能優化:避免複雜操作,使用索引,管理事務。

在MySQL中創建和管理用戶賬戶的步驟如下:1.創建用戶:使用CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';2.分配權限:使用GRANTSELECT,INSERT,UPDATEONmydatabase.TO'newuser'@'localhost';3.修正權限錯誤:使用REVOKEALLPRIVILEGESONmydatabase.FROM'newuser'@'localhost';然後重新分配權限;4.優化權限:使用SHOWGRA

MySQL適合快速開發和中小型應用,Oracle適合大型企業和高可用性需求。 1)MySQL開源、易用,適用於Web應用和中小型企業。 2)Oracle功能強大,適合大型企業和政府機構。 3)MySQL支持多種存儲引擎,Oracle提供豐富的企業級功能。

MySQL相比其他關係型數據庫的劣勢包括:1.性能問題:在處理大規模數據時可能遇到瓶頸,PostgreSQL在復雜查詢和大數據處理上表現更優。 2.擴展性:水平擴展能力不如GoogleSpanner和AmazonAurora。 3.功能限制:在高級功能上不如PostgreSQL和Oracle,某些功能需要更多自定義代碼和維護。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)