1.可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行执行而不会被其它命令插入,不许加塞
2.redis是支持事务的,支持部分事务
3.redis2.2版本以后又支持一个CAS操作
1.一个队列中,一次性、顺序性、排他性的执行一系列命令
1.开启事务:MULTI [会返回一个OK]
2.set k1 v1[这个时候返回的是一个QUEUED,代表是在队列里面,这个时候其实并没有提交]
3.提交事务:EXEC[这个时候会将你开启事务之后和提交之前所有的操作的结果给给出来]
4.放弃事务:DISCARD[这个时候开启事务之后做的步骤都没用了]
5.总结:其实开启事务就相当于你推了个购物车,set的操作就像你将要买的东西放进去,但是还没有付钱,所以还不能算。EXEC就相当于你付钱了,然后给你你买东西的清单
1.也就是开启事务之后不管有多少操作,只要有一个出错了,就全部失效
1.也就是开启事务之后不管有多少操作,谁错找谁,其他对的请放行
1.开启:以MULTI开始一个事务
2.入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面
3.执行:由EXEC命令触发事务
1.单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2.没有隔离级别的概念:队列中的命令没有提交之前都不会被实际的执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头疼的问题
3.不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
1.虽然说redis是主要被我们用来做了缓存,但实际上,redis其实也自己研究和加入了订阅。只是我们更习惯的去使用消息中间件。这边也不会过多的去介绍,就是简略的提一下:
1.进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息
2.订阅/发布消息图
先订阅后发布后才能收到消息
1.可以一次性订阅多个 subscribe c1 c2 c3
2.消息发布 publish c2 hello-redis
3.订阅多个,通配符*,psubscribe new*
4.收取消息,publish new1 redis2015
1.反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换成主库
1.一组sentinel能同时监控多个master
2.复制延迟
1.五种数据类型:string list zset set hash
2.String:
常用命令:set,get,decr,incr,mget 等
使用场景:String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 常规key-value缓存应用; 常规计数:微博数,粉丝数等
举例:我们在nginx做负载均衡的时候,如果是基于权重的分配方式,切换web服务器时,会导致用户的session信息丢失我们可以将它保存在redis中
3.hash:
常用命令:hget,hset,hgetall 等
使用场景:redis中的哈希结构就如同java中的map一样,Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。它的使用方法就像它的别名字典,通过对应的字典名(key)和词条名(field)查询内容(value)
举例:比如我们可以Hash数据结构来存储用户信息,商品信息等等。例如修真院的首页的职业信息,只是简单的信息集合,我们可以直接将它储存到redis中,在读取的过程中就不用序列化对象,直接操作
4.list:
常用命令: lpush,rpush,lpop,rpop,lrange等
使用场景:list就是链表,Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如微博的关注列表,粉丝列表,最新消息排行等功能都可以用Redis的list结构来实现。
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销
5.set:
常用命令:sadd,spop,smembers,sunion 等
使用场景:set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的。 当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的、
举例:
1.共同好友、二度好友
2.利用唯一性,可以统计访问网站的所有独立 IP
3.好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
6.zset
常用命令: zadd,zrange,zrem,zcard等
使用场景:和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。
举例: 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用Redis中的SortedSet结构进行存储。
目前就先只想到了这些,等到时侯在想到或者看到了啥跟redis有关的,我会在进行更新的~