redis

作者: 宋song一 | 来源:发表于2020-03-15 20:35 被阅读0次

    几乎覆盖了Memcached的绝大部分功能,升级版。一般作为缓存数据库辅助持久化的数据库
    可以持久化,备份恢复。memcached一般不持久化
    多线程+锁(Memcached),单线程+io多路复用(redis)
    Memcached的value类型只有string。数据向计算移动(全量io存取,反序列化算法)
    redis:计算向数据移动(移动数据成本大于移动计算)
    io复用:监视select(轮询,最高1024个请求),poll(不限制数量),epoll(标识符)
    单线程:worker(6.X io threads)
    高版本:IO threads
    epoll:多路复用
    串行可以保证原子性
    6.x之后,默认单线程worker,多线程(io读写)。无论哪个版本,工作线程就一个
    连接:nc localhost 6379
    redis-cli
    dbsize:查看当前库的key数量
    keys *
    清空:flushdb 清空当前库
    flushall 清空所有的16个库,需要恢复

    help @string :查看方法

    一、5种value类型:

    1. string(字符串(strlen是字节长度),数值(incr(+1),decr(秒杀),单线程原子操作,秒杀限流),位图(bitmap,offset溢出会扩容。bitop位操作运算,bitcount(统计登录天数)),

    存中文,以 redis-cli --raw 启动
    二进制安全(客户端byte数组,只保存不转换)
    支持双向索引
    统计分析:bitmap布隆过滤器
    getrange:[...]
    getset:以新换旧,设置新值的同时获得原值

    2. list 单键多值,1对n。双向链表,有序可重复。队列.ltrim评论、裁剪数据

    lpush,rpush,lpop,rpop
    lrange:按照索引下标获取元素(从左到右)。lrange key 0 -1,获取所有元素
    lindex,llen(列表长度)
    lrem key n value,删除元素(从左到右,n可为正值(从左到右)、负值(从右到左)、0. 为0时,删除所有匹配的值)

    3. hash,类似于Map<String,String>。详情页聚合,聚合(数据来自不同的库)

    存储对象
    hset key field value:给key集合的field键赋值,hset userInfo user:1010:uid 1010
    hmset:批量赋值
    hkeys:
    hvals:
    hgetall:获取所有的key与val
    hincrby key field increment :加法。increment为负值,减法
    hsetnx:当且仅当不存在时可以成功

    4. set集合,无序不可重复。去重无序. 随机事件,抽奖,验证码。成本比较大,串行化执行,延时比较大。独立到一个redis实例

    提供了判断一个元素是否在set集合的接口,查找并判断是否秒杀成功
    底层是一个value为null的hash表,所以添加、删除、查找的复杂度都是O(1)
    sadd
    smembers <key>:取出所有值
    scard <key>:获取元素个数
    srem <key> member [member ...]:删除元素
    spop <key> [count]:随机吐出元素。抽奖
    srandmember <key> [count]:随机取出元素,不删除

    sinter key [key ...]:交集
    sunion key [key ...]:并集
    sdiff key [key ...]:差集。有顺序,前有后没有

    5. ZSET(sorted_set),集合,有序去重。以元素为key,以score为value的map。正向zrange,反向zrevrange

    score从低到高排序,score可以重复
    push/pop 有序,add/remove 无序
    排行榜,翻页,动态翻页
    底层:skiplist跳跃表
    zadd zSet 100 a 20 b 1 x 500 abc:添加
    相同元素不同分数,会更新分数。
    相同分数不同元素,正常排序
    zrange zSet 0 -1:(索引)查看所有元素
    zrangebyscore zSet 100 500:按分数范围查看元素
    zscore :查看分数
    zrevrangebyscore zSet 150 15:从大到小
    zrank zSet x:返回x在集合中的索引

    场景

    排行榜。缓存,统计bitmap,数值,秒杀,限流,迁出 无状态 把java的数据结构外置 session,栈 队列 数组 hash,聚合数据 详情页,抽奖 随机事件,集合:推荐系统
    不推荐用在锁,etcd或zookeeper更好

    持久化

    持久化后,性能下降
    2种方式:快照(rdb,恢复速度快,丢失多,占用大,会丢数据),日志(aof,1.每操作,完整性,强调一致性时适用 2.每秒,至多一个buffer。默认 3.os缓存刷写,一个buffer)
    默认开启rdb(缓存,丢数据不怕)

    可用性

    生产系统中,压力(分片集群,代理集群),单点故障(主从主备)
    默认弱一致性,支持强一致性(强一致性破坏可用性)。没有最终一致性

    分布式锁

    多个redis实例,redlock,抢够过半的锁,没过半的销毁.客户端并发并行抢锁。实现复杂,主动轮询
    推荐zookeeper,最终一致性。注册回调,事件机制

    主从复制实现读写分离

    允许远程访问

    redis.conf注释掉bind 127.0.0.1,protected-mode改为no
    loglevel四个级别,生产环境使用notice或warning
    requirepass设置永久密码

    相关文章

      网友评论

          本文标题:redis

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