Redis

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'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • redis是一个以key-value存储的非关系型数据库。有五种数据类型,string、hashes、list、s...
    林ze宏阅读 984评论 0 0
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,265评论 0 36
  • 一、Redis基础 1.概述 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的W...
    郑元吉阅读 293评论 0 0
  • Ubuntu下安装redis 安装redis 在 Ubuntu 系统安装 Redi 可以使用以下命令: 启动 Re...
    riverstation阅读 906评论 0 0
  • 常用管理命令 1、启动Redis >redis-server[--port6379] 如果命令参数过多,建议通过配...
    weizilong阅读 611评论 0 0