当前位置: 首页 > news >正文

曹县做网站新网站怎么做才能可以在百度上搜索到

曹县做网站,新网站怎么做才能可以在百度上搜索到,网站设计有哪些,服务器租用多少钱一月本文目录 一、投票功能投票流程实现代码redis投票 一、投票功能 投票流程 首先我们要明确#xff0c;就是 谁#xff08;哪个用户#xff1a;userID#xff09; 给 哪个帖子#xff08;postID#xff09; 投了 什么票#xff08;赞成票or反对票#xff09;。 赞成票… 本文目录 一、投票功能投票流程实现代码redis投票 一、投票功能 投票流程 首先我们要明确就是 谁哪个用户userID 给 哪个帖子postID 投了 什么票赞成票or反对票。 赞成票越多热度越高就会越展示在前面。 在redis中可以用zset存储帖子那么有两种存储方式。 一是根据帖子的发布时间存储帖子根据时间戳来时间越新时间戳越大越在前面或者是按照评分来存储帖子。 然后还可以设计一个zset用来存储给某个帖子投票用户。哪个用户投了赞成票就记为1投了反对票就记为-1。 所以总的来设计了一个帖子算法投一张赞成票就加对应的分数比如400分。 时间戳赞成票*400分评分评分越高越放前面。 实现代码 首先我们封装了投票数据的结构体。 然后是controller层。 然后就是具体投票的业务逻辑实现部分Logic.VoteForPost。 strconv.Itoa 是一个函数用于将整数转换为字符串。它要求输入必须是 int 类型因此这里使用了 int(userId) 将 userId 转换为 int。将用户 ID 转换为字符串格式因为 Redis 的键通常是以字符串形式存储的。 redis投票 来看看投票的情况 v1时有两种情况1.之前没投过票现在要投赞成票 -- 更新分数和投票记录 差值的绝对值1 4322.之前投过反对票现在要改为赞成票 -- 更新分数和投票记录 差值的绝对值2 432*2v0时有两种情况1.之前投过反对票现在要取消 -- 更新分数和投票记录 差值的绝对值1 4322.之前投过赞成票现在要取消 -- 更新分数和投票记录 差值的绝对值1 -432v-1时有两种情况1.之前没投过票现在要投反对票 -- 更新分数和投票记录 差值的绝对值1 -4322.之前投过赞成票现在要改为反对票 -- 更新分数和投票记录 差值的绝对值2 -432*2除此之外我们还有对投票的限制 每个帖子自发起之日起一个星期之内允许用户投票超过一个星期就不允许投票了。同时到期之后将redis中保存的赞成票数及反对票数存储到mysql表中。到期之后删除 KeyPostVotedZSetPrefix。 这里的 KeyPostVotedZSetPrefix 就是记录用户及投票类型。 我们来看看redis.go的相关代码其中client就是redis客户端。 在service层中设置了相关的逻辑代码来看看处理流程。 首先我们需要去redis中获取帖子的发布时间从client中拿即可。并检查当前时间与帖子发布时间的差值是否超过一周OneWeekInSeconds。如果超过一周返回错误 ErrorVoteTimeExpire表示投票已过期。 我们在redis的目录路径下封装了error错误声明了几个自定义错误变量。这些错误变量用于在 Redis 相关的操作中表示特定的错误情况。errors.New 是一个常用的error函数用于创建一个新的错误对象。 通过定义全局的错误变量为 Redis 相关的操作提供了一致的错误处理机制。使用 errors.New 创建的错误对象可以在整个包中复用避免了重复创建相同的错误信息提高了代码的可维护性和一致性。 比如当投票时间已经过期了我们就需要返回投票过期的错误。 postTime : client.ZScore(KeyPostTimeZSet, postID).Val()ZScore 方法查询帖子 ID 对应的分数发布时间并通过 Val() 方法获取该分数的实际值。返回的 postTime 是一个浮点数表示帖子的发布时间通常是 Unix 时间戳。 ZScore 是 Redis 客户端提供的一个方法用于从有序集合ZSet中获取某个成员的分数。它的签名通常是 func (c *Client) ZScore(key string, member string) *FloatCmdkey有序集合的键名唯一标识键名是 Redis 数据库中唯一标识有序集合的字符串。通过键名你可以访问和操作特定的有序集合。 member有序集合中的成员在这里是帖子的 ID。 在刚刚我们有提到const KeyPostTimeZSet bluebell:post:time这是一个常量定义了存储帖子发布时间的有序集合的键名。 然后就是更新帖子分数注意更新帖子分数记录用户为该帖子投票的数据 是要放在一个redis事务中完成的。 在 Redis 中Pipeline管道 是一种用于将多个命令发送到服务器的技术而 事务Transaction 是一种将多个命令打包并一次性执行的机制。在 Redis 的上下文中Pipeline 和事务经常结合使用以提高性能和确保操作的原子性。 事务 是一种将多个命令打包并一次性、顺序地执行的机制。Redis 的事务通过 MULTI、EXEC、DISCARD 和 WATCH 命令实现。事务的主要特点包括事务中的所有命令要么全部执行要么全部不执行。这确保了操作的原子性避免了部分执行导致的数据不一致问题。事务中的命令会按照顺序执行不会被其他客户端的命令打断。 KeyPostVotedZSetPrefix bluebell:post:voted: // zset;记录用户及投票类型;参数是post_id刚刚我们定义了redis的常量所以我们需要进行下面的操作 key : KeyPostVotedZSetPrefix postIDov : client.ZScore(key, userID).Val()也就是从 redis中获取 某个帖子 的 用户投票类型根据用户ID来获取Val值。 也就是下面这个图所示 ov : client.ZScore(key, userID).Val()// 更新如果这一次投票的值和之前保存的值一致就提示不允许重复投票if v ov {return ErrVoteRepested}var op float64if v ov {op 1} else {op -1}diffAbs : math.Abs(ov - v) // 计算两次投票的差值pipeline : client.TxPipeline() // 事务操作_, err pipeline.ZIncrBy(KeyPostScoreZSet, VoteScore*diffAbs*op, postID).Result() // 更新分数通过Redis事务来更新分数。 TxPipeline() 是 Redis 客户端提供的一个方法用于创建一个事务性 Pipeline。这个 Pipeline 允许将多个命令打包在一起并作为一个事务发送到 Redis 服务器。 ZIncrBy 是 Redis 的一个命令用于在有序集合ZSet中增加某个成员的分数。 if v 0 {_, err client.ZRem(key, userID).Result()} else {pipeline.ZAdd(key, redis.Z{ // 记录已投票Score: v, // 赞成票还是反对票Member: userID,})}_, err pipeline.Exec() //执行pipeline中的所有命令如果v0那么从有序集合中移除指定的成员。 client.ZRemRedis 客户端提供的方法用于从有序集合中移除指定的成员。 pipeline.ZAddRedis 客户端提供的方法用于将一个成员及其分数添加到有序集合中。这里使用了事务性 Pipeline确保操作的原子性。 redis.Z一个结构体包含成员Member和分数Score。 Score用户的投票值v表示赞成票1或反对票-1。 Member用户的唯一标识符userID。 在 Redis 中有序集合ZSet相关的命令都以 Z 开头例如 ZADD、ZSCORE、ZINCRBY、ZREM 等。 Redis 的有序集合命令都以 Z 开头例如 ZADD将一个或多个成员及其分数添加到有序集合中。 ZSCORE获取有序集合中成员的分数。 ZINCRBY增加有序集合中成员的分数。 ZREM从有序集合中移除成员。 可以看到再投出一票之后在原先的redis基础上加了432分。
http://www.w-s-a.com/news/779448/

