Redis教程

Redis(02)数据类型&事务

本文主要是介绍Redis(02)数据类型&事务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

五大数据类型

  String set get      key value value全是字符串类型

  List  L/Rpush L/Rpop    key value  key是链表头 value是链表节点

  Set  sadd scard    key value  由多个成员组成的集合  key是集合名 value是String类型且无序,唯一的 , 集合的成员

  Hash  hset hget    key value  hash是map的集合 key是集合名 value是以string类型的map为集合成员, 适合存储对象

  Zset zadd zcard    key value  有序集合, key是集合名 value是集合成员, 每次添加成员之前都需要为其添加索引值, 通过索引号排序

三种特殊数据类型 

  geospatial  geoadd geopos  存储经纬度(geo有效经度 -180到180度, geo有效纬度 -85到85度),位置名称到key中, geo是基于zset实现的,可以用zset命令来操作geo

  hyperloglog   是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的

        基数统计: 统计集合里不重复的元素数量

  bitmap setbit getbit bitcount 不是真正意义上的数据类型只是 string 类型上面向二进制比特位的操作 只有0和1两个状态的flag都可以用bitmap存储

 


 

事务本质是一组命令的集合, 在这一组事务执行过程中是会一次性的按照顺序执行且不能被干扰 , 因此redis事务会有 一次性,顺序性, 排他性

 在MySQL里的事务都要求ACID四个原则其中原子性 在Redis单条命令是保证原子性的, 但事务不保证原子性的

 redis所有事务会在一组命令全部入队后才发起执行命令从第一条命令开始执行, 因此redis没有事务隔离级别的概念

一个事务从开始到执行会经历三个阶段  开启事务(multi)--------->命令入队----------->执行事务(exec)

multi开启事务后, redis输入所有命令都会入队, exec一次性的按队列顺序执行命令

discard 取消事务, 之前入队的命令都会失效且关闭已开启的事务

事务由两个异常

  编译型异常, 其中一条命令语法有错误编译不通过, 那么整个事务的都不会去执行

  运行时异常,  语法上没有错误, 但运行时操作有异常, 如incr一个string类型的value, 语法上能编译, 也不影响事务中其他命令的执行, 但执行完事务后会抛该命令异常

 


 

监视 watch key

悲观锁: 认为什么时候都会出现问题, 无论做什么都会先加锁

乐观锁: 认为什么时候都不会出现问题, 所以无论做什么都不会加锁,

使用 watch 当做 redis 的乐观锁操作: watch 监视指定 key , 当连接1开启事务后需要修改监听中的 key的value 但未执行,   该key被连接2修改了值,  , 连接1 exec 执行事务时会先检查监听中的key的值是否有变化,如果有变化则事务失败, 需要 unwatch 解除监视,并重新监视该key到达更新value的目的, 更新value后再重新开始之前连接1 的事务操作

这篇关于Redis(02)数据类型&事务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!