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
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 英文版
推荐:为Win版本,支持代码提示!