zoukankan      html  css  js  c++  java
  • Redis

    1、NoSql概述

    单机时代:
    1.数据量太大
    2.数据索引,缓存放不下
    3.访问量大,服务器承受不了

    缓存时代:
    3.memcached+mysql+垂直拆分(读写分离)
    80%的访问都是读数据

    优化数据结构和索引----->文件缓存(IO)---->memcached
    4.分库分表+水平拆分+Mysql集群
    本质:数据库的读写
    Myasam:表锁,效率低
    Innodb:行锁
    Mysql集群:

    最近的年代:(定位信息,图片信息)
    数据量大,变化快,mysql关系数据库无法满足;
    存较大文件或图片,数据表很大,效率低下

    目前的互联网项目:
    防火墙----->路由网关(负载均衡)---->


    为什么使用Nosql
    用户个人信息,社交网络,地理位置,用户生产的数据,用户日志等爆发式增长。这些数据存储不需要固定格式存储,操作不需要横向扩展

    关系型数据库:行+列(POI)
    什么时Nosql=不仅仅是sql,传统关系型数据库很难对付web2.0时代,尤其是大规模的高并发社区。暴露出很多问题,nosql在大数据时代发展十分迅速。Redis发展最快

    Nosql特点
    1.方便扩展(数据间没有关系)
    2.大数据高性能(redis一秒写8万次,读取11万,是一种细粒度的缓存)
    3.数据类型多样性,不需要事先设计数据库,随取随用,如果是数据库量超大,很多人就无法设计
    4.与传统的RMDBS的区别
    结构化组织
    sql
    数据关系都存在单独的表中
    操作,数据定义语言
    严格的一致性
    基础的事务

    2、String

    Redis 是开源的,内存中的数据结构系统,可以用作数据库/缓存/和消息中间件。支持多种数据结构,如字符串(strings)散列(hashes)列表(lists)集合(set)有序集合(sorted sets)与范围查询,bitmaps hyperloglogs 和地理空间半径查询。redis内置了复制/lua脚本/lru驱动事件/事务和不同级别的磁盘持久化,并开通了哨兵和自动分区提供高可用性


    Redis-key

    key *
    exist name
    move name
    expire name 10
    ttl name 查看key的剩余时间
    type name 查看当前key的类型

    set key value
    get key

    基本类型
    String

    set key value
    get key
    keys *
    exists key
    append key "xxxx" 如果key不存在 就相当于set
    strlen key
    incr key 加1
    decr key 减1
    incrby key 10 (步增)加10
    decrby key 10
    getrange key 1 2 截取字符串
    setrange key 1 "xxxx" 替换字符串
    ##########################################################
    setnx (set if not exits) 分布式锁 如果不存在设置key,如果存在则设置失败
    setnx key "xvdsag"
    setex (set with expire) 设置过期时间
    setex key 30 "xxxxx"
    ##########################################################
    mset k1 v1 k2 v2 k3 v3 设置多个值
    mget
    msetnx k1 v1 k4 v4 原子性操作,要么全成功要么全失败
    #######################
    set user:1 {name:zhangsan,age:20} 设置一个user对象值为json
    mset user:1:name zhangsan user:1:age 10
    ###################################
    getset 先获取再设置

    String 使用场景:字符串和数字
    计数器,统计多单位的数量,粉丝数,对象存储

     3、List

    List:可以当栈或队列或阻塞队列


    基本命令
    LPUSH list ONE
    RPUSH list ONE
    LPOP
    RPOP
    LINDEX LIST 1 通过下标获取值
    llen list 返回列表长度
    lrem list 1 one 移除1个one
    ###############################
    ltrim list 1 2 通过下标截取指定长度

    lset list 1 other 通过下标修改值
    ######################

    总结:
    实际上是个链表,left right都可插入
    如果key不存在创建新的链表
    如果key存在新增内容
    如果移除所有值,空链表也代码不存在
    在两遍插入或修改值,效率最高,中间元素效率低些
    使用场景:消息队列(Lpush Rpop) 栈(Lpush Lpop)

    SET

    SET值不可重复


    sadd myset "hellow"
    smembers myset
    scard myset 获取元素个数
    sismember myset "hellow" 判断元素是否在集合中
    srem myset "hellow" 移除元素
    srandmember myset 2 随机抽选出n个元素

    smove myset myset2 "hellow" 移动元素
    sdiff myset myset2 差集
    sinter myset myset2 交集
    suniin myset myset2 并集


    微博,A用户的粉丝活关注的人

    Hash

    Map集合 key-map
    hset myhash key value
    hget myhash key
    hmset myhash key1 value1 key2 value2
    hget myhash key1 key2
    hgetall myhash
    hdel myhash key1
    hlen myhash
    hexists myhash key
    hkeys myhash 获取所有key
    hincr myhash key 1 自增
    hincr myhash key -1
    hdecr myhash key 1 自减

  • 相关阅读:
    Haskell 差点儿无痛苦上手指南
    HighCharts 具体使用及API文档说明
    又一道软通动力7K月薪面试题——银行业务调度系统
    [AngularJS + Webpack] require directives
    [AngularJS + Webpack] Using Webpack for angularjs
    [Whole Web] [AngularJS] Localize your AngularJS Application with angular-localization
    [React] React Fundamentals: Mixins
    [React] React Fundamentals: Component Lifecycle
    [React ] React Fundamentals: Component Lifecycle
    [React] React Fundamentals: Component Lifecycle
  • 原文地址:https://www.cnblogs.com/wangyingshuo/p/14267674.html
Copyright © 2011-2022 走看看