cakePHP+Redisでpaginateする

Twitter ツイート Hatena Bookmark ブックマーク

最近Redisの凄さに感動を受けました。
memcachedと違ってセットとかリストとか使えるのとかもうヨダレがとまりません(^p^)

リストがつかえるってことはcakeでページネートできちゃったら素敵すぎるってことで実装してみようと思った訳です。
基本的にModelにpaginateとpaginateCountを実装してあげればいいだけ何ですが…w

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Redis extends AppModel
{

	var $useTable = false;

	var $Redis;

	function __construct() {
		$this->Redis = new Redis();
		$this->Redis->connect('127.0.0.1',6379);
		$this->Redis->setOption(Redis::OPT_SERIALIZER,Redis::SERIALIZER_PHP);
	}

	function paginate( $conditions, $fields, $order, $limit, $page, $recursive, $extra ) {

		if ( $page < 1 ) {
			$page = 1;
		}

		// 開始位置、終了位置
		$start = ( $page - 1 ) * $limit;
		$end   = $start + $limit - 1;

		$key = isset( $conditions['key'] ) ? $conditions['key'] : null;
		return $redis->lRange( $key, $start, $end );
	}

	function paginateCount( $conditions = null ) {
		$key = isset( $conditions['key'] ) ? $conditions['key'] : null;
		return $redis->lSize( $key );
	}

}

ただし、Paginatorヘルパーのsortとかには対応していないので、使用しないでくださいね^^
一応ページ送りは実装できると思いますが…

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。