Redis常用数据类型及使用场景
Redis最为常用的数据类型
- 字符串(String)
- 字符串列表(list)
- 字符串集合(set)
- 哈希(hash)
- 有序的字符串集合(sorted set)
String(字符串)
字符串是最基本的一种Redis值。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或序列化的Ruby对象。字符串的长度可以是最大512MB。
可以用Redis中的字符串做一些有趣的事情,例如:
- 将字符串用作原子计数器,使用INCR系列中的命令:INCR、DECR、INCRBY。
- 使用Append命令向字符串追加。
- 使用字符串作为带有GETRANGE和SETRANGE的随机访问向量。
- 在小空间中编码大量数据,或者使用GETBIT和SETBIT创建Redis支持的Bloom过滤器。
List(字符串列表)
Redis列表是简单的字符串列表,按插入顺序排序。可以将元素添加到Redis列表中,在列表的头部(左侧)或尾部(右侧)添加新元素。LPUSH命令在头部插入一个新元素,而RPUSH在尾部插入一个新元素。当对空键执行其中一个操作时,将创建一个新列表。类似地,如果列表操作将清空列表,则从键空间中删除该键。这些都是非常方便的语义,因为如果使用不存在的键作为参数进行调用,那么所有列表命令的行为都与使用空列表调用它们时的行为完全相同。
列表操作和结果列表的一些示例:
LPUSH mylist a # now the list is "a"
LPUSH mylist b # now the list is "b","a"
RPUSH mylist c # now the list is "b","a","c" (使用 RPUSH命令)
列表的最大长度是2^32 - 1个元素(4294967295,每个列表可以包含超过40亿个元素)。从时间复杂性的角度来看,Redis列表的主要特性是支持在头和尾附近不断地插入和删除元素,即使插入了数百万元素。访问元素在列表的极端位置非常快,但是如果你试图访问一个非常大的列表的中间位置,则速度会很慢,因为这是一个O(N)操作。
可以用Redis中的字符串做一些有趣的事情,例如:
- 为社交网络中的时间轴建模,使用LPUSH在用户时间线上添加新元素,使用LRANGE检索最近插入的一些项。
- 可以使用LPUSH和LTRIM一起创建一个列表,该列表的元素数量不会超过给定的元素数量,但是只记住最新的N个元素。
- 列表可以用作消息传递原语,例如用于创建后台作业的著名Resque Ruby库。
- 可以使用列表做更多的事情,这种数据类型支持许多命令,包括像BLPOP这样的阻塞命令。
Set(集合)
Redis集合是字符串的无序集合。可以在O(1)中添加、删除和测试成员的存在性(无论集合中包含多少元素,时间都是常量)。Redis集具有不允许重复成员的理想属性。多次添加相同的元素将导致一个集合具有此元素的单一副本。实际上,这意味着添加成员不需要检查是否存在,然后添加操作。关于Redis集合,它们支持从现有集合开始计算集合的许多服务器端命令,因此可以在很短的时间内完成集合的并集、交集和差异。一个集合的最大成员数是2^32 - 1(4294967295,每个集合的成员数超过40亿)。
可以用Redis集合做很多有趣的事情,例如:
- 可以使用Redis集跟踪唯一的东西。想知道访问给定博客文章的所有唯一IP地址吗?每次处理页面视图时只需使用SADD即可。不用担心重复ip问题,因为集合会自动过滤。
- Redis集合很好地表示关系。可以使用Redis创建一个标记系统,使用一个集合来表示每个标记。然后,可以使用SADD命令将具有给定标记的所有对象的所有id添加到表示该特定标记的集合中。也可以使用SINTER命令返回交集成员集合。
- 可以使用集合使用SPOP或SRANDMEMBER命令随机提取元素。
Hash(哈希)
Redis散列是字符串字段和字符串值之间的映射,因此它们是表示对象的最佳数据类型(例如,具有多个字段(如name、姓氏、年龄等)的用户):
@cli
HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000
- 带有几个字段的散列(其中几个字段的意思是最多100个左右)以一种占用很少空间的方式存储,因此可以在一个小型Redis实例中存储数百万个对象。
- 虽然散列主要用于表示对象,但它们能够存储许多元素,因此你也可以将散列用于许多其他任务。
- 每个散列最多可以存储2^32 1个字段值对(超过40亿)。
Sorted-set(有序的set集合)
与Redis集合类似,Redis排序集是字符串的非重复集合。不同之处在于,排序集的每个成员都与分数相关,分数是用来对排序集进行排序的,从最小的分数到最大的分数。虽然成员是唯一的,分数可以重复。使用排序的集合,可以以一种非常快的方式(在与元素数量的对数成比例的时间内)添加、删除或更新元素。可以非常快速地按分数或按级别(位置)获取范围。访问排序集的中间也非常快,所以可以使用排序集作为一个非重复元素的智能列表,在其中你可以快速访问所需的一切:元素顺序,快速存在测试,快速访问中间元素!简而言之,使用排序集,你可以完成许多性能优异的任务,这些任务在其他类型的数据库中很难建模。
有了排序集,你可以:
- 在一款大型在线游戏中,你可以选择一个排行榜,每当有新的分数被提交时,你就可以使用ZADD进行更新。可以轻松地使用ZRANGE获取顶级用户,还可以在给定用户名的情况下,使用ZRANK返回其在列表中的排名。同时使用ZRANK和ZRANGE,可以向用户显示与给定用户类似的分数。这些操作都非常快。
- 排序集通常用于索引存储在Redis中的数据。例如,如果有许多表示用户的散列,那么可以使用一个已排序的集合,其中的元素以用户的年龄为得分,以用户的ID为值。因此,使用ZRANGEBYSCORE检索给定时间间隔的所有用户既简单又快速。
- 排序集可能是最先进的Redis数据类型,所以花点时间检查排序集命令的完整列表,以发现可以使用Redis做什么!
Redis常用数据类型及使用场景的更多相关文章
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis常用数据类型及各种数据类型应用和实现方式
Redis常用数据类型: StringHashListSetSorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Red ...
- Redis常用数据类型以及操作
Redis常用数据类型以及操作 目录 Redis常用数据类型以及操作 一.String数据类型 1. SET/GET/APPEND/STRLEN 2. INCR/DECR/INCRBY/DECRBY ...
- Redis各种数据类型的应用场景
redis是一种key values形式的非关系型数据库,通过内存存储,也可以把数据持久化到本地文件中. redis支持丰富的数据类型,String,list,set,zset,hash,下面说一下各 ...
- redis之 Redis常用数据类型
Redis最为常用的数据类型主要有以下7种: 一. String (字符) 常用命令: set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key ...
- Redis常用数据类型和事物以及并发
Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...
- Redis各种数据类型的使用场景
Redis的六种特性 l Strings l Hashs l Lists l Sets l Sorted Sets l Pub/Sub Redis各特性的应用场景 Strings Strings 数据 ...
- 一文搞定Redis五大数据类型及应用场景
本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...
随机推荐
- Java并发编程总结2——慎用CAS
一.CAS和synchronized适用场景 1.对于资源竞争较少的情况,使用synchronized同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗cpu资源:而CAS基于硬件实 ...
- Python 绝技 —— TCP服务器与客户端
i春秋作家:wasrehpic 0×00 前言 「网络」一直以来都是黑客最热衷的竞技场.数据在网络中肆意传播:主机扫描.代码注入.网络嗅探.数据篡改重放.拒绝服务攻击……黑客的功底越深厚,能做的就越多 ...
- yum 安装mysql数据库
1.先查看是否有安装mysql,有的话通过yum remove mysql先卸载掉,卸载完成后执行 yum install -y mysql-server mysql mysql-deve 2.启动m ...
- 线性表java实现
顺序表 public class SequenceList { /* * content,节点内容 * location,节点在表中的位置(序号) * */ private String conten ...
- xamarin android 实现二维码带logo生成效果
MultiFormatWriter writer = new MultiFormatWriter(); Dictionary<EncodeHintType, object> hint = ...
- ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Cannot run program "hive": error=2, No such file or directory
原因是hive没有设置环境变量 1,vim /etc/profile (切换root用户) 2.source /etc/profile
- CodeSmith读取数据库
这两天在看CodeSmith文档,因为官方文档在读数据库这一篇使用的是VB写的,对于C#使用者来说看起来很不方便,所以我改成C#的,顺便写下我自己的使用过程. 首先,要使用CodeSmith连接数据库 ...
- 24-hadoop-hiveserver2&jdbc-正则数据导入
hive 可以 类似jdbc链接, 但启动的必须是hiveserver2, 才可以使用 hiveserver2 默认监听 10000 端口 1, 启动: nohup $HIVE_HOME/bin/hi ...
- spring boot实现ssm(2)功能
spring 和 mybatis 整合的那篇: ssm(2) . 配置文件比ssm(1) 更多, 在做项目的时候, 配置文件是一个让人头大的事情. 那么在spring boot中, 实现相同功能, 需 ...
- VMware ESX常用命令
一. VMware ESX Command 1. 看你的esx版本 vmware –v 2. 查看显示ESX硬件,内核,存储,网络等信息 esxcfg-info -a(显示所有相关的信息) esxcf ...