缓存数据库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