redis:c语言开发,并发次10w+,性能高,基于内存(高贵),与cpu进行交互快,我们的mysql数据库是放在硬盘上的文件。

redis简介 他属于nosql数据库,非关系型数据库 没有外键 表的概念 k-v 与 k-v之间没有联系

redis应用:比较常用的是做缓存

redis在linux下的安装:

windos下直接解压开就行
linux下启动redis
知道redis.cli操作端
redis。server是启动用的
先启动 再操作
注意linux下的更改redis.conf文件 把它放到后台运行
在redis的conf配置文件下可以配置密码 端口 是否运行在后台等等
设置完密码就要在登录的时候加上-a password 或者进去之后再auth password

注意 默认情况下redis不允许远程访问 需要配置
小技巧:(在文件中查找关键字)
当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?
在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。
如果你要继续查找此关键字,敲字符 n 就可以继续查找了,敲字符N向前搜索
把redis.conf中的127.0.0.0注释掉
测试一下:window客户端(cli)去访问redis的服务 发现成功连接

注意连接不成功注意一下防火墙 systemctl stop firewalld 关一下 或者开放指定的端口也行 这个端口看你配置文件了 默认是6379
Redsi的常用命令:
redis的key为string类型 value有下面5种数据结构的形式

对存储不同的value类型 我们有不同的命令
对于value为String类型 第三个常见应用是验证码的有效期
重复set 会刷新 除了setnx
这个1代表设置成功 0代表设置失败 这个重复设置是不刷新value的
setex key seconds values 就是key存活seconds秒
exist(存在)

setnx key value


对于value值为hash类型

脑子里有这张图:


hdel可以一次删除多个字段

列表:可以有重复元素

如图插入顺序:dcba
通过lpush key d c b a (每次插入在队头)
再通过lrange key 0 -1
得到顺序 a b c d
记住遍历的方向:从左->右 从刚插入到已插入 从队头插入
rpop key 显示的是d 同时把d移除掉 也就是返回并删除队尾
brpop key1 timeout
(b是阻塞)阻塞并删除,上面rpop的plus版
效果如下:如果队尾(很早之间添加的)有元素,删除
如果队尾没有元素,队为null的状态,阻塞自己timeout秒

集合:
无序集合 无法添加重复元素

1.无序 往set集合添加元素 重复的失败了

对于sdiff与写的集合顺序有关
对于sdiff hobby like
全体集合为hobby 去掉hobby与like相交的那部分
灵魂画手~

有序集合(根据score排):出现重复value,更新分数,遍历从小到大排(score)


redis常用命令:
不管什么类型,均可操作


ttl返回-1代表只要服务不关闭就一直存活
java操作Redis SpringdataRedis用的最多


用法简单


项目优化
缓存:


使用git实现版本控制
我们创建一个新的分支 在这个分支上进行开发 不影响主分支master的开发 开发完测试通过 合并到主分支上
redustemplate这个对象被做成bean是框架为我们做的
在我们添加redis依赖的时候 我们直接AutoWired就可以
当然如果你自己配置了这个bean(第三方@Bean管理)返回值为RedisTemplate的话
你的配置生效 注入的是你的bean
以你的为准

缓存验证码思路分析:

这个save方法和update方法 我们设置一个标志位默认0
如果修改或者保存修改为1,
如果reids中的数据不为null and 状态为0
查询
其他情况 要么数据为null 要么状态为1 要么即为null又为0
都要重新查询数据库
最后设置状态位为0
这个是我自己想的。。没有跟老师实现 功能测试成功,就用自己的了

可以支持多种缓存产品

常用注解:

对于没有引入缓存对应的包也就是。。。CacheManager,使用map集合来存储数据
只不过这个map在内存中,如果我们停止了服务器,缓存的数据就没有了

值得注意的是 key的构建是动态的 需要我们手动构建
value你可以理解为一个分类
获取返回值#result
获得形参 #形参名

一般查询我们用@Cacheable 先去查询缓存有对应key的value,如果有 直接返回 没有 就缓存其方法的返回值
但是如果方法返回值为空也会被缓存 所有加上condition 返回结果不为null的时候缓存返回结果
condition 满足条件缓存
unless 是满足条件不缓存 正好相反
注意:对应redis这种缓存,spring data redis 中 condition不支持#reslut 而unless支持#result

使用SpringCache操作redis缓存产品
