Redis入门--头歌实验使用Redis构建自动补全组件

自动补全与输入联想功能已经是大多数网站的标配,给表单加入自动补全功能大大节省了用户输入时间,而输入联想功能则起到了预测用户喜好的作用,两个功能都是提升用户体验的利器。
本实训,我们通过实现搜索历史、自动补全和搜索预测三大常用功能,带领大家编写实用的程序组件。

搜索历史功能

#!/usr/bin/env python
#-*- coding:utf-8 -*-import redisconn = redis.Redis()# 将最新搜索词记录到搜索记录列表中
def add_search_history(user_id, keyword):# 将最新搜索词记录到指定用户的搜索记录列表中# user_id: 用户ID# keyword: 搜索关键词history_list = "recent:search:" + user_idpipe = conn.pipeline()pipe.multi()pipe.lrem(history_list, 0, keyword)  # 移除已存在的关键词pipe.lpush(history_list, keyword)  # 将关键词插入到列表头部pipe.ltrim(history_list, 0, 49)  # 保留最新的50个搜索记录pipe.execute()# 删除搜索记录列表中的指定搜索词
def remove_search_history(user_id, keyword):# 从指定用户的搜索记录列表中删除指定的搜索词# user_id: 用户ID# keyword: 待删除的搜索关键词conn.lrem("recent:search:" + user_id, 0, keyword)# 获取到自动匹配的搜索词列表
def fetch_autocomplete_list(user_id, prefix):# 获取指定用户搜索记录列表中以指定前缀开头的搜索词列表# user_id: 用户ID# prefix: 搜索关键词前缀candidates = conn.lrange("recent:search:" + user_id, 0, -1)matches = [candidate.decode('utf-8') for candidate in candidates if candidate.decode('utf-8').startswith(prefix)]return matches

自动补全功能

#!/usr/bin/env python
#-*- coding:utf-8 -*-import uuid
import redis
import bisectconn = redis.Redis()# 生成起始元素和结束元素
def find_prefix_range(prefix):# 根据前缀生成起始元素和结束元素,用于查找匹配的提示词# prefix: 给定的前缀字符串characters = "`abcdefghijklmnopqrstuvwxyz{"posn = bisect.bisect_left(characters, prefix[-1:])suffix = characters[(posn or 1) - 1]return prefix[:-1] + suffix + '{', prefix + '{'# 获取匹配提示词列表
def autocomplete_on_prefix(prefix):# 根据前缀获取匹配的提示词列表# prefix: 给定的前缀字符串zset_name = 'autocomplete:candidates'start, end = find_prefix_range(prefix)identifier = str(uuid.uuid4())start += identifierend += identifierconn.zadd(zset_name, {start: 0, end: 0})sindex = conn.zrank(zset_name, start)eindex = conn.zrank(zset_name, end)erange = min(sindex + 9, eindex - 2)pipe = conn.pipeline()pipe.multi()pipe.zrem(zset_name, start, end)pipe.zrange(zset_name, sindex, erange)items = pipe.execute()[-1]return [item for item in items if '{' not in item]

搜索预测功能

#!/usr/bin/env python
#-*- coding:utf-8 -*-import redisconn = redis.Redis()# 记录搜索词频次
def add_keyword_frequency(keyword):# 根据搜索词记录频次并维护搜索词的有序集合# keyword: 搜索词for i in range(len(keyword)):zset_name = "keyword:" + keyword[0:i+1]conn.zincrby(zset_name, 1, keyword)conn.zremrangebyrank(zset_name, 20, -1)conn.expire(zset_name, 86400)# 获取搜索预测列表
def get_search_suggestions(prefix):# 根据前缀获取搜索预测列表# prefix: 搜索词前缀return conn.zrevrange("keyword:" + prefix, 0, -1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】unordered 系列关联式容器

文章目录 1. unordered 系列关联式容器2. unordered_map2.1 unordered_map 的文档介绍2.2 unordered_map 的接口说明 3. unordered_set4. 在线 OJ 1. unordered 系列关联式容器 在 C 98 中,STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可…

LeetCode-热题100:300. 最长递增子序列

题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示…

mybatis(4) 代理机制以及小技巧

mybatis 1、 问题2、使用3、#与$3.1 例子3.2什么情况下必须使用${} 4、别名机制5 、Mapper配置6、配置模板文件7、使用自动生成的主键 1、 问题 在上一篇mybtis的web项目中,我们最后有一个问题没有解决,就是dao的实现类,其代码很类似&#x…

Python 正则表达式(re)

