Redis学习笔记-Sets类型及操作

1、SADD key member

向名称为key的set中添加member。

2、SREM key member

删除名称为key的set中元素member。

3、SPOP key

随机返回并删除名称为key的set中一个元素。

4、SDIFF key [key …]

返回所有给定key与第一个key的差集。

5、SDIFFSTORE destination key [key …]

返回所有给定key与第一个key的差集,并另存到另一个key。 继续阅读Redis学习笔记-Sets类型及操作

Redis学习笔记-Lists类型及操作

1、LPUSH key value

在key对应list的头部添加字符串元素。

2、RPUSH key value

在key对应list的尾部添加字符串元素。

3、LINSERT key before|after piovt value

在key对应list的特定位置之前或者之后添加字符串元素

4、LSET key index value

设置list中指定下标的元素值(下标从0开始)。

5、LREM key count value

从key对应的list中删除count个和value相同的元素。

count > 0时,按从头到尾的顺序删除。

count < 0时,按从尾到头的顺序删除。

count = 0时,删除全部。

继续阅读Redis学习笔记-Lists类型及操作

Redis学习笔记-hashes类型及操作

1、HSET key field value

设置hash field为指定值,如果key不存在,则先创建。

2、HSETNX key field value

设置hash field为指定值,如果key不存在,则先创建。如果key已存在,设置失败返回0。

3、HMSET key field value field2 value

同时设置多个field。

4、HGET key field

获取指定的field值。

5、HMGET key field field2

获取多个指定的field值 继续阅读Redis学习笔记-hashes类型及操作

Redis学习笔记-Strings类型及操作

1、SET key value

设置key对应的值为string类型的value。

2、SETNX key value

设置key对应的值为string类型的value.如果key已经存在返回0.

3、SETEX key seconds value

设置key对应的值为string类型的value,并指定此键值对应的有效期。

4、SETRANGE key offset value

设置指定key的value值的子字符串。

5、MSET key value key2 value2

一次设置多个key的值,成功返回OK,表示所有值都被成功设置。失败返回0 表示没有任何值被设置。 继续阅读Redis学习笔记-Strings类型及操作

《Redis设计与实现》学习笔记-简单动态字符串

Redis没有直接使用传统的c字符串,而是自己构建了SDS(simple dynamic string)简单动态字符串。并将SDS作为Redis的默认字符串使用。

SDS与传统C字符串有以下区别

1、常数复杂度获取字符串长度

C字符串并不记录自身长度,所以要获取一个c字符串长度必须遍历整个字符串并进行计算。所以获取一个字符串长度复杂度为O(N)。

SDS的len属性记录自身长度,所以获取字符串长度的复杂度为O(1).

2、杜绝缓冲区溢出

C字符串不记录自身长度,在没有分配给足够内存时增加字符串长度很容易会造成缓存溢出。

当SDS API需要对SDS进行修改时,API会先检测SDS是否满足修改所需的要求,如果不满足SDS API会自动将SDS的空间扩展至所需大小。 继续阅读《Redis设计与实现》学习笔记-简单动态字符串

【转】浅谈设计模式

讲一讲在工作中用到的面向对象设计模式,供大家参考,之后也会继续更新。

面向对象设计(OOD)的七大原则

在面向对象设计中,首先有这几大原则作为前提,然后在此基础之上有了各类设计模式。

开闭原则

开闭原则(Open-Closed Principle, OCP), 一个软件实体应该对扩展开放,对修改关闭。即软件实体应该在尽量不修改代码的情况下进行扩展。在该原则中,软件实体可以指一个软件模块,一个由多个类组成的局部结构或者一个独立的类。

开闭原则是面向对象的可复用设计的第一块基石,他是最重要的设计原则。为了满足开闭原则,需要对系统进行抽象化设计,抽象是开闭原则的关键。

里式替换原则

Liskov Substitution Principle(LSP),里式替换原则,该原则规定“子类必须能够替换其父类,否则不应当设计为其子类”。换句话说,父类出现的地方,都应该能够由其子类代替。所以子类只能去扩展基类,而不是隐藏或则覆盖基类。

继续阅读【转】浅谈设计模式

【转】PHP编码规范

文件标记

所有PHP文件,代码标记均使用完整的PHP标签,不建议使用短标签。

<?php
  echo 'Hello world';
?>

<?
  //短标签不推荐
  echo 'Hello world';
?>

 文件格式

文件编码 为无 BOM 的 UTF-8。

纯PHP类文件,文件最后 ?> 要省略。

TextMate

在 “文件编码” 中,选择 “UTF-8(推荐)”在 “换行符” 中,选择 “LF(推荐)” 继续阅读【转】PHP编码规范

Yii分页的使用

1、Controller中action

<?
use yii\data\Pagination;
....
public function actionList()
{
  $query = Article::find()->where(['status' => 1]);
  $countQuery = clone $query;
  $pages = new Pagination(['totalCount' => $countQuery->count()]);
  $models = $query->offset($pages->offset)
      ->limit($pages->limit)
      ->all();
  return $this->render('index', [
      'models' => $models,
      'pages' => $pages,
   ]);
}

默认分页的数量是20,你可以设置pageSize为你想要的

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageSize' => 5, 
]);

继续阅读Yii分页的使用