zoukankan      html  css  js  c++  java
  • 缓存数据库Redis的学习

    一、数据库的发展史

    ①最开始是一个sql语句就访问一次数据库,这样使得我们的数据库负载很大。

    ②为了避免数据库负载过大,使用了缓存技术cache,在dao和db之间加上一层缓存,将我们常用的数据查询一次后都放入到缓存中。(主要针对于查询)

    ③随着时代的发展,数据库的写的压力变大了,出现了瓶颈,使用分布式数据库,一个数据库变为多个数据库,每个数据库存入不同的信息。

    ④再跟随着时代的发展,mysql的扩展性出现了瓶颈,越来越复杂的关系,例如:亲戚关系。关系型数据库已经承受不了了,所以衍生出来了nosql

    二、什么是nosql?

    not only sql 不仅仅是sql,泛指非关系型数据库(key-value)。

    三、nosql的特点

    易扩展,大数据量高性能,多样灵活的数据类型,新技术:redis

    四、常见的数据库缓存框架:redis、memcache、mongdb

    五、redis的特性:key-value,cache,persistence(持久化)

    六、nosql的四大分类

    ①KV键值

    ②文档性数据库(bson格式比较多)

    ③列存储数据库④图关系数据库

    七、分布式:不同的多台服务器上面部署着不同的服务模块(工程)

    八、集群:不同的多台服务器上面部署相同的服务模块

    九、什么是edis?

    REmote DIctionary Server(远程字典服务器)。是一个高性能的(key/value)分布式内存数据库。

    十、redis与其他key-value缓存产品有以下三个特点:

    ①redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
    ②redis不仅仅支持简单的key-value类型的数据,同时还提供list(列表),set(集合),zset(有序集合),hash等数据结构的存储
    ③redis支持数据的备份,即master-slave模式的数据备份

    十一、redis的安装过程

    windos安装教程:https://blog.csdn.net/a599174211/article/details/82756069

    Linux安装教程:https://www.cnblogs.com/lauhp/p/8487029.html

    十二、redis的基础知识(一)

    ①单进程
    ②默认有16个库,类似数组下标从0开始,初始默认使用0号库
    ③select命令是切换数据库 select 7 访问的是8号库
    ④Dbsize查看当前数据库的key的数量
    ⑤Flushdb清空当前的库
    ⑥Flushall清空所有的库
    ⑦统一密码管理,16个库都是同一个密码
    ⑧redis的索引都是从0开始
    ⑨默认端口号6379
    命令解析:
        select 7 查看8号库
        dbsize查看当前库的key的数量
        keys * 查看当前库的所以的key
        keys k? ?类似mysql里面的占位符
        FLUSHdb 清除当前库

    十二、redis的基础知识(二)

    key关键字:
        keys *
        exists key值 判断某个key是否存在
        move key值 db名 将某个key移动到某个数据库中,当前数据库中的此key就不存在了
        expire key值 秒钟,为给定的key设置过期时间
        ttl key值 查看当前还有多少秒过期,,-1表示永不过期,-2表示已经过期,过期就不存在了。
        type key值 查看你的key是什么类型
    ①String
        String是redis的最基本的类型,一个key对应一个value,redis里面的String可以包含任何数据,比如序列化的东西,jpg的图片
      常用命令:
          set/get/del/append/strlen append k1 123
          Incr/decr/incrby/decrby,INCRby key1 2 自加自减代表自加1自减1 后面的是指定加减值,只能是数字才能进行加减
          getrange/setrang 获取指定区间内的值 GETRANGE k1 0 3 SETRANGE k1 0 xxx
          setex 键秒值 /setnx SETEX k2 10 v2 针对于k2里面的值的过期时间是10秒 setnx 命令在指定的 key 不存在时,为 key 设置指定的值
          mset/mget/msetnx mset k1 v1 k2 v2 k3 v3 mget k1 k2 k3 MSETNX k4 v4
          getset(先get再set) GETSET k1 v111
    ②Hash
        是一个键值对的集合,类似于我们的map<key,object>,kv模式不变,但v是一个键值对
      常用命令:
        hset/hget/hmset/hmget/hgetall/hdel ①hset user id 11 hget user id ②HMSET customer id 11 name lisi age 26 hmget customer id name age ③ HGETALL customer ④HDEL user name
        hlen HLEN customer
        hexists key 检测id是否是customer里面一个属性 HEXISTS customer id
        hkeys/hvals HKEYS customer Hvals customer
        hincrby/hincrbyfloat ①HINCRBY customer age 2 ②hset customer score 91.5 HINCRBYFLOAT customer score 0.5
        hsetnx hsetnx customer email 123@126.com
    ③List
        是列表,是简单的字符串列表,按照插入顺序排序,底层是一个链表,既然是一个链表,则可以操作头部和尾部
      常用命令:
        lpush/rpush/lrange LPUSH list01 1 2 3 4 5(先进后出) LRANGE list01 0 -1
        lpop/rpop lpop删除左侧的值(最上层的值),rpop删除右侧的值(最下层的值),
        lindex 按照索引下标获取元素(从上到下)
        llen LLEN list01
        lrem key 删除n个value LREM list01 1 3
        ltrim key 开始index 结束index,截取指定范围的值后再赋值给key LTRIM list01 0 2
        rpoplpush 源列表 目的列表 RPOPLPUSH list01 list02 将list01里面的最后一个值后添加到list02的头部,list01最后一个值就没了
        lset key index value LSET list03 1 x
        linsert key before/after 值1 值2 LINSERT list03 before x java 在x前面插入一个值为java
    ④Set
        是一个String类型的无序集合,它是通过hashtable实现的
      常用命令:
        sadd/smembers/sismember sadd set01 1 1 2 2 3 3 SMEMBERS set01 添加时是把重复的元素去掉了 SISMEMBER set01 1 判断元素是否存在于set01中
        scard 获取集合里面的元素个数 SCARD set01
        srem key value 删除集合中的某个元素 SREM set01 1
        srandmember key 某个整数(随机出几个数) SRANDMEMBER set01 5
        spop key 随机出栈 SPOP set01
        smove key1 key2 在key1里面某个值, 作用是将key1里的某个值赋给key2 SMOVE set01 set02 9
        数学集合类:
            差集:sdiff SDIFF set01 set02
            交集:sinter Sinter set01 set02
            并集:sunion Sunion set01 set02
    ⑤Zset
        有序集合,且不允许有重复的元素,不同的每个元素都会关联一个double类型的分数(score),分数可以重复,根据成员进行从小到大排序在set的基础上,加上了一个score,之前k1 v2 v3,现在是:k1 score1 v1 score2 v2
      常用命令:
          zadd/zrange zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 ZRANGE zset01 0 -1 ZRANGE zset01 0 -1 withscores
          zrangebyscore key 开始score 结束score ZRANGEBYSCORE zset01 60 90 ZRANGEBYSCORE zset01 (60 90
          zrem key 某score下对应value值 作用是删除元素 ZREM zset01 v5
          zcard/zcount key score区间/zrank key values值 作用是获取下标值/zscore key 对应值 ZCARD zset01 ZCOUNT zset01 60 80 ZRANK zset01 v4(正序获取下标值)
          zrevrank key values值 作用是逆序获得下标值 Zrevrank zset01 v2
          zrevrange ZREVRANGE zset01 0 -1
          zrevrangebyscore key 结束score 开始score ZREVRANGEBYSCORE zset01 90 60

  • 相关阅读:
    Luogu P1067 多项式模拟
    关于事件流,事件冒泡和事件捕获
    JavaScript高程读书笔记
    前端面试题2017
    Bootstrap教程
    jquery实现JSON数据获取
    AJAX基本格式步骤
    【转】XMLHTTP中setRequestHeader参数问题
    warp()和wrapAll()区别
    append()和appendTo(),prepend()和prependTo()区别
  • 原文地址:https://www.cnblogs.com/zblwyj/p/11851447.html
Copyright © 2011-2022 走看看