zoukankan      html  css  js  c++  java
  • NoSQL

    Not only SQl:    第二代数据库架构
    非关系型,非结构化,半结构化
        缓存数据库:Redis(京东), Memcached, Tair(淘宝,基于Memcached二次开发), ...
        文档类:    MongoDB, ES
        列存储(大数据类):    HBASE...
        图形存储: Neo4J
    NoSQL(key-value)
    第三代数据库架构转型,主要是分布式架构,云平台,刚开始
    例如淘宝数据库会涉及各种关系型数据库和非关系型数据库,
    NewSQL
    Memcached: 适合多用户访问,每个用户少量读写 
    Redis: 适合少用户访问,每个用户大量读写。并发量比较高推荐多实例的环境
    Memcached、Redis
    vim /etc/profile
    # 添加以下一行
    export PATH=/usr/local/redis/src:$PATH    # 安装路径
    # 生效配置
    source /etc/profile
    redis环境变量
    redis-server & 
    redis-server /usr/local/redis/redis.conf        # 启动配置文件
    
    (base) xyp-iMac:~ xyp$ redis-cli
    127.0.0.1:6379> set xyp nb
    OK
    127.0.0.1:6379> get xyp
    "nb"
    127.0.0.1:6379> set xyp 牛逼
    OK
    127.0.0.1:6379> get xyp
    "xe7x89x9bxe9x80xbc"
    127.0.0.1:6379> quit
    (base) xyp-iMac:~ xyp$ redis-cli --raw        # 显示中文
    127.0.0.1:6379> get xyp
    牛逼
    127.0.0.1:6379> shutdown                    # 关闭
    1073:M 02 Sep 2020 11:27:07.879 # User requested shutdown...
    1073:M 02 Sep 2020 11:27:07.879 * Saving the final RDB snapshot before exiting.
    1073:M 02 Sep 2020 11:27:07.895 * DB saved on disk
    1073:M 02 Sep 2020 11:27:07.895 # Redis is now ready to exit, bye bye...
    redis启动
    vim redis.conf
    bind 127.0.0.1 10.0.0.51
    requirepass 123456
    
    此时不管远程还是本地连接redis都要验证密码
    方法一:
        redis-cli -h 10.0.0.52 -p 6379 -a 123456    # 远程连接命令
        redis-cli -a 123456            # 本地连接命令
    
    方法二:
        # 远程连接命令
            redis-cli -h 10.0.0.52 -p 6379
            auth 123456
        # 本地连接命令    
            redis-cli
            auth 123456
    redis远程连接
    config get *    # 获取redis配置参数
    
    config get requirepas*
    
    config set maxmemory 128M    # 设置redis配置maxmemory,即时生效
    
    config rewrite    # 保存到配置文件
    redis设置参数
    介绍
        RDB持久化
            基于时间点快照一种持久化方式,内存里所有的键值对保存在一个文件里,速度快,可做备份,会有数据丢失
    
        AOF持久化
            记录服务器执行的所有写操作命令,最大程度保证数据不丢失,日志记录量级比较大,持久化时间较长
    
        优先使用AOF
    
    
    配置持久化
        RDB持久化
            方法一:
                127.0.0.1:6379> save
                OK
                /usr/local/redis目录下保存dump.rdb文件
            方法二:
                修改配置文件redis.conf,写入下列
                    save 900 1        # 900s内有1个更改
                    save 300 10        # 300s内有10个更改
                    save 60 1000    # 60s内有10000个更改
    
            save bgsave:共同点都能实现RDB持久化功能
            save:前台,阻塞redis正常写入,直到持久化完成。
            bgsave:后台,开启子线程,异步的持久化功能,不会阻塞redis正常写入。
    
        AOF持久化配置
            修改配置文件redis.conf,写入下列
                appendonly    yes
                appdendfsync always        # 要求很高
                appdendfsync everysec    # 要求一般,要求更低点用RDB持久化就行
    
    总结:
        redis持久化方式和区别:
            rdb:基于快照持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
            aof:以追加的方式记录redis操作日志的文件。可以最大程度保证redis数据安全,类似于mysql的binlog
    redis持久化(内存数据保存到磁盘)
    mysql和redis数据同步工具canal
    介绍:基于value值类型
        string    :字符串类型
        hash    :字典类型
        list    :列表类型
        set     :集合类型
        sortset    :有序集合
    
    
    
    各种数据类型应用场景
        string:会话缓存、计数器
            计数器:
                127.0.0.1:6379> incr num
                (integer) 1
                127.0.0.1:6379> incr num
                (integer) 2
                127.0.0.1:6379> incr num
                (integer) 3
                127.0.0.1:6379> decr num
                (integer) 2
                127.0.0.1:6379> decr num
                (integer) 1
                127.0.0.1:6379> incrby num 1000
                (integer) 1001
                127.0.0.1:6379> decrby num 500
                (integer) 501
        hash:数据库缓存
            127.0.0.1:6379> hmset stu_1 id 1 name zhangsan age 10
            OK
            127.0.0.1:6379> hmget stu_1 id name age
            1) "1"
            2) "zhangsan"
            3) "10"
    
            mysql灌入redis通过程序实现,以下为手工模拟mysql灌入redis hash类型,
            1.mysql中拼接hmset语句
                select concat('hmset t1_',id,'id',id,'num',num,'k1',k1,'k2',k2) from t1 limit 1000 into outfile '/tmp/redis.txt';
            2.将数据导入redis
                cat /tmp/redis.txt | redis-cli -a password &>/tmp/in.log
            3.检查数据
                keys *        # 数据量大时不行,会死机
    
    
        list:微信朋友圈,即时消息展示,每次看到朋友圈都是最新消息。
            127.0.0.1:6379> LPUSH list 1
            (integer) 1
            127.0.0.1:6379> LPUSH list 2
            (integer) 2
            127.0.0.1:6379> LPUSH list 3
            (integer) 3
            127.0.0.1:6379> lrange list 0 -1    # 0 -1下标索引
            1) "3"
            2) "2"
            3) "1"
            127.0.0.1:6379> lrange list 0 2
            1) "3"
            2) "2"
            3) "1"
            127.0.0.1:6379> lrange list 0 1
            1) "3"
            2) "2"
    
    
        set:社交类平台好友系统。共同好友,二度好友。
    
            127.0.0.1:6379> sadd lxl pg1 oynn lqx xyp
            (integer) 4
            127.0.0.1:6379> sadd jnl oynn xyp wyz jcw
            (integer) 4
            127.0.0.1:6379> SUNION lxl jnl        # 并集
            1) "lqx"
            2) "wyz"
            3) "xyp"
            4) "jcw"
            5) "oynn"
            6) "pg1"
            127.0.0.1:6379> SINTER lxl jnl        # 交集
            1) "xyp"
            2) "oynn"
            127.0.0.1:6379> SDIFF jnl lxl        # 差集
            1) "wyz"
            2) "jcw"
    
        sortset:排行榜应用
            127.0.0.1:6379> zadd phb 5 thebestforyou 10 tobehappy 8 tellmeyoudooto
            (integer) 3
            127.0.0.1:6379> ZINCRBY phb 100 thebestforyou
            "105"
            127.0.0.1:6379> ZINCRBY phb 500 tobehappy
            "510"
            127.0.0.1:6379> ZINCRBY phb 200 tellmeyoudooto
            "208"
            127.0.0.1:6379> ZREVRANGE phb 0 -1
            1) "tobehappy"
            2) "tellmeyoudooto"
            3) "thebestforyou"
            127.0.0.1:6379> ZREVRANGE phb 0 -1 withscores
            1) "tobehappy"
            2) "510"
            3) "tellmeyoudooto"
            4) "208"
            5) "thebestforyou"
            6) "105"
    redis的多数据类型支持
    介绍:为了解决在架构中,资源有效方面提供有效的协调。解决硬件冗余或者闲置。
    redis消息模式:消息队列,发布订阅。
    
    发布订阅功能:
        pulisher     发布者
        channel     频道
        subscriber    订阅者
    
        redis客户端A订阅者:
            subscribe fm1039
            Reading messages... (press Ctrl-C to quit)
            1) "subscribe"
            2) "fm1039"
            3) (integer) 1
        redis客户端B发布者:
            127.0.0.1:6379> publish fm1039 hi
            (integer) 1
        然后A收到订阅消息最后一行:
            127.0.0.1:6379> subscribe fm1039
            Reading messages... (press Ctrl-C to quit)
            1) "subscribe"
            2) "fm1039"
            3) (integer) 1
            1) "message"
            2) "fm1039"
            3) "hi"
    redis消息模式
    redis事务基于队列实现的,redis是乐观锁机制,仅实现原子性的保证,属于弱事务支持。
    mysql事务基于事务日志、悲观锁机制、MVCC、ISOLASTION等机制一起保证,强事务支持。
    
    redis事务只是把操作放到队列中,exex执行后才成功
        127.0.0.1:6379> multi
        OK
        127.0.0.1:6379> set a 10
        QUEUED
        127.0.0.1:6379> set b 20
        QUEUED
        127.0.0.1:6379> 
        127.0.0.1:6379> exec
        1) OK
        2) OK
    redis事务
    flushall    清空所有数据
    flushdb        清空当前库
    monitor        监控实时指令
    shutdown    关闭服务器
    ......    
    redis服务管理命令
    replication
    ......
    redis主从复制
    结合总从复制一起使用
    ......
    redis sentinel高可用集群应用
    ......
    redis Cluster分布式集群
  • 相关阅读:
    Direct2D 几何计算和几何变幻
    ORACLE触发器具体解释
    HI3518E用J-link烧写裸板fastboot u-boot流程
    NYOJ
    使用ServletFileUpload实现上传
    再看数据库——(2)视图
    cookie登录功能实现
    耗时输入框
    Android开发 ----------怎样真机调试?
    Windows搭建Eclipse+JDK+SDK的Android --安卓开发入门级
  • 原文地址:https://www.cnblogs.com/xuyaping/p/14040730.html
Copyright © 2011-2022 走看看