Redis

作者: BlockGeeks | 来源:发表于2014-10-17 01:52 被阅读342次

    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之间的数据同步

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

        if column.character_set_name == 'utf8mb4':
            column.character_set_name = 'utf8'
    

    相关文章

      网友评论

        本文标题:Redis

        本文链接:https://www.haomeiwen.com/subject/uiyptttx.html