Redis介绍
Redis是用C语言开发的一个开源的高性能键值对(key-value)内存数据库,是一种NoSQL数据库
其中对value提供五种数据类型来存储值:字符串类型、散列类型、列表类型、集合类型、有序集合类型
什么是NoSQL数据库?
1.NoSQL,即Not-Only SQL(不仅仅是SQL),泛指非关系型的数据库。
2.什么是关系型数据库?数据结构是一种有行有列的数据库
3.NoSQL数据库是为了解决高并发、高可用、高可扩展、大数据存储问题而产生的数据库解决方案。
4.NoSQL可以作为关系型数据库的良好补充,但是不能替代关系型数据库。
一般建议业务相关的紧要数据存储到关系型数据库中,而一些敏感,大数据,高并发等信息存储在NoSQL中。
优势:快速查询
劣势:缺少结构化
redis常用的一些场景
1.内存数据库(登录信息、购物车信息、用户浏览记录等)
2.缓存服务器(商品数据、广告数据等等)。(最多使用)
3.解决分布式集群架构中的session分离问题(session共享)。
4.任务队列。(秒杀、抢购、12306等等)
5.支持发布订阅的消息模式
6.应用排行榜
7.网站访问统计。
8.数据过期处理(可以精确到毫秒)
redis数据类型
1.String类型:key-value形式,一个key所对应一个字符串value
2.Hash类型:value为字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。通过key和字段进行设置值或获取值。图结构如下(有点小类似于map):
3.List类型:存储一个有序的字符串列表,如 k1 对应value值为 "1" "3" "2".... 如可用于商品评论,对同一件商品,按时间顺序进行排序,先评论的放list前面,后评论的再插到后面,展示的时候按指定顺序取出
4.Set类型:集合类型,不重复,无顺序
5.SortedSet类型:有序集合
在实际工作中,key很少只是一个简单的字符串,一般采用xx:xx:xx形式,如items:comment:1001 进行分组,容易理解这个key-value的意义,表示商品编号1001的商品评论
在这里redis的安装和数据的增删改查的基本命令就不详细讲了
Redis事务
Redis事务介绍
- Redis的事务是通过MULTI,EXEC,DISCARD和WATCH这四个命令来完成的。
- Redis的单个命令都是原子性的,所以这里确保事务性的对象是命令集合。
- Redis将命令集合序列化并确保处于同一事务的命令集合连续且不被打断的执行
- Redis不支持回滚操作
相关命令
- MULTI
用于标记事务块的开始。
Redis会将后续的命令逐个放入队列中,然后使用EXEC命令原子化地执行这个命令序列。
语法:multi 命令
- EXEC
在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态
语法:exec
- DISCARD
清除所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态。
语法:discard
- WATCH
当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的状态。如果被监控的key内容发生变化,则事务中的命令全部不能执行成功
语法:watch key [key…]
注意事项:使用该命令可以实现redis的乐观锁。
- UNWATCH
清除所有先前为一个事务监控的键。
语法:unwatch
事务失败处理
- Redis语法错误(可以理解为编译期错误)命令错误
- Redis类型错误(可以理解为运行期错误)运行错误
- Redis不支持事务回滚
为什么redis不支持事务回滚?
- 大多数事务失败是因为语法错误或者类型错误,这两种错误,在开发阶段都是可以预见的
- redis为了性能方面就忽略了事务回滚