Redis

Redis 端口 : 6379

客户端登录

redis-cli

基础命令

  • Redis 默认 16 个库 0-15
    切换库 :select 0

  • 删除本库:flushdb

    删除所有库:flushall

  • 库记录数:dbsize

  • 显示所有记录:keys *

    显示 k开头两个字母的 : keys k?

  • 设置键值对: set k1 v1

    获取键对应值:get k1

五大数据类型

Redis 的数据都是 k v 形式 ,k 有点类似编程里 变量名的感觉, 而 v 可以是各种数据类型

  • String (二进制安全的String)
  • Set
  • ZSet(有序集 )
  • HashMap
  • List

String

  • 显示所有记录:

    keys *

  • 判断是否存在j键 :

    exists k1

    1 表示有

    0 表示没有

  • 移动到其他库:

    move k1 2 ( 2 为数据库 编号)

  • 查看还有多长时间过期:

    ttl k1

    -1 表示永不过期

    -2 表示已过期

  • 设置过期时间,单位 秒:

expire k1 7

  • 删除记录:

    del k1

  • 查看 key 类型 :

    type k1

  • 字符串追加

    append k1 12345

    ( k1 原来是 1 ,执行完成后变为 112345)

  • 字符串长度

    strlen k1

    (012345的长度为 6)

  • 数字增加 1

    incr k1

  • 数字减少 1

    decr k1

  • 数字增加

    incrby k1 3

  • 数字减少

    decrby k1 3

  • 获取字符下标范围取字符串

    getrange k1 0 3

    (取 k1 对应字符串的 前 4 个字符 如 k1 为1123456 , 取得 1123 )

  • 在指定范围设值

    setrange k1 0 xxx

    (如 k1 1123456 变为 xxx3456 )

  • 设置值的同时设置过期时间 单位 秒

    setex k1 10 v1

    (设置 k1 为 v1 ,存活 10s )

  • 如果不存在才设置值

    setnx k1 v11

    生效返回 1 ,未生效返回 0

  • 同时设置多个 kv

    mset k1 v1 k2 v2 k3 v3

  • 同时获取多个

    mget k1 k2 k3

  • 同时设置多个 kv (不存在时才设置,有任何一个 k 设置失败,所有的 k 都不会设置)

    msetnx k1 v1 k2 v2

List

  • 从左侧添加

    lpush list01 1 2 3 4 5

    (依次从左添加 ,结果是 5 4 3 2 1)

  • 从右侧添加

    rpush list02 1 2 3 4 5

    (依次从右添加 ,结果是 1 2 3 4 5 )

  • 按范围显示 list

    lrange list02 0 -1

    (1 2 3 4 5 ,负数表示倒数 ,-1 即倒数第 1)

  • 从左侧取出(取到并移除)一个

    lpop list01

  • 从右侧取出一个

    rpop list01

  • 按下标取元素

    lindex list01 1

    (取下标为 1,即 第 2 个元素)

  • 获得 list 长度

    llen list01

  • 删 n 个 value

    lrem 2 3

    删除 2 个 value 为 3 的

  • 截取 key 指定范围并赋值给 key

    ltrim list01 3 5

    (截取 list01 下标 3 到 5 的元素 ,并赋给 list01)

  • 取出并放入

    rpoplpush list01 list02

    ( 从 list01 右侧取出,放入 list02 左侧 )

  • 设置 下标 为 n 的元素 值

    lset list01 1 x

    (把下标 为1 的元素设置为 x)

  • 在元素前插入

    linsert list01 before x java

    (在元素 x 前面插入 java )

  • 在元素后插入

    linsert list01 after x oracle

    ( 在元素 x 后面插入 oracle )

Set

  • 向 set 中添加

    sadd set01 1 1 2 2 3 3

  • 查询 set 中全部元素

    smembers set01

  • 查询元素是否存在

    sismember set01 1

    (存在返回 1 ,不存在返回 0)

  • 获取 set 元素数量

    scard set01

  • 删除 set 中的元素

    srem set01 3

  • 随机获得 n 个元素

    srandmember set01 3

    (从 set01 中随机出 3 个元素)

  • 随机出栈(取得并移除) 1个元素

    spop set01

  • 把一个 set 中的 元素,移动到 另一个 set

    smove set01 set02 5

    (把 set01 里面的 5 ,移动到 set02)

  • 差集

    sdiff set01 set02

    (返回 在 set01 里 且 不在 set02 里面的元素)

  • 交集

    sinter set01 set02

  • 并集

    sunion set01 set02

Hash

相当于 k v 的 v 是 键值对

  • 设置键值对

    hset user id 11

    ( 相当 Map user ; user.put( id ,11 ) 的意思 )

  • 获得值

    hget user id

  • 设置多组键值对

    hmset customer id 11 name zs age18

  • 获取对组键的值

    hmget customer id name

  • 获取全部键值对

    hgetall customer

  • 删除

    hdel customer name

  • 返回j键值对数量

    hlen customer

  • 是否存在

    hexists customer name

  • 返回所有键

    hkeys customer

  • 返回所有值

    hvals customer

  • 增加值

    hincrby customer age 2

    (对 customer 的 age 增加 2)

  • 增加值(浮点型版本)

    hincrbyfloat customer score 1.5

  • 如果不存在才设置键值对

    hsetnx customer age 16

