美文网首页
Redis 黑马(学习记录)

Redis 黑马(学习记录)

作者: 牍中玉的小木屋 | 来源:发表于2019-12-02 10:04 被阅读0次

    redis: remote dictionary server 远程数据服务,内存高速缓存数据库,C语言编写的

    数据保存在内存中,数据模型为key-value,redis实现了内存中数据的持久化,定时存储到硬盘中。

    Redis 的应用场景

    mysql数据库,数据是以文件形式存储在硬盘里面

    缓存:数据缓存、页面缓存(smarty)
    目的:如果数据在短时间内不会发生变化,提高用户的请求速度和降低网站的负载,读取速度更快的介质
    存储介质:文件、数据库、内存,内存是经常用于数据缓存

    缓存形式:
    页面缓存,经常用在CMS内存管理系统里面
    数据缓存,经常用在页面的具体数据里面

    举个栗子

    • 新闻页面,内容主题单一、集中,适合做页面缓存
    • 商品页面,商品页面的组成部分根据业务特点,各个部门数据比较独立,适合给他们分别作数据缓存

    Redis 和 memcache 比较

    • redis 不仅仅支持简单的 k/v 类型的数据,同事还提供 list、set、zset、hash等数据结构
    • redis 支持 master-slave (主-从)模式应用
    • redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行用
    • redis 单个 value 的最大限制是 1GB, memcached 只能保存 1MB的数据

    redis-cli 启动redis客户端脚本文件
    redis-server 启动redis服务脚本文件
    redis-benchmark 压力测试文件
    redis-check-aof
    redis-check-dump 检测设备文件脚本

    创建redis的运行目录,并拷贝文件
    cp src/redis-cli /usr/local/redis
    cp src/redis-server /usr/local/redis
    cp redis.conf /usr/local/redis

    修改redis.conf,改为后台启动服务。
    ---> daemonize yes (17行)

    启动服务

    ./redis-server redis.conf
    ps -A | grep redis
    ./redis-cli

    基本操作

    set name du
    get name

    keys 键操作
    keys * 查询所有 key
    keys app*  查询匹配的 key
    exists key  测试指定的key是否存在
    del key1 key2 ...  删除指定的key
    type key  返回key的类型
    keys pattern  返回匹配结果 (*)
    rename oldkey newkey  改名字
    dbsize  返回当前数据库的key的数量
    expire key seconds  为key指定过期时间
    ttl key  返回key的剩余时间
    select db-index  选择数据库
    move key db-index 将 key 从单签数据库移动到指定的数据库
    flushdb  删除当前数据库中的所有 key 
    flushall  删除所有数据库中的所有 key
    config get databases  查询一共有多少数据库
    

    redis 默认有 16 个db(数据库)

    数据类型

    string 类型操作

    set key value  设置 key 对应的值为 string 类型
    mset key1 value1 ... keyn valuen  一次性设置多个 key
    mget key1 key2 ... keyn  一次性读取多个 key
    incr key  加加 i++ , key 必须为 整数
    decr key  减减 i-- , key 必须为 整数
    incrby  key integer 同 incr ,integer 步进
    decrby key integer 同 decr ,integer 步进
    append key value  给指定 key 的字符串值追加 value
    substr key start end  返回截取过的 key 的字符串值 
    

    list 类型数据(双向链表)

    lpush key string  在 key 对应 list 的头部添加字符串元素
    rpop key  从 list 的尾部删除元素,并返回删除元素
    llen key  返回 key  对应,list 的长度,key 不存在返回 0,如果 key 对应类型不是 list 返回错误
    lrange key start end  返回对应区间内的元素,下表从 0 开始
    rpush key string  同上,在尾部添加字符串元素
    lpop key  从 list 的头部删除元素,并返回删除元素
    ltrim key start end  截取 list ,保留制定区间内元素
    

    set 集合类型
    redis 的 set 是 string 类型的无序集合。
    set 元素最大可以包含(2^{32}-1)个元素。

    sadd key member  添加一个 string 元素到 key 对应的 set 的集合中,成功返回 1,如果元素已经在集合中 返回 0,key 对应的 set 不存在返回错误
    srem key member [member]  从 key 对应 set 中移除给定元素,成功返回1
    smove p1 p2 member  从 p1 对应 set 中移除 member 并添加到 p2 对应 set 中
    scard key  返回 set 的元素个数
    sismember key member  判断 member 是否在 set 中
    sinter key1 key2 ... keyn  返回所有给定 key 的交集
    sunion key1 key2 ... keyn  返回所有给定 key 的并集
    sdiff key1 key2 ... keyn  返回所有给定 key 的差集
    smembers key  返回 key 对应 set 的所有元素,结果是无序的
    

    这一块还需要补充

    Sort Set 排序集合类型
    和 set 一样,sort set 也是 string 类型元素的集合,不同的是每一个元素都会关联一个
    通过权值可以有序的获取集合中的元素

    zadd key score  member 添加元素到集合,元素在集合中存在则更新对应 score 
    zrem key member  删除指定元素,1表示成功,如果元素不存在返回 0
    zincrby key incr member  按照 incr 幅度增加对应 member 的 score 值,返回 score 值
    zrank key member  返回指定元素在集合中的排名(下标),集合中元素是按 score 从小到大排序的
    zrevrank key member  同上,但是结合中元素按 score 从大到小排序的
    zrange key start end  类似 lrange 操作,从集合中取指定区间的元素,返回的是有序结果集
    zrevrange key start end 同上,返回结果是按 score 逆序的
    zcard key  返回集合中元素个数
    zscore key element  返回给定元素对应的 score
    zremrangebyrank key min max  删除集合中排名在给定区间的元素
    

    zremrangebyrank key min max 删除排名在指定范围的元素(权值从小到大排序)

    重复元素
    set 没有重复
    list 可以有重复
    sort set 没有重复值
    

    hash 类型

    事务

    multi 开启事务
    exec  执行事务
    discard  回滚
    

    持久化功能

    redis 为了内部数据安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)中。
    数据保存到硬盘的过程就称之为“持久化”效果。

    分类:

    • snap shotting 快照持久化
      • 该持久化默认开启,一次性把redis中全部的数据保存一份存储到硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。
      • 修改 redis.conf 文件中的 save 900 1 项,来修改备份的频率。
      • dbfilename dump.rdb 定义备份文件的名字。

    每次生成快照都需要耗费相当多的资源,如果频率过高,数据保持了相对安全(不丢失),但是服务器的资源都被生成快照占用了,怎么办?

    • append only file (AOF持久化)

    精细持久化,秒级,特别的耗费性能,但是如果一秒内有大量的修改,那么这种精细持久化,就体现出来了价值,“一次保存很多”。考虑下双十一,抢购等活动

    相关文章

      网友评论

          本文标题:Redis 黑马(学习记录)

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