
使用Redis优化评论列表
评论列表是现今绝大部分网站都具备的功能,但是在高并发情况下,传统的关系型数据库对于这种查询操作的处理能力显得捉襟见肘。而Redis提供了更为高效的方式来优化评论列表的查询性能。
Redis是一个基于内存的NoSQL数据库,它的出现主要是为了解决关系型数据库不擅长高并发访问以及海量数据处理的问题。相对于关系型数据库,Redis能够更快地进行数据写入和读取操作,而且不会出现锁的问题,大大提高了系统的并发性能。
在评论列表的优化中,Redis主要有以下三种方案:
1. 全部评论数据的Redis缓存
将全部评论数据从关系型数据库中取出,然后一次性缓存在Redis中,查询的时候直接从Redis中读取数据,写入操作则同时更新Redis和数据库两个存储。
代码示例:
# 封装Redis缓存评论类
class RediscommentCache():
def __init__(self, redis_conn, db_conn):
self.redis_conn = redis_conn
self.db_conn = db_conn
def get_comments(self):
# 先从Redis读取数据
result = self.redis_conn.get(‘comment_list’)
if not result:
# 如果Redis中没有数据,就从数据库中读取并存入Redis中
comments = self.db_conn.get_all_comments()
self.redis_conn.set(‘comment_list’, comments)
result = comments
return result
def add_comment(self, comment):
# 更新Redis中的评论数据
self.redis_conn.append(‘comment_list’, comment)
# 同时将评论数据存入关系型数据库中
self.db_conn.add_new_comment(comment)
2. 分页查询数据的Redis缓存 将评论数据分成多个区块,每个区块缓存到一个Redis中。查询的时候根据用户需求的页数去相应的Redis缓存中取数据,将数据返回给用户。代码示例:```python# 封装Redis缓存评论类class RedisCommentCache():def __init__(self, redis_conn, db_conn):self.redis_conn = redis_connself.db_conn = db_conndef get_comment_page(self, page_num):# 定义每页数据的大小page_size = 10start_index = page_size * (page_num - 1)end_index = start_index + page_size - 1# 定义缓存keycache_key = 'comment_list:{}'.format(page_num)# 先从Redis读取缓存数据result = self.redis_conn.lrange(cache_key, start_index, end_index)if not result:# 如果Redis中没有数据,就从数据库中读取相应区块并存入Redis中comments = self.db_conn.get_comment_page(start_index, end_index)for comment in comments:self.redis_conn.rpush(cache_key, comment)result = self.redis_conn.lrange(cache_key, start_index, end_index)return resultdef add_comment(self, comment):# 找到最后一个缓存区块并更新数据comment_count = self.db_conn.get_comment_count()last_page_num = math.ceil(comment_count / 10)cache_key = 'comment_list:{}'.format(last_page_num)self.redis_conn.rpush(cache_key, comment)# 同时将评论数据存入关系型数据库中self.db_conn.add_new_comment(comment)
3. 缓存评论列表的ID后进行查询
将评论数据ID缓存到Redis中。查询的时候,在Redis中根据ID去查询相应的评论数据,再将查询到的数据返回给用户。
代码示例:
# 封装Redis缓存评论类
class RedisCommentCache():
def __init__(self, redis_conn, db_conn):
self.redis_conn = redis_conn
self.db_conn = db_conn
def get_comments_by_ids(self, ids):
# 对于查询id数量过多的情况,可以将ID进行分段处理,避免Redis数据读取压力过大
page_size = 1000
id_sections = [ids[i:i+page_size] for i in range(0, len(ids), page_size)]
comments = []
for section in id_sections:
# 从Redis中取缓存ID并查询数据
section_comments = []
cache_keys = [‘comment:{}’.format(id) for id in section]
results = self.redis_conn.mget(cache_keys)
for result in results:
if not result:
# 如果Redis中没有数据,就从数据库中查询数据并缓存ID
id = int(result.split(‘:’)[1])
comment = self.db_conn.get_comment_by_id(id)
section_comments.append(comment)
self.redis_conn.set(cache_keys[id], comment)
section_comments.append(result)
comments.extend(section_comments)
return comments
以上三种方案都能提高评论列表的查询性能,选择哪种方案,视具体应用环境而定。无论是哪种方案,Redis的高读写性能都为程序员提供了更为高效的解决方案。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

启动spring boot报错,怎么解决
【解决办法】需要在启动类的@EnableAutoConfiguration或@SpringBootApplication中添加exclude = {},排除此类的autoconfig。 启动以后就可以正常运行。 【原因】这个原因是maven依赖包冲突,有重复的依赖。 【Spring Boot】Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
浅谈如何抓好工作落实
正所谓“发展唯恐无策,更忧有策不落实”,面对新形势、新任务,能不能打造一支社会上有地位、监管上有力度、群众中有威信的新型工商队伍,关键还是取决于贯彻落实上级决策部署的执行力,简而言之就是“抓落实”。 笔者结合工作和单位实际,就如何抓好落实谈一下个人理解和看法。 一、提高认识抓落实,要“想抓落实”。 “思想是行动的先导”,抓落实实际上是对广大干部思想作风和工作作风的一个检验,是一个认识问题。 如何让目标变为现实,这就要求我们从思想上认识到抓落实的重要性和紧迫性。 要意识到不抓落实,我们的目标就是一张白纸、一句空话。 目前在队伍里,的确有少数同志抓落实的意识不强,遇到矛盾绕道走,能躲就躲、能拖就拖,喜欢当评论家、议论家,不愿当实干家,这是不想抓落实的思想顽疾作怪的结果。 这种思想极大地制约着工商事业发展的步伐。 “抓落实”蕴含着解放思想、与时俱进、“创先争优”的精神实质。 当前,工商部门处于发展转型促跨越的特殊时期,只有以想抓落实的态度,在优化服务环境、提升监管效能、保护消费者合法权益上履职尽责,才能赢得各级领导和人民群众的认同,赢得发展的先机。 因此,我们一定要从思想上深刻认识抓落实的必要性和重要性...正所谓“发展唯恐无策,更忧有策不落实”,面对新形势、新任务,能不能打造一支社会上有地位、监管上有力度、群众中有威信的新型工商队伍,关键还是取决于贯彻落实上级决策部署的执行力,简而言之就是“抓落实”。 笔者结合工作和单位实际,就如何抓好落实谈一下个人理解和看法。 一、提高认识抓落实,要“想抓落实”。 “思想是行动的先导”,抓落实实际上是对广大干部思想作风和工作作风的一个检验,是一个认识问题。 如何让目标变为现实,这就要求我们从思想上认识到抓落实的重要性和紧迫性。 要意识到不抓落实,我们的目标就是一张白纸、一句空话。 目前在队伍里,的确有少数同志抓落实的意识不强,遇到矛盾绕道走,能躲就躲、能拖就拖,喜欢当评论家、议论家,不愿当实干家,这是不想抓落实的思想顽疾作怪的结果。 这种思想极大地制约着工商事业发展的步伐。 “抓落实”蕴含着解放思想、与时俱进、“创先争优”的精神实质。 当前,工商部门处于发展转型促跨越的特殊时期,只有以想抓落实的态度,在优化服务环境、提升监管效能、保护消费者合法权益上履职尽责,才能赢得各级领导和人民群众的认同,赢得发展的先机。 因此,我们一定要从思想上深刻认识抓落实的必要性和重要性,增强想抓落实的责任感和使命感。 二、提高能力抓落实,要“会抓落实”。 抓而无果,等于白抓。 我们有些同志工作热情很高,态度积极,动作也快,但工作的效果不尽如人意。 究其原因,主要是抓落实的本领不高、方法不对。 不想抓落实是思想问题,不会抓落实则是水平问题。 面对错综复杂的各种矛盾,抓落实就要突出大局和重点。 “不谋全局者不足以谋一域”,抓落实不能停留在本部门、本单位的小圈子里,不能被一时或一地的利益所诱惑,要时刻与省、市局党组保持一致,要站在全县服务经济社会发展的大局中去谋思路、抓落实。 同时,如果“眉毛胡子一把抓”,没有重点、无的放矢,就会捡了芝麻丢了西瓜,工作也无法取得突破。 抓落实,还要依靠制度建设。 要紧紧按照省、市局的各项决策部署,采取强有力的组织措施、考核措施,对各项工作考核指标进行细化分解,把原则要求变成可操作的具体措施,实行挂图作战、倒逼问责。 要建立健全科学规范的问责制度,追究不落实的人,问责不落实的事,做到奖惩分明,形成一级抓一级、一级促一级、层层抓落实的良好工作局面。 当前,最重要的就是抓稳定,确保“三个不出问题”,要抓好队伍作风建设、应急值班、机关环境卫生、流通领域食品市场和农资市场监管、全民创业等六项工作,为整体上水平奠定基础。 三、敢于较真抓落实,要“狠抓落实”。 空谈误国,实干兴邦。 在抓落实过程中,必然会遇到许多难以预料的困难、矛盾和问题,甚至一些举措还会触及部分人的利益。 因此,有了抓落实的想法和方法还不够,抓落实更重要的是敢抓落实、狠抓落实。 这就需要领导干部要有迎难而上的精神、主动出击的勇气和不达目的不罢休的韧劲。 要坚持原则,在大是大非问题上不搞通融,在执行上级政策措施上不讲条件,在违法、违纪人和事上不留情面,切实做到敢于负责、敢于碰硬、敢于较真、敢于问责。 没有责任的落实也就没有工作的落实,要克服“老好人”思想,要有一竿子插到底的勇气,对作风不正、环境不净、监管不力、服务不优等“庸懒散”和消极应付的现象和问题严格问责。 在全系统上下形成一种“不落实不行、落实慢不行、落实差也不行”的狠抓落实的浓厚氛围。 四、坚持不懈抓落实,要“常抓落实”。 抓落实不能一劳永逸,更不能“一阵风”,必须坚持经常抓、反复抓,做到不出成绩不罢休、出了成绩也不撒手。 面对改善发展环境的新要求,我们一要营造规范整洁的工作环境,在作风纪律、工作着装、物品摆放、卫生环境、文明用语等方面抓落实,保证办公环境整洁有序,和谐优美;二要打造简便高效的服务环境,在落实首问负责制、“一审一核”制、一次告知制、跟踪服务制等制度方面抓落实,加大商标培育和驰名、著名商标发展力度,积极帮助中小企业解决融资困难,打造“快节奏、宽准入、高效率”的行政审批环境;三要努力营造良好的监管执法环境,按照“五个一”(即对企业执一次法、给企业说一种法、纠正企业一次违法违章行为、向企业提出一条合理化建议、使一个企业健康发展)的工作理念,以流通领域食品安全监管、农资监管、消费投诉热点行业等为重点,坚持“抓大放小”、“惩大奸戒小过”,规范自由裁量权使用和案件查办程序,树立工商执法权威,营造公平公正的市场竞争环境。 只有将抓落实放在以上日常和重点工作中,做到常常抓落实、反复抓落实,才能将问题、矛盾解决在平时,才能积累起经验、凝聚起士气、树立起权威。 (石双录) (作者为河北省宁晋县工商局局长)

Redis和Memcache的区别分析
1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。 不过memcache还可用于缓存其他东西,例如图片、视频等等。 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。 Redis可以通过例如expire 设定,例如expire name 105、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。 都可以一主一从6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复8、Redis支持数据的备份,即master-slave模式的数据备份。
发表评论