#### 发布文章
~~~
//一票的分数
const SCORE = 86400 / 200;
//发布文章
function postArticle($redis,$author_id, $title, $link)
{
$article_id = $redis->incr("article:"); //获取文章ID
$voted = 'voted:' . $article_id;
$redis->sAdd($voted, 'user:' . $author_id); //将作者id添加到集合中
$redis->expire($voted, 7 * 86400); //设置过期时间
$now = time();
$article = 'article:' . $article_id;
$redis->hMset($article, [
'author' => $author_id,
'title' => $title,
'link' => $link,
'time' => $now,
'votes' => 1,
]);
$redis->zAdd('score:', $now + SCORE, $article); //分数
$redis->zAdd('time:', $now, $article); //创建时间
$redis->close(); //关闭流
return $article_id;
}
~~~
#### 对文章进行投票
~~~
function articleVote($redis,$user_id, $article_id)
{
$cutoff = time() - 7 * 86400;
if ($redis->zScore('time:', 'article:' . $article_id) < $cutoff) { //检查投票是否截止
echo "投票已截止";
return;
}
$bool = $redis->sIsMember('article:' . $article_id, $user_id); //检查是否已投过票
if (!$bool) {
echo "你已投过票";
return;
}
$redis->sAdd('article:' . $article_id, $user_id); //记录投票的用户ID
$redis->zIncrBy('score:', SCORE, 'article:' . $article_id); //增加分数
$redis->hIncrBy('article:' . $article_id, 'votes', 1);
$redis->close();
}
~~~
#### 对文章进行分组
~~~
~~~
- Redis简介
- 简介
- 典型应用场景
- Redis安装
- 安装
- redis可执行文件说明
- 三种启动方法
- Redis常用配置
- API的使用和理解
- 通用命令
- 数据结构和内部编码
- 单线程
- 数据类型
- 字符串
- 哈希
- 列表
- 集合
- 有序集合
- Redis常用功能
- 慢查询
- Pipline
- 发布订阅
- Bitmap
- Hyperloglog
- GEO
- 持久化机制
- 概述
- snapshotting快照方式持久化
- append only file追加方式持久化AOF
- RDB和AOF的抉择
- 开发运维常见问题
- fork操作
- 子进程外开销
- AOF追加阻塞
- 单机多实例部署
- Redis复制原理和优化
- 什么是主从复制
- 主从复制配置
- 全量复制和部分复制
- 故障处理
- 开发运维常见问题
- Sentinel
- 主从复制高可用
- 架构说明
- 安装配置
- 客户端连接
- 实现原理
- 常见开发运维问题
- 高可用读写分离
- 故障转移client怎么知道新的master地址
- 总结
- Sluster
- 呼唤集群
- 数据分布
- 搭建集群
- 集群通信
- 集群扩容
- 集群缩容
- 客户端路由
- 故障转移
- 故障发现
- 故障恢复
- 开发运维常见问题
- 缓存设计与优化
- 缓存收益和成本
- 缓存更新策略
- 缓存粒度控制
- 缓存穿透优化
- 缓存雪崩优化
- 无底洞问题优化
- 热点key重建优化
- 总结
- 布隆过滤器
- 引出布隆过滤器
- 布隆过滤器基本原理
- 布隆过滤器误差率
- 本地布隆过滤器
- Redis布隆过滤器
- 分布式布隆过滤器
- 开发规范
- 内存管理
- 开发运维常见坑
- 实战
- 对文章进行投票
- 数据库的概念
- 启动多实例