相关文章:

  • 上传文件网站根目录wordpress博客管理
  • 网站seo优缺点网站建设公司咨
  • 网站设计需要会什么建设网站的目的以及意义
  • 怎么样推广自己的网站wordpress register_form
  • 网站公司建站凤翔网站建设
  • 网站建设协低价格的网站建设公司
  • 研发网站建设报价深圳网站建设前十名
  • 宠物发布网站模板wordpress中文免费电商模板
  • 济南做网站创意服装品牌策划公司
  • 本地电脑做视频网站 外网连接不上软件商城源码
  • 足球直播网站怎么做crm系统介绍
  • 株洲网站建设联系方式东莞凤岗网站制作
  • 小纯洁网站开发如何注册域名
  • 网上做试卷的网站如何把刚做的网站被百度抓取到
  • 滕州网站建wordpress用户中心按钮不弹出
  • 清远新闻最新消息福建seo搜索引擎优化
  • 凡客建站网微信网站怎么做的
  • 网站建设费怎么写会计科目行业网站建设公司
  • 网站里的友情链接网站建设个人简历的网页
  • 佛山自助建站软件湖南seo优化推荐
  • 免费微信微网站模板下载不了优化人员配置
  • wordpress 导航网站主题画流程图的网站
  • 皮卡剧网站怎样做排名网
  • 网站开发 兼职哪个网站是做安全教育
  • 商品展示类网站怎么用群晖nas做网站
  • 长腿蜘蛛wordpresssem优化推广
  • 中国铁路建设监理协会官方网站深圳福田区怎么样
  • 互联网网站开发发展wordpress文章自定义栏目
  • 众筹网站平台建设工信部网站备案系统
  • 网站301重定向代码wordpress 加子目录