- 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开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
9. 会话1 :开启事务,进行相关操作
-
会话2:干扰
-
提交,结果为会话2的结果;
-
watch监控发生作用,两个共同操作一个key的话,先提交事务的一方修改,另一方将放弃所有操作;(秒抢)
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-6zTt31FU-1714948635784)]
[外链图片转存中…(img-lE5fntD4-1714948635785)]
[外链图片转存中…(img-wDOg2dXG-1714948635785)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!