#### 發布文章
~~~
//一票的分數
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布隆過濾器
- 分布式布隆過濾器
- 開發規范
- 內存管理
- 開發運維常見坑
- 實戰
- 對文章進行投票
- 數據庫的概念
- 啟動多實例