- NoSql数据库
==============================================================================
由于用户量增大因此请求数量也增大,数据压力也就大了;多态服务器之间数据不同步;多态服务器之间的锁已经不存在互斥;因此引入了Redis。
Redis(Remote Dictionary Server)就是一款基于Key-Value的NoSQL非关系数据库;远程字典服务,由C语言编写完成,基于内存存储数据,提供了多种持久化机制,高性能并且提供了集群的搭建方式,可以方便的横向扩展以及纵向的垂直扩展,还支持事务的操作,保证了高并发场景下数据的安全性和一致性;
- 简单:部署较为简单
- 访问性能优越:读数据11万次/s,写数据8万次/s;
- 数据类型丰富:string、list、set、hash、zset、地理信息……
- 可以持久化存储:断电或者重启数据不会丢失;
- 解决Session共享问题
- 解决高频数据库查询问题
- 高访问数据解决(将高访问的数据存到Redis中使用时直接从内存中取出,提高了速度和服务器开销)
- ……
==============================================================================
下载地址:https://github.com/tporadowski/redis/releases
- 下载好减压即可
服务启动:在根目录下cmd中启动
redis-server.exe redis.windows.conf
客户端启动:在根目录下cmd
redis-cli.exe
2.3 使用Redis Desktop Manager连接Redis
下载地址:https://redisdesktop.com/pricing
- 傻瓜式安装
2.3.1 新建链接
2.3.2 测试是否成功
2.3.3 打开控制台
===================================================================================
Redis有5种常见的结构:string、hash、list、set、zset
不常用:
- HyperLogLog:计算近似值
- GEO:地理存储
- BIT:存储的是一个byte[]
一般用于存储一个值,一个key对应一个值;
| key | value |
| :-: | :-: |
| name | kak |
- 一个key(name)对应一个值(kak)
存储一个对象数据,一个key对应一个Map;
| stu | name | kak |
| :-: | :-: | :-: |
| | age | 20 |
| | gender | man |
- 存储对象,一个stu对应了三个属性,一个Map集合;
使用list结构实现栈和队列结构,一个key对应一个列表;
key:value1,value2,value2,value3……
- 一个key存储多个有序的对象
交集、差集、并集的操作,一个key对应一个集合;
key:value4,value2,value1,value3……
- 一个key存储多个无序的对象
排行榜、积分存储等等,一个key对应一个有序集合;
key:score1-value1,score2-value2,score3-value3……
- 放进去数据后会自动进行排序
=================================================================================
官方参考文档:http://doc.redisfans.com/
key-value value 为一个字符串,最大512M(弱类型)
- 类型隐式转换
#添加值
set person 30
#获取值
get person
#自增++
incr person
#自减–
decr person
#自增2个单位
incrby person 2
decrby person -2
#自减2个单位
incrby person -2
decrby person 2
#同时设置一个或多个key-value对
mset stu1 kak stu2 taotao stu3 zhuanghzuang
#同时获取一个或多个key-value对
mget stu1 stu2 stu3
#当key不存在时设置值,key存在时什么也不做
setnx stu1 kak
#设置值得同时,指定生存时间
setex stu1 20 kak
#在stu1对应的kaka追加内容,返回长度
append stu1 kaka
#查看value的字符串长度
strlen stu1
大小:2^32-1
#存储数据
hset stu:1 sage 23
#获取数据
hget stu:1 sid
#批量创建数据
hmset stu:2 sid 1002 sname kak sage 23
#批量获取数据
hmget stu:2 sid sname sage
#获取所有的hash的key值
hkeys stu:1
#获取所有的hash的value值
hvals stu:1
#获取所有的数据
hgetall stu:1
#获取当前hash结构中的值的数量
hlen stu:1
#删除key对应的值,返回值移除的数量
hdel stu:1 sid
#检查值是否存在,存在返回1,不存在返回0
hexists stu:1 sname
#设置值(不存在正常添加,存在不添加)
hsetnx stu:3 sid 1003
大小:2^32-1
#存储数据,返回长度
sadd slist zhangsan lisi wangwu zhaoliu tianqi
#获取全部数据
smembers slist
#随机获取数据,获取的同时删除
spop slist
#随机取得3个元素,不删除
srandmember slist 3
#交集(取多个set集合交集)
sinter slist slist2
#并集(取全部集合中的数据)
sunion slist slist2
#差集(取多个集合中不一样的数据)
sdiff slist slist2
#删除数据,返回删除的数量
srem slist tianqi
#查看set集合中是否包含kak这个值,包含1、不包含0
sismember slist kak
#保存交集的结果
sinterstore slist slist2
#差集保存到集合
sdiff slist slist2
有序集合
- 默认从小到大排序
#添加数据(87是score必须为数字,kak为member不可以重复)
zadd english 87 kak
#修改member的分数—加2分,存在加,不存在相当于zadd
zincrby english 2 kak
#查看指定的member的分数
zscore english kak
#查看范围(取下标)
zrange english 0 -1
#查看反序的范围(从大到小,取下标)
zrevrange english 0 -1
#查看30~60分的人数
zcount english 30 60
#查看名次,返回名次
zrank english kak
#查看zset中的数据数量
zcard english
#删除zset的成员
zrem engilsh taotao
#清空当前所在的数据库
flushdb
#清空全部的数据库
flushall
#查看数据库有多少key
dbsize
#查看最后一次的操作时间
lastsave
#实时监控Redis服务接收的命令
monitor
#选择操作的0库
select 0
#移动stu到另外一个库(1库)
move stu 1
#移除key的剩余生存时间:1移除成功、0不存在生存时间或者key不存在
persist key
#查看key值得数量
keys *
#删除
del person
#查看剩余生存时间:key不存在时返回-2、key存在但没有设置剩余生存时间时返回-1、设置生存时间返回key的剩余生存时间(秒)
ttl person
#设定生存时间,给person设定生存时间为10秒
expire person 10
#检查给定key是否存在:存在返回1,否则返回0
exists person
==============================================================================
- multi :开启事务
- exec: 执行事务
- discard:放弃事务
- watch:检查
- unwatch:撤销检查
redis的事务是分布式事务也就是跨链接的事务;
5.2.1 单链接提交事务
-
multi 开启事务后,将写入的数据存放在队列中不执行,提交的时候才按顺序执行;
-
exec提交事务时,一次性执行;
5.2.2 单链接撤销事务
-
multi 开启事务后,将写入的数据存放在队列中不执行,提交的时候才按顺序执行;
-
discard 撤销事务,不执行;
5.2.2 分布式事务
两个会话,跨连接
-
会话1:开启事务multi ,进行数据的操作,不提交;
-
会话2:查看,还是未改变的;
-
会话1:exec 提交事务
-
会话2:查看,已经改变
-
会话2:改变数据
-
会话1:提交,数据结果为会话2改变后的;
-
场景:如果同时操作,需要watch监控
-
watch key
-
会话1 :开启事务,进行相关操作
-
会话2:干扰
-
提交,结果为会话2的结果;
-
watch监控发生作用,两个共同操作一个key的话,先提交事务的一方修改,另一方将放弃所有操作;(秒抢)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/f4e563253d8e5c2a6a519a79b2c4c99e.jpeg)
总结
上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。
很多人担心学了容易忘,这里教你一个方法,那就是重复学习。
打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
!**
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/f4e563253d8e5c2a6a519a79b2c4c99e.jpeg)
总结
上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。
很多人担心学了容易忘,这里教你一个方法,那就是重复学习。
打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。
[外链图片转存中…(img-ycgf1H1t-1713279688582)]
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!