当前位置: 首页 > news >正文

Redis学习

最开始使用的是MySQL,其使用的是磁盘IO方式较慢,无法满足一分钟成千上万次的访问,而使用内存IO的Redis就可以较好的满足。

Redis是NOSQL(Not Only SQL)中的键值存储数据库,性能好较灵活,是在内存中进行存储。

可以通过redis-serve启动服务,通过redis-cli ip地址来连接。

redis没有严格的表结构,而是类似Map的存储方式,一般有16个数据库。

可以使用 select index 来选择不同的数据库,而向redis内部存放数据时,使用的方法也和向map中存放数据类似。set key value 或是mset key value key value .....。

存放数据时不同模块之间可以使用:进行分割,例如要存用户信息中的名字

set user:info:name lbw

存放数据时还可以设定过期时间 set name lbw ex 10(十秒过期),使用ttl key可以查询到相关时间,或者是使用 expire key sec 对以及存在的键设定过期时间

如果要获取数据使用 get key,随机获取键就是 randomkey,删除数据用 del key,如果要查询所有的键,key *,如果要判断某个键是否存在使用 exist key,如果要将数据转移到别的数据库, move key db,还可以对其重命名,rename key newname ,如果使用renamex 就会自动判断是否有重叠。

如果value是纯数字,则可使用自增自减操作incr key,decr key ,如果使用incrby等就可以加上自增的次数

使用 type key 可以查询value的数据类型

通常如果直接存储,形式为字符串,同时还有Hash,就是键值对的值也是一个类似HashMap。通常用来存类相关的数据 

Hash

存入时使用命令hset key key value.....,取出使用hget key 内层key。如果要一次性获取所有key值使用hgetall key

删除其中的一个字段,hdel key key ,删除hash:del hkey

hexists 判断某个字段是否存在,hlen 判断字段数目

hval key 一次性获得所有字段的值

但是hash内的值一定是字符串,且不能套娃

List

基本同Java的List

阻塞pop可以同时向多个队列要求数据,谁先有谁弹出

Set和SortedSet

也是和Set相同,不过更像数学上的集合可以进行运算

如果需要集合有序,则需要引入SortedSet,给每个元素附上一个分数,按分数排序,此处添加元素部分应该先写分数后写Key

持久化

由于Redis的所有数据都保存在内存,一旦断电数据丢失,因此将其保存到硬盘也就是持久化非常重要,主要有两种方法一种是直接复制数据保存,另一种是复制保存数据的过程重新对硬盘执行一次。

方法一 RDB

可以开启后台进程进行保存。

方法二 AOF

虽然RDB解决持久化问题,但每次都要完整复制数据库。造成不必要的内存呢开销,也不是实时保存,如果在保存前服务器崩溃依然会导致数据丢失,因此引出AOF,以日志形式记录每次的操作,再根据操作进行恢复,现在默认的方式就是方式2

但是这样依然有问题,大量指令会导致文件过于庞大,导致性能浪费,指令其实可以进行压缩,使用指令bgrwriteaof

或者再配置文件中设置自动重写

Redis也有事务和锁机制保证一段指令完整执行不受其他指令影响

Redis是将命令存储后在输入exec后统一执行

Redis的锁是乐观锁,MySQL与sync都是悲观锁

使用的是 watch key,针对该变量,有一个版本号,如果版本不变继续事务,如果发生改变就取消事务。
和Java进行交互

主要使用的包是jedis

想要调用Redis只需要创建Jedis对象

通过Jedis就可以调用Redis命令

和Spring框架结合,加入依赖只要注入RedisTemplate,所有值相关的操作都需要

RedisTemplate.opsForValue().命令() 字符串操作

opsForHash().命令() Hash操作

以此类推

删除就是直接delete,存在变为hasKey()

Redis此时的事务管理,Java中没有定义,可以借用JDBC的注解,但是内部还是使用Redis的命令

还可以通过Serializer将键值转换为JSON

相关文章:

  • 栈区、堆区、静态区
  • STL之关联容器(map ,set)
  • 【AI 加持下的 Python 编程实战 2_03】第二章:Copilot 辅助编程入门——环境搭建、基本工作流程以及数据分析案例演示(含本地实测)
  • PAT甲级(Advanced Level) Practice 1021 Deepest Root
  • 通达信软件+条件选股+code
  • Atcoder ABC397-D 题解
  • L1-093 猜帽子游戏
  • 如何将一个项目推送到gitlab
  • 注意力机制:让AI拥有黄金七秒记忆的魔法--(自注意力)
  • 机器学习——正则化、欠拟合、过拟合、学习曲线
  • Webpack 前端性能优化全攻略
  • 【实用技巧】如何优雅的批量保存网页快照?
  • CTF题目《SSRFMe》(网鼎杯 2020 玄武组)WriteUp
  • Qlik Sense New Install with Restore
  • 【开源代码解读】AI检索系统R1-Searcher通过强化学习RL激励大模型LLM的搜索能力
  • Word 小黑第36套
  • 探索Maas平台与阿里 QWQ 技术:AI调参的魔法世界
  • 在PowerShell脚本中编辑appsettings.json
  • 鸿蒙(OpenHarmony)开发实现 息屏/亮屏 详情
  • Vue本地开发调试使用Proxy实现接口代理配合Nginx实现瓦片png文件代理,实现本地模拟GIS开发环境
  • 股价两天涨超30%,中航成飞:不存在应披露而未披露的重大事项
  • 乌克兰议会批准美乌矿产协议
  • 李干杰走访各民主党派中央和全国工商联机关
  • 魔都眼|上海多家商场打开绿色通道,助力外贸出口商品转内销
  • 牛市早报|金融政策支持稳市场稳预期发布会将举行,商务部:中方决定同意与美方进行接触
  • 住宿行业迎“最火五一”:数千家酒店连续3天满房,民宿预订量创历史新高