php我爱编程

Redis

2014-10-17  本文已影响342人  BlockGeeks

redis 相关的可执行文件


redis 启动关闭等操作

  > sudo cp redis.conf /etc/redis/6379.conf
  > sudo update-rc.d redis_6379 defaults     # 使redis随系统自动启动

一个redis实例支持多个数据库,默认是16个。但每个数据库并不是完全隔离,例如FLUSHDB可以清空一个redis实例的所有数据库。因此不用的应用的数据应该存储在不同的redis实例中。

redis 键名最佳实践, 对象类型:对象ID:对象属性, 多单词推荐用逗号分隔
例如 user:1:friends


redis命令

利用命令批量删除key
> redis-cli KEYS "doctor:*" | xargs redis-cli DEL

系统级

DBSIZE # 获取键的数量
KEYS pattern # 获取符合规则的键名, pattern支持glob风格通配符格式:

?  匹配一个字符
*  匹配任意个字符
[]  匹配括号内的任意字符,可以使用 - 表示范围
\x  匹配x, 用于转义

CONFIG GET XXXX # 获取当前的配置值
SELECT n # 更换数据库,默认支持16个数据库, 默认是数据库0
EXISTS key # 判断一个键是否存在
DEL key [key ...] # 删除键
TYPE key # 获取键值的数据类型

字符串

SET key value
GET key
INCR key
DECR key

如何获得自增的ID: 对于每一类对象使用名为  对象类型(复数形式):count (例如 users:count ) 的键来存储当前对象的数量

INCRBY key increment # 增加指定的整数
DECRBY key decrement
INCRBYFLOAT key increment # 增加指定的浮点数
APPEND key value # 向键值的末尾追加 value, 若不存在则等同SET
STRLEN key # 获取字符串长度 (以utf-8编码时,一个中文长度是3)
MGET key [key ...]
MSET key value [key value ......]

位操作

GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end] # 获得字节范围内值是1的二进制个数
BITOP operation destkey key [key ...] # 位运算,包括 AND, OR, XOR, NOT

散列值

键, 字段, 字段值
HSET key field value
HGET key field
HMSET key field value [field value ......]
HMGET key field [field ......]
HGETALL key
HEXISTS key field # 判断一个字段是否存在
HSETNX key field value # 当字段不存在时,才执行赋值操作
HINCRBY key field increment
HDEL key field [field ......]
HKEYS key # 只获取字段名
HVALS key # 只获取字段值
HLEN key # 获取字段数量

列表

插入删除非常快,通过索引访问元素比较慢
LPUSH key value [value ......]
RPUSH key value [value ......]
LPOP key
RPOP key
LLEN key
LRANGE key start stop # 获取列表片段,包含两端的元素,支持负索引
LREM key count value # 删除指定的值

1> 当count>0, 从列表左边开始删除前count个值为value的元素
2> 当count<0, 从列表右边开始删除前|count|个值为value的元素
3> 当count=0, 删除所有值为value的元素

LINDEX key index # 获取指定索引的元素值
LSET key index value # 设置指定索引的元素值
LTRIM key start end # 只保留列表指定片段
LINSERT key BEFORE|AFTER pivot value # 向列表中指定元素的前/后插入元素
RPOPLPUSH source destination # 将元素从一个列表转移到另一个列表

集合

无序,唯一
SADD key member [member ......]
SREM key member [member ......]
SMEMBERS key # 获得集合中的所有元素
SISMEMBER key member # 判断是否是集合中的元素
SDIFF key [key ....] # 差集运算
SINTER key [key ...] # 交集运算
SUNION key [key ...] # 并集运算
SDIFFSTORE destination key [key ....] # 差集运算并存储结果
SINTERSTORE destination key [key ...] # 交集运算并存储结果
SUNIONSTORE destination key [key ...] # 并集运算并存储结果
SCARD key # 获取集合中的元素个数
SRANDMEMBER key [count] # 随机获取集合中的元素

  count>0 获取count个不重复的元素, count<0 获取count个可能重复的元素

SPOP key # 从集合中弹出一个元素

有序集合

有序,唯一,读取中间部分速度也很快
ZADD key score member [score member ....] # 加入一个元素和该元素的分数
ZSCORE key member # 获取元素的分数
ZRANGE key start stop [WITHSCORES] # 获取排名在指定范围内的元素列表,从小到大
ZREVRANGE key start stop [WITHSCORES] # 逆序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] # 获得指定分数范围的元素,从小到大,包含两端。若在分数前加‘(’表示不包括端点。offset 和 count 类似SQL中的用法,即在结果集的基础上向后偏移offset并只取前count个元素

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] # 逆序
ZINCRBY key increment member # 增加某个元素的分数, 增量可以为负数,表示减去
ZCARD key # 获取集合中的元素数量
ZCOUNT key min max # 获取指定分数范围内的元素个数
ZREM key member [member ......]
ZREMRANGEBYRANK key start stop # 按照排名范围删除元素,从小到大
ZREMRANGEBYSCORE key start stop # 按照分数范围删除元素,从小到大
ZRANK key member # 获得元素排名, 从小到大
ZREVRANK key member

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGREGATE SUM|MIN|MAX] # 计算多个有序集合的交集并存储结果,destination中的分数由AGREGATE参数决定。当是SUM(默认值),分数为每个参与计算的集合中该元素分数的总和;当是MIN,分数是每个参与计算的集合中该元素分数的最小值;当是MAX,则是最大值。WEIGHTS为每个参与计算的集合的分数权重,计算时分数会乘上该集合的权重。

ZUNIONSTORE 同上类似


事务

MULTI
若干命令
EXEC

事务中的错误处理:
1> 若出现语法错误,则事务中的所有命令都不会执行
2> 若出现运行时错误,其他命令依然会执行

WATCH / UNWATCH 命令
WATCH 命令监控一个或多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。监控一直持续到EXEC命令, 执行EXEC命令会取消对所有键的监控,也可以使用 UNWATCH 命令取消监控

EXPIRE key seconds # 为键设置生存时间
TTL key # 获取键的生存时间, 返回-1表示永久存在, -2 表示不存在这个键
PERSIST key # 取消键的生存时间,即设置为永久,SET/GETSET 为键赋值也会取消生存时间
PEXPIRE key microseconds # 同EXPIRE,区别在于单位是毫秒
PTTL key

注: 如果WATCH一个有生存时间的键,当这个键过期被删除时,并不会被WATCH命令认为该键发生了改变


排序


配置文件


Redis 管理工具

    > sudp apt-get install php5-fpm
    > sudo php-fpm   # 在OSX上需要手动启动该服务, 可能会出错需要修改配置文件/php-fpm.conf   

OSX上 php-fpm启动服务 参考文档

    > git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git
    > cd phpRedisAdmin
    > git submodule init
    > git submodule update
    > git clone https://github.com/nrk/predis.git vendor

当redis中的键数量过多时,可能会超出PHP的内存限制而出错。解除内存限制:
> vim vendor/src/Connection/StreamConnection.php
> 增加如下代码: ini_set('memory_limit','-1');

修改nginx配置文件中对php的配置:

   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

Redis与Mysql之间的数据同步

这个库通过分析mysql的binlog可将mysql中的数据操作同步到Redis。
实际项目中需要修改 site-packages/pymysqlreplication/row_event.py 中的 176行:

    if column.character_set_name == 'utf8mb4':
        column.character_set_name = 'utf8'
上一篇 下一篇

猜你喜欢

热点阅读