• Redis_1


    Redis_1

    标签(空格分隔): redis


    nosql

    key-value 字典

    nosql 产品

    not only sql :第二代数据库架构

    非关系型、非结构化、半结构
    缓存数据库: redis, memcached , tair ....
    文档类: MongoDB,ES
    列存储: HBASE
    图像存储: Neo4J

    newSQL 第三代数据库架构转型

    去 IOC IBM Oracle EMC
    集成多种数据库软件为一体

    缓存产品

    memcached
    redis
    Tair

    reids功能介绍

    数据类型丰富
    支持持久化
    多种内存分配以及回收策略
    支持事务
    消息队列、消息订阅
    支持高可用
    支持分布式分片集群
    缓存传统、雪崩
    redis api

    memcached:
    高性能读写、单一数据类型、支持客户端时分布式集群、一致性hash
    多核结构、多线程读写性能高
    无持久化、节点故障可能会出现缓存穿透、分布式需要客户端实现、跨机房数据同步困难、架构扩容复杂度高

    redis
    高性能读写、多数据类型支持、数据持久化华、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能高
    多线程读写比memcached慢

    memcached 适合多用户访问、每个用户少量rw
    redis 适合少用户访问、每个用户大量rw

    io多路复用

    安装部署

    http://download.redis.io/releases/

    tar -xf redis
    yum -y install gcc automake autoconf libtool make
    cd redis
    make && makeinstall

    vim /etc/profile

    export PATH=/data/redis/src:$PATH
    source /etc/profile

    启动
    redis-server &

    配置

    vim /etc/redis.conf

    daemonize yes #后台运行
    port 6379 # 端口
    logfile /data/redis/redis.log  #日志
    dir /data/redis/ #持久化数据
    dbfilename dump.rdb #rdb持久化数据文件
    requirepass  123456 #密码
    bind 10.0.0.51 127.0.0.1
    
    

    配置获取

    CONFIG GET 参数名

    配置设置

    CONFIG SET maxmemory 20G

    reids 持久化

    RDB 持久化
    可以在指定的时间间隔内生成数据集的 时间点快照
    优点:速度快,适合于用作备份,主从复制也是基于RDB持久化功能实现的
    缺点:会有数据丢失

    AOF 持久化
    有点像mysql的binlog
    记录服务器执行的所有写操作,并在服务器启动时,通过重新执行这些命令还原数据集
    AOF文件中的命令全部以redis协议的格式来保存,新命令被追加到文件的末尾。
    优点: 可以最大程度保证数据不丢
    缺点:日志记录量比较大

    RDB 配置

    dir /data/redis/ #持久化数据
    dbfilename dump.rdb #rdb持久化数据文件
    save 900 1  #900秒由一个更改
    save 300 10 #300秒 10个更改
    save 60 10000 #60秒 10000更改
    
    
    

    AOF 配置

    appendonly yes   #aof日志功能
    appendfsync always  #每一个命令 立即同步到aof
    appendfsync everysec #每秒写一次
    appendfsync no  #写入工作交给操作系统,由操作系统判断缓冲区,统一写道aof
    
    
    

    5大类型

    String(字符串)
    Hash(哈希)
    List(列表)
    Set(集合)
    Zset(有序集合)

    显示中文

    redis-cli --raw

    基本操作 set get

    set name hu yan
    set age 22
    get name
    get age
    keys *

    set sex "male" ex 3
    set sex "male" px 5000

    set sex "male" nx sex 不存在时 set操作才执行
    set sex "male" xx sex 存在时 set操作才执行

    mget 批量获取

    批量设置
    mset iphone 5800 xiaomi 2499 oppo 3300

    mget("xiaomi","iphone")

    切片
    getrange name 0 1

    setrange name 0 uuuu

    二进制操作

    setbit name 1 0

    01100001 a

    00100001 !

    统计用户数
    set usercount 0

    setbit usercount 1 0
    setbit usercount 2 0
    setbit usercount 3 0

    bitcount usercount

    setbit usercount 1 0
    id 为4999
    setbit usercount 4999 1

    得到 223 是否登陆了
    getbit usercount 223

    字节 汉字占3个
    strlen()

    自增
    incr(self,name)

    自减
    decr(self,name)

    应用场景

    直播
    耍火箭 +1000
    incr xxx 1000
    incr xxx 1000

    hash

    hash 字典 info {name:hu,}

    hset info name hu
    hset info age 22
    hmset pp s ss a

    hget info name
    hmget info age
    hgetall info

    长度

    hlen(info)

    字段

    HKEYS INFO

    HVALS INFO

    是否存在

    HEXISTS INFO NAME

    HINCRBY info age 1 加一

    查询开头为a的
    HSCAN INFO 0 MATCH A*

    包含a的
    HSCAN info 0 match a

    迭代器

    HSCAN_ITER()

    list操作

    可以用于聊天消息的推送
    lpush xx "hi"
    lpush xx "你好"

    左存
    lpush st_list k1,k2,k3,k4,k5

    查看
    lrange st_list 0 -1

    右存
    rpush st_list bighead

    有列表 才会添加值
    rpushx st_list rz
    lpushx st_list ssz

    插入
    linsert st_list before 2 k8

    修改
    lset st_list 2 values5

    删除
    lrem st_list 2 values5

    移除
    lpop
    lpop st_list

    lindex 索引 取值
    lindex st_list 2

    ltrim 切片

    ltrim st_List 1 5 从1切到5

    rpoplpush 从右弹出 放进左边
    rpoplpush st_list st_list2

    blpop 将多个列表排列 从左到右pop元素
    BLPOP st_list st_list2 1

    brpoplpush 有个等待超时

    set集合

    添加
    sadd s_set 1 2 3

    查看
    SMEMBERS s_set

    获取数量
    SCARD s_set

    sadd s_set2 2 4 5 7 8 9

    差集
    sdiff s_set s_set2

    把差集存入s_set3
    sdiffstore s_set3 s_set s_set2

    交集
    sinter s_set s_set2

    交集存在一个地方
    sinterstore

    sismember s_set asdasd
    从一个移到另一个
    smove

    随机获取几个元素
    srandmember

    删除
    srem

    并集
    sunion


    sscan s_set 0 match a

    有序集合
    zadd z_set 1 hh
    zadd z_set 2 hhh

    查看 和权重展示
    zrange z_set 0 -1 withscores

    Z=
    ZRANGEBYSOCRE z_set 1 10 得到1 到 10 权重排名

    倒序
    zrevrange z_set 0 -1 withscores

    排名
    zrank z_set hh

    更具排行删除
    zremrangebyrank

    根据分数范围删除
    zremrangebyscore

    获取某个人的对应分数
    ZSCORE z_set hh

    交集存在z_set3 分数 SUM 相加 MIN 小的 MAX大的
    zinterstore z_set3 2 z_set z_set2 aggregate SUM

    并集
    zunionstore

    模糊查询

    zscan

    常用操作

    del set_s #可以删除多个
    exists key #是否存在
    keys #所有表
    get #取得表
    expire oppo 3 #为表创建超时时间
    rename #重命名
    move #移动

    切换db

    redis 总共16个db

    select 1

    移动name到db1 如果有 就无法移动

    move name 1

    随机获取key
    randomkey()

    返回类型
    type z_set

    扫描 全局
    scan

    一些操作

    info
    Client list
    Client kill ip:port
    config get *
    config resetstat
    config get/set/rewrite
    dbsize
    flushall #清空所有
    select 1
    flushdb #清空当前库
    monitor #监控实时指令
    shutdown #关闭服务器

    redis 消息模式

    消息模式是为了帮助解决在架构中,资源有效利用方面提供有效的协调
    redis的消息模式有多种形式,消息队列,发布订阅

    kafka rabbitMQ activeMQ 专门做列队的软件

    发布

    PUBLISH fm103 hi

    订阅

    SUBSCRIBE fm103

    redis 事务

    redis和mysql 事务的差别

    redis的事务基于队列实现的,redis是乐观锁机制,仅仅原子性的保证,属于弱事务支持。
    mysql的事务基于redo、undo、悲观锁机制、mvcc、isolastion等机制一起保证,属于强事务。

    开启

    multi

    set x 20
    set y 30

    执行

    exec

  • 相关阅读:
    JVM优化系列之一(-Xss调整Stack Space的大小)
    被kill问题之2:Docker环境下Java应用的JVM设置(容器中的JVM资源该如何被安全的限制)
    docker的坑
    docker容器内存占用 之 系统cache,docker下java的内存该如何配置--temp
    查看docker容器的内存占用
    使用Java监控工具出现 Can't attach to the process
    使用docker查看jvm状态,在docker中使用jmap,jstat
    在Docker中监控Java应用程序的5个方法
    HDU2552 三足鼎立 【数学推理】
    C++面向对象模型
  • 原文地址:https://www.cnblogs.com/hywhyme/p/14631409.html
Copyright © 2020-2023  润新知