redis 相关的可执行文件
-
redis-server Redis服务器
-
redis-cli Redis客户端
-
redis-benchmark Redis 性能测试工具
-
redis-check-aof AOF文件修复工具
-
redis-check-dump RDB文件检查工具
redis 启动关闭等操作
-
直接启动
redis-server --port 6379 // 默认使用 6379 端口
redis-server /etc/redis/redis.conf // 指定配置文件 -
通过初始化脚本启动
在Redis源码包的utils文件中有 redis_init_script 初始化脚本文件
我们需要配置redis的运行方式,持久化文件,日志文件的存储位置等
通过一下步骤使redis随系统启动:
> sudo cp utils/redis_init_script /etc/init.d/redis_6379
> sudo mkdir /etc/redis # 存放redis的配置文件
> sudo mkdir /var/redis/6379 # 存放redis的持久化文件
修改配置文件:
port = 6379 # 监听的端口号
daemonize yes # 以守护进程模式运行
dir /var/redis/6379 # 设置持久化文件存储位置
pidfile /var/run/redis_6379.pid
> sudo cp redis.conf /etc/redis/6379.conf
> sudo update-rc.d redis_6379 defaults # 使redis随系统自动启动
- 停止redis
redis-cli SHUTDOWN
-
redis-cli 客户端
redis-cli -h 127.0.0.1 -p 6379 redis-cli ping # 测试连接是否正常 redis-cli --raw # 可以防止中文显示乱码
一个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命令认为该键发生了改变
排序
- SORT key [ALPHA] [DESC] [LIMIT offset count]
- SORT key BY somekey[->somefiled] [DESC] [LIMIT offset count] GET somekey[->somefield] STORE new-key
配置文件
-
maxmemory 最大可使用内存大小,单位字节。当超出限制时会根据 maxmemory-policy 参数指定的策略来删除不需要的键。
-
maxmemory-policy 支持 volatile-lru, allkeys-lru, volatile-random, allkeys-random, volatile-ttl, noeviction
-
maxmemory-samples 当内存不足时,每次删除的键的数量
Redis 管理工具
- phpRedisAdmin
安装步骤:
> sudo apt-get install nginx # ubuntu12.04上nginx默认根目录在/var/share/nginx/html, 可以通过修改配置文件更改根目录
nginx 相关命令
> sudo service nginx start/stop/restart
> sudo nginx
> sudo ngix -s stop/reload
> 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之间的数据同步
- 第三方库: python-mysql-replication
https://github.com/noplay/python-mysql-replication
这个库通过分析mysql的binlog可将mysql中的数据操作同步到Redis。
实际项目中需要修改 site-packages/pymysqlreplication/row_event.py 中的 176行:
if column.character_set_name == 'utf8mb4':
column.character_set_name = 'utf8'
网友评论