🚀 个人主页:xmp65535 🚀 专栏:python技术专栏 目录 一、概述 二、基本概念 模式字符串 原始字符串 编译正则表达式 三、正则表达式的基本模式匹配 字符匹配 锚点 量词 四、常用函数 re.match() re.search() re.find…

Mybase 8.x 下载安装试用详细教程(Windows)

一、软件介绍 MyBase是一款本地笔记软件,它能够帮助你管理和组织大量的信息。 二、下载安装 下载:点我去下载页面 Mybase 软件目前主要实现了两种版本:Mybase Desktop (桌面版) 和 Mybase Server (网络版): 桌面版软件运行于 …

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售(广告)测量指南 --- 最新标准,2024年1月发布 目录 1出台此标准的目的是什么?2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会?6评价零售媒体效果的最…

金仓数据库Kingbase的数据库开发管理工具KStudio连接乱码

背景: 金仓数据库V8R6,KStudio在Windows10上运行,JDK8 问题: 使用客户端连接数据库时,提示信息乱码,首选项设置字符集不管用,具体如下图所示: Before: After&#xff1…

谷歌(Google)历年编程真题——给字符串添加加粗标签

谷歌历年面试真题——数组和字符串系列真题练习。 给字符串添加加粗标签 给定字符串 s 和字符串数组 words。 对于 s 内部的子字符串&#xff0c;若其存在于 words 数组中&#xff0c; 则通过添加闭合的粗体标签 <b> 和 </b> 进行加粗标记。 如果两个这样的子字…

软件设计师——1.备考提纲

知识点说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、设计模式16.00%数据结构与算法10数组、栈、队列、树与二叉树、图、查找与排序、常见算法13.33%程序设计语言6文法…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近&#xff0c;众多会计专业人士和学生都开始准备报名参加这一行业的重要考试&#xff0c;报名时间为4月8日至4月30日。报名过程中&#xff0c;一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里&#xff0c;如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写&#xff0c; {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

结合 linux 0.11 源码分析为什么 fork 函数会返回两个值

#&#xff08;1&#xff09;学习资料是这些书 以及赵炯博士的完全剖析。谢谢这些大师与网上优秀的文章。 #&#xff08;2&#xff09;看 linux 0.11 源码是 sourceinlight 4.这里附上一个安装包。 由本图可知&#xff0c; main 函数对 fork 函数的调用。 fork 函数实际是定…

掌握苹果电脑保养秘籍,全方位维护指南!

苹果电脑&#xff08;Mac&#xff09;凭借卓越的性能表现、精致的设计美学以及深入人心的操作系统体验赢得了全球用户的高度评价。不过&#xff0c;无论是哪款顶级配置的Mac产品&#xff0c;都需要经过适时且恰当的保养维护&#xff0c;才能持续展现最优性能。 苹果电脑维护小…

python应用题例子--改试卷

要求&#xff1a;在现实生活中&#xff0c;写一些小函数帮助老师改卷子&#xff0c;比如选择题&#xff0c;本次数学题有12道&#xff0c;正解答案是ABCDCCDDBABA,请根据正确答案&#xff0c;找出学生的错误题并统计正常率。 CORRECT_ANSWERS"ABCDCCDDBABA" #一般习…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

Django之五种中间件定义类型—process_request、process_view、process_response.......

目录 1. 前言 2. 基础中间件 3. 如何自定义中间件 4. 五种自定义中间件类型 4.1 process_request 4.2 process_view 4.3 process_response 4.4 process_exception 4.5 process_template_response 5. 最后 1. 前言 哈喽&#xff0c;大家好&#xff0c;我是小K,今天咋们…

openhomeny鸿蒙arkts笔记

基于api9&#xff0c;创建arkts file&#xff0c;之前是java或者kotlin代码&#xff0c;转鸿蒙代码的一些笔记 1、final用readonly代替 2、Exception用Error代替 3、String用string代替 4、int&#xff0c;long&#xff0c;float&#xff0c;double等用number代替 5、要给…

探索GlassWire:网络安全与流量监控软件

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍1、GlassWire(免费版本)2、核心特点二、下载安装① 下载(免费版本)② 安装三、使用方法①如何使用?②语言切换③流量监控四、总结

Pytest教程:一文了解如何使用 pytest_runtest_makereport 修改 Pytest 测试报告内容

在软件测试过程中&#xff0c;生成清晰、易读的测试报告对于团队交流、问题追踪和项目进度评估至关重要。Pytest 是一个功能强大的 Python 测试框架&#xff0c;它不仅支持丰富的断言和测试用例组织方式&#xff0c;还提供了灵活的插件系统和钩子函数&#xff0c;可以帮助我们定…