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乐观锁
大家都知道Mysql利用版本号字段实现乐观锁。
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做缓存避免脏数据
MySQL和Redis是两个事物,不好做强一致性。
简单点:可以延时双删+过期时间保证最终一致性。
rm_redis
update_db
sleep xxx ms
rm_redis当然这种策略要考虑redis和数据库主从同步的耗时,所以在第二次删除前最好休眠一定时间,比如500毫秒,这样毫无疑问又增加了写请求的耗时
转载于:https://www.cnblogs.com/ssskkk/p/9901974.html
Redis常用数据类型和事物以及并发相关推荐
- redis常用数据类型的场景,你真的用对了么?
关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. redis常用数据类型的场景,你真的用对了么? redis常用数 ...
- Redis面试常问-- Redis常用数据类型
Redis常用数据类型 http://www.redis.cn/
- Redis 常用数据类型之 zset(有序集合)
Redis 常用数据类型之 zset(有序集合) 有序集合 zset(sorted-set)相关特性 redis 有序集合 zset 与 无序 set 类型的一样,都是 string 类型的集合元素, ...
- Redis常用数据类型使用及基本知识
前言(基本知识) Redis背景 08年的时候有一个意大利西西里岛的小伙子,笔名antirez(http://invece.org/),创建了一个访客信息网站 LLOOGG.COM.这个网站是 ...
- Redis常用数据类型及其对应的底层数据结构
Redis数据库 Redis是一种键值(Key-Value)数据库.相较于MySQL之类的关系型数据库,Redis是一种非关系型数据库.Redis存储的数据只包含键和值两部分,只能通过键来查询值.这样 ...
- (一)Redis常用数据类型及应用场景(Redis的解决方案汇总)
文章目录 一.Redis的介绍和安装 1.Redis是什么? 2.性能 3.支持的数据类型 二.数据类型实践案例 (一).String类型 (二).Hash类型(相对套娃) (三).list类型 (四 ...
- Redis常用数据类型及使用场景
String(字符串) 常用命令 SET key value GET key GETRANGE key start end #返回[start, end]区间的字符串,key不存在时返回空字符串 MG ...
- Redis常用数据类型的数据结构
文章目录 1. Redis 数据库介绍 2. 列表(list) 3. 字典(hash) 4. 集合(set) 5. 有序集合(sortedset) 6. 数据结构持久化 7. 总结 1. Redis ...
- Redis常用数据类型Set集合
sadd key value 向指定key添加set数据,smembers key 获得指定key的数据. 127.0.0.1:6379> sadd s1 1 (integer) 1 127.0 ...
最新文章
- Unity从零开始构建能力体系 Unity Ability System
- Python Web学习笔记之TCP的3次握手与4次挥手过程
- USB hub(221)
- 为什么有些美国人名字仅仅只是两个英文字母(并不是缩写)?
- 漫步微积分二十四——定积分引言
- pycharm-python文件注释头
- 如何查看windows xp系统的位数?
- HTTP之一:http协议简介(3)
- python中常见的运行时错误_python--17个新手常见Python运行时错误
- python定时器毫秒_Python实现定时精度可调节的定时器
- day6:vcp考试
- mplab java失败_【超菜鸟求助】编译时失败,以下是显示内容。
- 计算机硕论题目,硕士论文题目精选(计算机方向)
- 怎样查看PPT中的字数
- Epicor 调试 customization
- objectArx ---反应器
- 计算机硬件设备ppt教案,《计算机硬件基础》PPT课件.ppt
- Day20 网络编程
- configure: error: Package requirements (sqlite3 」 3.7.4) were not met:
- 广度优先搜索算法的典型应用——消灭小星星游戏的核心代码实现与解析
热门文章
- 后台系统应该具备的素养
- Java笔试面试练习题---集合
- 【C++对象模型】第一章 关于对象
- 修改一个CGRect的值
- 一些简单的例子让你在Java中能更好的学习并理解循环结构(1)!
- Sqlserver存储过程和C#分页类简化你的代码!
- c语言 枚举类型 uint32_最全面C语言数据基本数据类型解析
- 集成springboot案例_SpringBoot开发者都在用的五款优质扩展,每个都很能打!
- 网络爬虫python的特点有哪些_为什么写网络爬虫天然就是择Python而用
- 利用python安装opencv_科学网—Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南 - 张重生的博文...