ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis(02)数据类型&事务

2021-08-15 01:00:54  阅读:159  来源: 互联网

标签:02 事务 redis 数据类型 Redis value 命令 key 集合


五大数据类型

  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 的事务操作

标签:02,事务,redis,数据类型,Redis,value,命令,key,集合
来源: https://www.cnblogs.com/yxnrh/p/15139558.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有