ZSet

相当于

  • 添加

    zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 100 v6

  • 查询

    zrange zset01 0 -1

    结果为 : v1 v2 v3 v4 v5

  • 带分数查询

    zrange zset01 0 -1 withscores

    结果为 v1 60 v2 70 v3 80 v4 90 v5 100 v6 100 ( 分数和结果是一体的 ,只是这么显示而已)

  • 返回分数在范围内的

    zrangebyscore zset01 60 90

    返回分数 60-90 的包括 60 和 90

    v1 v2 v3 v4

  • 同上 但不包括 90

    zrangebyscore zset01 60 (90

  • 同上 但不包括 60 90

    zrangebyscore zset01 (60 (90

  • 将结果截取

    zrangebyscore 60 90 limit 1 2

    从结果中下标为 1 即第 2 个,截取两个返回

  • 移除

    zrem zset01 v5

  • 统计个数

    zcard zset01

  • 统计 分数范围内的数量

    zcount zset01 60 80

  • 返回 排名

    zrank zset01 v4

    返回 v4 的排名,按照分数从小到大,分数相同时按照 v 的从小到大顺序排

  • 返回逆序排名的下标

    zrevrank zset01 v4

  • 逆序显示范围内的元素

    zrevrange zset 0 -1

  • 逆序按分数范围显示元素

    zrevrangebyscore zset01 90 60

配置文件

  • 获取配置文件 某一项的值

    config get requirepass

  • 改密码

    config set requirepass "123456"

  • 用密码认证

    auth 123456

    (redis-cli 登录后 做操作会提示没有权限,在 Redis 客户端内 输入此命令进行认证)

  • 获取 redis 在那个目录下启动的

    config get dir

持久化

rdb :

每隔一段时间,把所有数据存到文件中,此时会把内存中的数据,整个复制一份到内存中,这时对内存的消耗很大

备份策略:

配置文件里

save 900 1
save 300 10
save 60 10000

表示没 900 秒内,有 1 次改动,则备份

  • 运行时主动备份

    客户端内命令: save

    注意 flushall 清空操作,也会导致立即备份,但是这样做毫无意义

  • 如何恢复

    直接把 dump.rdb 文件放在启动目录下

aof

aop 是把对 redis 的操作记录下来,以此来达成备份

默认备份文件名:appendonly.aof

配置文件中

  • 备份文件超过多大时候开始对操作记录进行整合,重写备份文件

    auto-aof-rewrite-min-size 64mb

    实际生产环境中,保守估计 数据要 3G 起步

  • 修复受损的 aof 文件

    redis-check-aof --fix appendonly.aof

rdb 和 aof 优先级

如果 dump.rdb 和 appendonly.aof 同时存在,则使用 aof 文件

事务

  • 开启事务:

    multi

  • 执行:

    exec

    • 如果事务中出现编译时异常,命令不合规范,则整个事务失败
    • 如果事务中出现运行时异常,如对字符型数据 xx 做自增,则只有此命令失败,事务中的其他命令正常执行
  • 放弃事务

    discard

  • 监视

    wath k1

    (监视一个或多个 key ,在事务执行前,如果监视的 key 被改动,则整个事务执行失败)

watch k1 k2
multi 
set k1 v11
set k2 v22
exec 

如果 在 watch 后 exec 前,其他客户端执行 set k1 v1xx,则 整个事务执行失败

消息

  • 订阅频道

    subscribe c1 c2 c3

    可以使用通配符

    subsribe c*

  • 发送消息

    publish c2 hello-redis

主从复制

默认配置下

从机连接主机:从机 会完全复制主机的数据,包括连接主机命令执行前,主机拥有的数据

从机不能写

主机挂了:从机仍作为从机正常使用

主机回来:从机会自动续接上

从机挂了,再回来:需要重新输入命令连接主机,可以写进配置文件在启动时直接连接主机

  • 显示信息

    info replication

  • 配置跟从主机

    slaveof 127.0.0.1 6379

    (会完全复制主机的数据,包括命令执行前,主机拥有的数据)

薪火相传

  • 主机的从机,可以作为其他从机的主机,但是只起一个传递的效果,

反客为主

  • 停止与其他数据库的同步,自己成为主机

    slaveof no one

哨兵模式

主机死了之后,自动分配一个从机作为新的主机

主机重启启动后,会作为从机连接新的主机

sentinel.conf

sentinel monitor 被监控数据库的名字 被监控的数据库ip 被监控的数据库端口号 重新分配主机时需要获得的投票数

sentinel monitor host6379 127.0.0.1 6379 1
  • 启动一个哨兵进程

    redis-sentinel sentinel.conf

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