Redis常用数据类型和事物以及并发
Redis数据类型
基本类型(String int):
如 set key value 、get key 等 所有命令都是按照 key value
keys * 可以将全部数据列出,其中后面的 " * " 表示数据的匹配。
setnx key value 不覆盖设置,返回0表示失败(原来这个key已经有值),返回1表示成功。
setex key time value 设置数据保存的有效时间(time 单位是秒)
ttl key 查看当前数据的有效时间
flushdb 清空仓库数据。
基本类型适合用户进行短期的数据存储
Hash数据类型
其保存的数据结构为 "key=value"
举例:保存一个用户的用户名、真实姓名、密码,
hset user-admin username admin hset user-admin name xiaoming hset user-admin password 123456
取得用户名)hget user-admin username
取得真实姓名hget user-admin name
取得密码 hget user-admin password
有了Hash之后 Redis的数据类型可以和JAVA中VO匹配的上(都是key-value格式)
hash类型存在的意义不大,因为基本类型做JSON存储也可以达到hash的效果
List数据类型
List是一个链表结构,链表结构的时间复杂度是n
举例:创建一个List并设置若干个内容。lpush testList test1 test2 test3(testList是集合的名字,后面的是集合存储的数据)
进行指定范围的链表数据输出(链表是不能通过index查询的) lrange testList 0 1 返回 test3 test2 (栈 先进后出)
lrange testList 0 -1表示输出全部的内容
可以利用List类型实现消息队列或者缓冲的功能,在实际开发之中有很多公司可能不直接使用消息队列中间件,而直接利用Redis代替
Set 数据类型
可以实现集合的比对处理,列如可以实现数据的交集,并集,插集(比如 微博中 共同关注好友,可能关注等。。。)
举例 sadd user a b c d e(向集合user中追加五个元素)
列出所有元素 smembers (set集合无序)
删除某个元素 srem user a
返回两个集合的差集合 sdiff set1 set2(返回几个set1和set2的差集)
保存差集的运行结果到另一个集合 sdiffstore存储集合key 集合key1 集合key2
该类型支持集合的运算 可用在相似度检测,好友推荐等
SortedSet集合
该集合算是Set集合的扩展,该集合可以保存一个分数,这个分数的操作就可以作为数据的统计结果出现
追加有序集合数据:zadd 集合key 分数 内容
数据增长:zincrby 集合key 增长分数 内容
根据分数取得指定范围的数据 zrangebyscore 集合 开始分数 结束分数 withscores
SotedSet主要进行数据的流式分析(利用分数分析数据,比如一个商品浏览了多少次)
Redis事物处理
Redis支持事物处理,但是这种事物处理本身是存在有设计缺陷的。
打开事物:multi
取消事物:discard
提交事物:exec
支持举例: Multi ; set i =10; discard;因为取消了事物所以 i的值不会被set成10 所以Redis是支持事物的。
缺陷举例 :Multi ; set i=10; incr name; exec; 因为 name属性不是int 所以会出现报错:ERR Value is not an integer。但是 这种情况i=10;会被正确的执行 存到Redis里面。
Redis事物不完美也可以说不支持事物,因为Redis设计之初是不考虑事物的。
Redis乐观锁
Redis乐观锁的处理比较简单 利用watch关键字监听redis的一些键即可,不需要增加处理列(也就是平时所说的版本号)
事物1 | 事物2 |
watch id; 进行该数据的监听 | watch id; |
Multi; | Multi; |
set id 100 | |
set id 200; | exec; |
exec;返回nil,表示本次更新失败 |
此时由于第二个事物更新了原始数据 id,那么就表示该原始数据上的一个标记列发生了变化(类似于Mysql的版本号),当第一个事物更新的时候,会返回nil表示本次更新失败。
Redis主从
Redis主从其实是为了数据备份(不同于MySQL MySQL主从有读写分离的功能)。
当数据做出任何处理操作的时候都进行即时的备份,这种设计在Redis里面叫做主从设计 从服务器只是做数据备份 除此之外 什么都不做。常用 一主二从制。
配置(大致说明):
1)主服务器配置不需要做出任何变化,我不关心你有多少从服务器
2)编辑redis-->conf下面 redis.conf配置文件 salveof masterip masterport
3)在从服务器上设置 masterauth "主服务器的密码"
4) ./redis-server redis.conf 启动Redsi
Redis做缓存避免脏数据
如果查询的时候发现没有才去从数据库查 然后更新Redis
更新数据时 会清空Redis。清空Redis的操作应该放在更新接口结束之后,防止查询和更新并发导致Redis存取不到最新的数据。(这个事物的隔离级别如果是READ COMMITTED 才可以完全避免Redis存取不到最新的数据)
如果更新MySQL的时候局部更新Redis
如果采用更新数据的时候 就更新Redis。也应该放到MySQL事物之后更新Redis,防止Redis存取到事物没有成功的脏数据。
Redis常用数据类型和事物以及并发的更多相关文章
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis常用数据类型及各种数据类型应用和实现方式
Redis常用数据类型: StringHashListSetSorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Red ...
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis常用数据类型以及操作
Redis常用数据类型以及操作 目录 Redis常用数据类型以及操作 一.String数据类型 1. SET/GET/APPEND/STRLEN 2. INCR/DECR/INCRBY/DECRBY ...
- Redis常用数据类型及其存储结构(源码篇)
一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...
- redis常用数据类型对应的数据结构
redis的数据类型都是通过多种数据结构来实现,主要是出于时间和空间的考虑,当数据量小的时候通过数组下标访问最快,占用内存最小[压缩列表是数组的变种,允许存储的数据大小不同] 因为数组需要占用连续的内 ...
- redis之 Redis常用数据类型
Redis最为常用的数据类型主要有以下7种: 一. String (字符) 常用命令: set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key ...
- Redis常用数据类型及使用场景
Redis最为常用的数据类型 字符串(String) 字符串列表(list) 字符串集合(set) 哈希(hash) 有序的字符串集合(sorted set) String(字符串) 字符串是最基本的 ...
- Redis常用数据类型及命令
Redis数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 注意: 命令的关键词,如set ...
随机推荐
- 关于js中对象和函数的一道问题
今天在写代码的时候遇到一个问题,没有解决,又在sf上提问了..冏..,最后讨论良久终于解决,和往常一样,做一个备忘,最近打算把印象笔记里的东西迁来.具体可访问http://segmentfault.c ...
- 如何设置PPT中的演讲者模式
①1.首先将投影设备或其它幻灯片输出设备连接到笔记本或 PC 上,在 Windows 7 中按Win 键+P 并选择扩展模式将当前笔记本或 PC 的显示器与投影显示输出设备设置为扩展模式. ②我们 ...
- [NOIP2002]字串变换 T2 双向BFS
题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多6个规则): A1−>B1 A2−>B2 规则的含义为:在 A$中的子串 A1可以变换为可以变换为B1.A2可以变换为可 ...
- jenkins 解决构建成功后进程消失的问题
最近模块拆分,独立出了几个服务.上线流程并不复杂,只需要在指定目录执行bash deploy.sh master即可上线master分支.但是架不住模块太多,每天在上线流程上也花费了不少时间,所以尝试 ...
- java技术树+必读书籍
引子 本篇文章用技术树的形式来展示java相关技术栈.所有技术点有博客的都自带链接,没有的后续加上. 必读书籍推荐: 1.java基础: <effective java>-->四星推 ...
- Postman----支持markdown可自动生成接口文档
1.postman支持markdown作为集合中的请求,对集合和文件夹进行文字描述的方式,您可以嵌入屏幕截图和其他图像已获得更多描述性的介绍. 2.已markdown语法为准,填写自己想要展示的内容 ...
- Hadoop配置第2节-JDK的安装
Hadoop配置-JDK的安装 总体目标:完成zookeeper+Hadoop+Hbase 整合平台搭建 进度:1:集群网络属性配置2:集群免密码登陆配置3:JDK的安装4:Zookeeper的安 ...
- Linux中以单容器部署Nginx+ASP.NET Core
引言 正如前文提到的,强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器,本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程. Ng ...
- TensorFlow从1到2(八)过拟合和欠拟合的优化
<从锅炉工到AI专家(6)>一文中,我们把神经网络模型降维,简单的在二维空间中介绍了过拟合和欠拟合的现象和解决方法.但是因为条件所限,在该文中我们只介绍了理论,并没有实际观察现象和应对. ...
- CentOS7搭建本地YUM仓库,并定期同步阿里云源
CentOS7同步阿里云镜像rpm包并自建本地yum仓库 系统环境 # cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) # u ...