Redis数据库

    技术2025-02-11  39

    Redis数据库

    一,Redis入门

    1,NoSQL概念

    cpu读取磁盘数据很慢,大部分数据放(mysql)

    cpu读取内存数据更快,少部分热点数据放(内存)

    问题现象

    海量用户高并发罪魁祸首——关系型数据库

    NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 虽然是数据库,但没有表结构(对数据没有硬性结构规定)

    作用:应对基于海量用户和海量数据前提下的数据处理问题。

    特征:

    ⚫ 可扩容,可伸缩

    ⚫ 大数据量下高性能

    ⚫ 灵活的数据模型

    ⚫ 高可用

    常见 Nosql 数据库:

    ⚫ Redis

    ⚫ memcache

    ⚫ HBase

    ⚫ MongoDB

    2,redis概念

    概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。

    特征:

    数据间没有必然的关联关系

    内部采用单线程机制进行工作

    高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。 (速度快)

    多数据类型支持

    字符串类型 string

    列表类型 list

    散列类型 hash

    集合类型 set

    有序集合类型 zset/sorted_set

    支持持久化,可以进行数据灾难恢复

    ⚫ 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等

    ⚫ 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等

    ⚫ 时效性信息控制,如验证码控制、投票控制等

    ⚫ 分布式数据共享,如分布式集群架构中的 session 分离

    ⚫ 消息队列

    3,下载与安装

    4,服务器与客户端启动

    服务启动(端口)

    redis-server --port 6379

    客户端连接

    redis-cli [-h ip -p port]

    配置文件启动

    作用:将所有的配置写到配置文件中然后在启动daemonize: 可以设置redis后台启动dir:配置数据目录

    5,配置文件启动与常用配置

    6,基本操作

    二,数据类型

    1,string基本操作

    redis 数据存储格式

    redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGk6S7op-1593825429404)(E:\每日讲课笔记\WEB_new\15-redis(双元)\day01\img\1593664865666.png)]

    string类型 HashMap<String, String>

    存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型存储数据的格式:一个存储空间保存一个数据存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

    string 类型数据的基本操作

    添加/修改数据(set key value)

    获取数据(get key)

    删除数据(del key)

    判定性添加数据(setnx key value)

    添加/修改多个数据(mset key1 value1 key2 value2…)

    获取多个数据(mget key1 key2…)

    获取数据字符个数(字符串长度)(strlen key)

    追加信息到原始信息后部(如果原始信息存在就追加,否则新建)(append key value)

    // insert update set key value mset k1 v1 k2 v2 [...] // delete del key // update append key v // 查询 get key mget k1 k2 k3 //字符长度 strlen key //扩展 // 如果key不存在就创建,存在就不创建 setnx key value // 自增 incr key incrby key num // 自减 decr key decrby key num //存活时间 expire setex key time value

    2,string扩展操作

    设置数值数据增加指定范围的值

    incr keyincrby key incrementincrbyfloat key increment

    设置数值数据减少指定范围的值

    decr keydecrby key increment

    设置数据具有指定的生命周期

    setex key seconds valuepsetex key milliseconds value

    string 类型数据操作的注意事项

    数据操作不成功的反馈与数据正常操作之间的差异

    表示运行结果是否成功(integer) 0 → false 失败(integer) 1 → true 成功表示运行结果值(integer) 3 → 3 3个(integer) 1 → 1 1个

    数据未获取到时,对应的数据为(nil),等同于null

    数据最大存储量:512MB

    string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算

    按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错 9223372036854775807(java中Long型数据最大值,Long.MAX_VALUE)

    redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响

    小结

    数值操作(incr incrby incrbyfloat desc descby )时效性操作(setex psetex)注意事项

    3,string应用场景与key命名约定

    应用场景

    主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数与微博数量

    解决方案

    在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可

    eg: user🆔3506728370:fans → 12210947

    eg: user🆔3506728370:blogs → 6164

    eg: user🆔3506728370:focuses → 83

    也可以使用json格式保存数据

    eg: user🆔3506728370 → {“fans”:12210947,“blogs”:6164,“ focuses ”:83 }

    key 的设置约定

    数据库中的热点数据key命名惯例

    表名:主键名:主键值:字段名

    eg: order: id : 2937595: name

    4,hash基本操作

    数据存储的困惑

    对象类数据的存储如果具有较频繁的更新需求操作会显得笨重

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaSbkbTb-1593825429408)(E:\每日讲课笔记\WEB_new\15-redis(双元)\day01\img\1593666627840.png)]

    hash 类型HashMap<String, Map<String, String>>

    新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息

    需要的存储结构:一个存储空间保存多个键值对数据

    hash类型:底层使用哈希表结构实现数据存储

    hash存储结构优化

    ⚫ 如果field数量较少,存储结构优化为类数组结构

    ⚫ 如果field数量较多,存储结构使用HashMap结构

    // 添加 修改 hset mapKey fieldkey value hmset mapKey fieldkey value [fieldkey value ...] // 查询 hget mapKey fieldkey hmget // 删除 hdel mapKey fieldkey //获取所有的key hkeys key // 查看所有值 hvals key //自增 hincrby key fieldkey 数字

    hash 类型数据的基本操作

    添加/修改数据(hset key field value)获取数据(hget key field)(hgetall key)删除数据(hdel key field [field])设置field的值,如果field存在则不作任何操作(hsetnx key field value)添加/修改多个数据(hmset key field1 value1 field2 value2)获取多个数据(hmget key field field2…)获取哈希表中字段的数量(hlen key)获取哈希表中是否存在指定的字段(hexists key field)

    5,hash扩展操作

    获取哈希表中所有的字段名或字段值(hkeys key)(hvals key)设置指定字段的数值数据增加指定范围的值

    6,hash应用场景

    7,list基本操作

    HashMap<String, List>

    // insert update l left r right lpush listkey value rpush listkey value // 查询 lrange listkey 0, -1 lindex listkey index // 删除 lpop likekey rpop likekey //可以等待一段一段时间 blpop key1 [key2] timeout brpop key1 [key2] timeout brpoplpush source destination timeout

    8,list扩展操作

    9,list应用场景

    10,set基本操作

    11,set扩展操作

    12,set应用场景

    13,实践案例

    14,key常用指令

    del key expire key 10 ttl key keys *

    15,DB常用指令

    // 删除当前库 flushdb //删除所有 flushall

    三,jedis

    1,HelloWorld

    连接中linux数据库配置文件中要改ip地址和data目录,data目录要进入data然后pwd查看路径,然后复制粘贴到配置文件就行./redis-server --protected-mode no保护模式解决

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D209av4O-1593825429410)(E:\每日讲课笔记\WEB_new\15-redis(双元)\day01\img\1593691217907.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U32sxla8-1593825429414)(E:\每日讲课笔记\WEB_new\15-redis(双元)\day01\img\1593691256752.png)]

    然后带配置文件重新启动 redis-server redis/conf/6379.conf

    然后idea就可以输入ip地址连接了

    window查看占用端口进程并关闭

    //1. 查看端口当前占用的进程id netstat -ano | findstr 6379 //2. taskkill taskkill /f /pid 10352

    linux中端口占用

    ps -ef | grep 进程名 kill -9 进程id

    linux复制

    复制: crtl + insert

    粘贴:shift + insert

    2,工具类开发

    3,可视化工具

    四,持久化

    1,持久化概念

    2,save指令完成RDB

    3,bgsave指令完成RDB

    4,save配置完成RDB

    5,RDB方案比对与优缺点分析

    6,AOF实现持久化

    7,手动AOF重写机制与工作原理

    8,自动AOF重写机制与工作原理

    indstr 6379

    //2. taskkill taskkill /f /pid 10352 ```

    linux中端口占用

    ps -ef | grep 进程名 kill -9 进程id

    linux复制

    复制: crtl + insert

    粘贴:shift + insert

    2,工具类开发

    3,可视化工具

    四,持久化

    1,持久化概念

    2,save指令完成RDB

    3,bgsave指令完成RDB

    4,save配置完成RDB

    5,RDB方案比对与优缺点分析

    6,AOF实现持久化

    7,手动AOF重写机制与工作原理

    8,自动AOF重写机制与工作原理

    9,RDB与AOF优缺点分析

    Processed: 0.011, SQL: 9