美文网首页
Redis基础

Redis基础

作者: 张老三168 | 来源:发表于2018-04-18 14:21 被阅读0次

    什么是Redis

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库
    Redis 与其他 key - value 缓存产品有以下三个特点:

    • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
    • Redis支持数据的备份,即master-slave模式的数据备份

    Redis 优势

    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
    • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来
    • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

    Redis连接

    远程连接redis客户端: redis-cli -h host -p port -a password
    设置redis密码 config set requirepass password

    命令 描述
    auth password 验证密码是否正确
    echo message 打印字符串
    ping 查看服务是否运行
    quit 关闭当前连接
    select index 切换到指定的数据库

    Redis keys 命令

    命令 描述
    del key 在key存在时删除key
    dump key 用于序列化给定 key ,并返回被序列化的值
    exists key 检测key是否存在 存在则返回1不存在则返回0
    expire key seconds 为给定 key 设置过期时间
    expireat key timestamp 左右和expirel类似,不同 的是expireat设置的参数是时间戳
    pexpire key milliseconds 为给定 key 设置过期时间 设置的参数是毫秒
    pexpireat key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
    key pattern 用于查找所有符合给定模式 pattern 的 key
    move key db 将当前数据库的key转移到另一个数据库
    persist key 移除 key 的过期时间,key 将持久保持
    ttl key 以秒为单位,返回给定 key 的剩余生存时间
    pttl 以毫秒为单位返回 key 的剩余的过期时间
    randomkey 从当前数据库中随机返回一个 key
    rename key newkey 修改 key 的名称
    renamenx key newkey 仅当 newkey 不存在时,将 key 改名为 newkey
    type key 返回key值的数据类型

    Redis 字符串(String)

    命令 描述
    set key value 设置指定 key 的值
    get key 获取对应key的值
    getrange key start end 获取key指定偏移量的值
    getset key value 设定指定key的值并返回该key之前的值
    setnx key value 仅当key不存在时设置其值
    setex key second value 设置key的值和过期时间
    setrange key offset value 将key的值从偏移量为offset的位置覆盖为value
    strlen key 返回指定key值的长度
    mset [key value...] 设置一个或多个 key-value 对
    msetnx [key value...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
    incr key 将key的数值自增1
    incrby key increment 将 key 所储存的值加上给定的增量值(increment)
    incrbyfloat key increment 将 key 所储存的值加上给定的浮点增量值(increment)
    decr key 将key值自减1
    decrby key increment key 所储存的值减去给定的减量值(decrement)
    append key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 指定value 追加到改 key 原来的值(value)的末尾

    Redis 哈希(Hash)

    Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象
    Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)

    命令 描述
    hset key field value 为哈希表中的字段赋值
    hget key filed 返回哈希表指定字段的值
    hgetall 返回哈希表中,所有的字段和值
    hexists key field 查看哈希表 key 中,指定的字段是否存在
    hdel key [field...] 删除指定哈希表指定字段
    hincrby key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
    hincrbyfloat key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment
    hkeys key 返回哈希表所有字段
    hlen key 返回哈希表字段的数量
    hmget key [field...] 获取哈希表多个字段的值
    hmset key[key value...] 同时设置哈希表多个字段值
    hsetnx key [key value...] 仅当哈希表字段不存在值设置多个字段值
    hvals key 返回哈希表所有值

    Redis 列表(List)

    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
    一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

    命令 描述
    lpush key [value...] 将一个或多个值插入到列表头部
    lpushx key [value...] 将一个值插入到已存在的列表头部
    lrange key start end 回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
    llen key 返回列表长度
    lpop key 移出并获取列表的第一个元素
    lrem key count value 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素
    lset key index value 通过索引来设置元素的值
    ltrim key start end 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
    lindex key 通过索引获取列表中的元素
    linsert key before or after private value 在指定元素的前或者后面插入元素
    blpop key timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    brpop key timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    brpoplpush source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    rpush key value 在列表中添加一个或多个值(尾部)
    rpop 移除并获取列表最后一个元素
    rpoplpush source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
    rpushx key value 为已存在的列表添加值

    Redis 集合(Set)

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
    Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
    集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

    命令 描述
    sadd key [value...] 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略
    scard key 获取集合的成员数
    sdiff key1[key2] 返回给定所有集合的差集
    sdiffstore destination key1[key2] 返回给定所有集合的差集并存储在 destination 中
    sinter key1[key2] 返回给定所有集合的交集
    sinterstore destination key1[key2] 返回给定所有集合的交集并存储在 destination 中
    sismember key value 判断 member 元素是否是集合 key 的成员
    smembers key 返回集合中的所有成员
    smove source destination value 将 member 元素从 source 集合移动到 destination 集合
    spop key 移除并返回集合中的一个随机元素
    srandmember key [count] 返回集合中一个或多个随机数
    screm key [value...] 移除集合中一个或多个成员
    sunion key1[key2] 返回所有给定集合的并集
    sunionstore destination key1[key2] 所有给定集合的并集存储在 destination 集合中
    SSCAN key cursor [MATCH pattern] 迭代集合中的元素

    Redis 有序集合(sorted set)

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    有序集合的成员是唯一的,但分数(score)却可以重复。
    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

    命令 描述
    zadd key score1 member1[score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
    zscard key 获取有序集合的成员数
    zcount key min max 计算在有序集合中指定区间分数的成员数
    zincrby key increment member 有序集合中对指定成员的分数加上增量 increment

    Redis 发布订阅

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
    Redis 客户端可以订阅任意数量的频道。
    下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:


    image.png

    当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:


    image.png
    命令 描述
    PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。
    PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。
    PUBLISH channel message 将信息发送到指定的频道
    PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道
    [SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息
    UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道

    Redis 事务

    Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务
    • 命令入队
    • 执行事务
    命令 描述
    multi 开启事物
    exec 提交事物
    discard 取消事物
    watch [key...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
    unwatch 取消 WATCH 命令对所有 key 的监视

    相关文章

      网友评论

          本文标题:Redis基础

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