Redis常用数据类型和事物以及并发

时间:2021-04-12 08:54:13

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做缓存避免脏数据

如果查询的时候发现没有才去从数据库查 然后更新Redis

更新数据时 会清空Redis。清空Redis的操作应该放在更新接口结束之后,防止查询和更新并发导致Redis存取不到最新的数据。(这个事物的隔离级别如果是READ COMMITTED 才可以完全避免Redis存取不到最新的数据)

如果更新MySQL的时候局部更新Redis

如果采用更新数据的时候 就更新Redis。也应该放到MySQL事物之后更新Redis,防止Redis存取到事物没有成功的脏数据。

Redis常用数据类型和事物以及并发的更多相关文章

  1. Redis常用数据类型

    Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html     Redis最为常用的数据类型主要有以下五种: ●Str ...

  2. Redis常用数据类型及各种数据类型应用和实现方式

    Redis常用数据类型: StringHashListSetSorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Red ...

  3. Redis常用数据类型介绍、使用场景及其操作命令

    Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...

  4. Redis常用数据类型以及操作

    Redis常用数据类型以及操作 目录 Redis常用数据类型以及操作 一.String数据类型 1. SET/GET/APPEND/STRLEN 2. INCR/DECR/INCRBY/DECRBY ...

  5. Redis常用数据类型及其存储结构(源码篇)

    一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...

  6. redis常用数据类型对应的数据结构

    redis的数据类型都是通过多种数据结构来实现,主要是出于时间和空间的考虑,当数据量小的时候通过数组下标访问最快,占用内存最小[压缩列表是数组的变种,允许存储的数据大小不同] 因为数组需要占用连续的内 ...

  7. redis之 Redis常用数据类型

    Redis最为常用的数据类型主要有以下7种: 一. String (字符) 常用命令:  set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key ...

  8. Redis常用数据类型及使用场景

    Redis最为常用的数据类型 字符串(String) 字符串列表(list) 字符串集合(set) 哈希(hash) 有序的字符串集合(sorted set) String(字符串) 字符串是最基本的 ...

  9. Redis常用数据类型及命令

    Redis数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 注意: 命令的关键词,如set ...

随机推荐

  1. web前端页面性能优化小结

    影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我 ...

  2. hdu 2052

    PS:竟然一次AC....惊喜...注意每个实例后跟一个空行.. 学到一个快速清空数组的用法...memst函数.  memst(void *s,char a,sizeof n)  把 s里面的前n个 ...

  3. [usaco2009febgold]道路翻新 最短路+dp

    这道题居然卡SPFA,难受,写了这么长时间的SPFA,都快把dij忘光了: 设d[i][j]为修j条路到i的最短距离,然后跑堆优化dij就行了: 实测中SPFA两组大数据超时严重: dij约300ms ...

  4. pku3277 City Horizon

    http://poj.org/problem?id=3277 线段树,离散化,成段更新 #include <stdio.h> #include <stdlib.h> #defi ...

  5. 如何彻底删除SVN中的文件和文件夹&lpar;附恢复方法&rpar;

    在SVN中如果删除某个文件或文件夹也可以在历史记录中进行找回,有的时候需要彻底删除某些文件,即不希望通过历史记录进行恢复,需要在服务器上对SVN的数据进行重新整理 这里假设SVN项目的目录为 /dat ...

  6. Oracle case 关键字的使用

    select e.salary, --case 语句开始 case then salary else salary end new_salary --case 语句结束,可见也和存储过程等结束方式一样 ...

  7. &lbrack;POJ 3581&rsqb;Sequence

    [POJ 3581]Sequence 标签: 后缀数组 题目链接 题意 给你一串序列\(A_i\),保证对于$ \forall i \in [2,n],都有A_1 >A_i$. 现在需要把这个序 ...

  8. div&comma;margin&comma;padding

    <!-- 类比礼品盒里装方块月饼.月饼的食用部分(我们把它称之为月饼肉身)要装在小包装盒里,月饼肉身即为content.月饼肉身与直接包裹它的小包装盒(我们把它叫做月饼的衣服)之间的距离叫pad ...

  9. AltiumDesigner 网络标号放置技巧

    我们在使用AD画图的过程中,灵活的使用一些小技巧可以使我们的工作事半功倍,今天给大家介绍一种在画原理图过程中的小技巧. 我们在画原理图过程中经常会放置网络标号,尤其是很多芯片管脚上,例如现在我需要在这 ...

  10. 【bzoj4503】 两个串 FFT

    $FFT$套路题(然而我看错题了) 我们考虑化一下式子. 设当前比较的两个部分为$S[i....i+|T|-1]$和$T[0....|T|-1]$. 我们对串$T$中出现问号的位置全部赋值为$0$. ...