前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis开发与运维学习笔记---(5)

Redis开发与运维学习笔记---(5)

作者头像
AsiaYe
发布2020-04-01 16:53:09
4320
发布2020-04-01 16:53:09
举报
文章被收录于专栏:DBA随笔

//

Redis开发与运维学习笔记---(5)

//

事务

redis中的事务和MySQL中的事务类似,也是为了保证多条命令组合的原子性,为此,redis提供了简单的事务功能以及集成Lua来解决这个问题。下面我们来看redis的这个功能。

在redis中,事务需要使用multi命令和exec两个命令之间,类似于mysql的begin~commit;其中,multi代表事务开始,exec命令代表事务结束,他们之间的命令是原子执行的。

例如:

代码语言:javascript
复制
[root@VM_48_10_centos ~]# redis-cli
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set hello world
QUEUED
127.0.0.1:6379> exists hello
QUEUED
127.0.0.1:6379> exec
1) OK
2) (integer) 1

我们可以看到,multi之后,所有的命令都返回queued,也就是在队列中,当我们执行exec之后,才出现真正的返回结果。

如果我们执行了一半,发现某条命令出现错误,这个时候要终止,有没有类似MySQL中的RollBack的方法呢?在redis中,使用discard来回滚之前的操作:

代码语言:javascript
复制
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zhangsan
QUEUED
127.0.0.1:6379> set name1 lisi
QUEUED
127.0.0.1:6379> discard
OK

事务的错误处理

当在事务中,出现了错误的语句,将会造成事务无法执行,redis事务中的错误分为好几种,分别来介绍:

如下错误为少打了空格之后的报错:

代码语言:javascript
复制
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name0 zhangsan
QUEUED
127.0.0.1:6379> set name1 lisi
QUEUED
127.0.0.1:6379> setname2 wangwu
(error) ERR unknown command 'setname2'
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.

运行时错误

如果在执行multi中的命令时,命令本身没有问题,但是执行过程中出现逻辑错误,事务又被exec了,这种错误往往需要dba自己手工解决,redis并不支持此类信息的回滚。

watch命令

redis中的watch命令用来确保事务中的key没有被其他客户端修改过,才执行事务,加入在下面的环境中:

------------------------------------------------

session 1 session 2

set key "java"

watch key

multi

append key python

append key jedis

exec

get key

-----------------------------------------------

我们会发现,session1在执行的过程中,session2对key的值做了变更,此时,session1的exec命令会返回nil,也就是执行失败。

Redis的使用场景

可以做的事儿:

1、缓存,缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效的降低后端数据源的压力。redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。

2、排行榜系统,排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种其他维度计算的排行榜,redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便的构建各种排行榜系统

3、计数器应用,计数器在网站中至关重要,例如视频网站的播放量,电商网站的有效浏览数等等,为了保证数据的实时性,每一次播放和浏览都要做+1的操作,如果并发量很大,则对关系型数据库是一个比较大的挑战,而redis天然支持计数功能,性能也非常好。

4、社交网络,点赞、粉丝、共同好友、推送、下拉刷新等是社交网站的必备功能,,由于社交网站访问量比较大,传统关系型数据库不太适合保存这种类型的数据,redis提供的数据结构可以相对比较容易的实现这些功能。

5、消息队列系统,消息队列系统可以说是一个大型网站的必备系统组件,redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够抢单,但是对于一般的消息队列功能基本可以满足。

不可以做什么:

redis不适合作为大数据量应用的首选数据库,redis的数据是存放在内存中的,如果数据量很大,那么成本将会很高。

redis不适合做那些冷数据较多的应用的首选数据库。redis中适合放热数据,不适合放冷数据,大量的冷数据存放在内存中,会造成资源的浪费。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档