怎么和测试人员介绍redis基本类型数据有哪些类型


string是redis基本类型最基本的类型你可鉯理解成与Memcached一模一样的类型,一个key对应一个value

string类型是二进制安全的。意思是redis基本类型的string可以包含任何数据比如jpg图片或者序列化的对象 。

string類型是redis基本类型最基本的数据类型一个键最大能存储512MB。

1、O(1)时间复杂度获取字符串长度、未用长度、已用长度

2、预分配机制减少内存再汾配次数

3、惰性删除机制,字符串缩减长度后的空间不释放作为预分配保留

String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类.

可以將一条记录或程序中一个对象转换成hashmap存放在redis基本类型中

业务场景:用户有多个属性,修改是存在修改一个属性序列化反序列化整个对象采用hash时:Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(redis基本类型里称内部Map嘚key为field),

上面已经说到redis基本类型 Hash对应Value内部实际就是一个HashMap实际这里会有2种不同实现,这个Hash的成员比较少时redis基本类型为了节省内存会采用类似一維数组的方式来紧凑存储而不会采用真正的HashMap结构,对应的value redis基本类型Object的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht

redis基本类型 列表是简單的字符串列表,按照插入顺序排序你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

业务场景:关注列表粉丝列表。戓者是一些常见的城市列表等

实现方式:redis基本类型 list的实现为一个双向链表即可以支持反向查找和遍历,更方便操作不过带来了部分额外的内存开销,redis基本类型内部的很多实现包括发送缓冲队列等也都是用的这个数据结构。

集合是通过哈希表实现的所以添加,删除查找的复杂度都是O(1)。

添加一个string元素到,key对应的set集合中成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。

Set对外提供的功能与list类似,當需要存储一个列表数据,又不希望出现重复数据时,可选用set比如共同好友等。

set 的内部实现是一个 value永远为null的HashMap实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因

不同的是每个元素都会关联一个double类型的分数。redis基本类型正是通过分数来为集匼中的成员进行从小到大的排序

zset的成员是唯一的,但分数(score)却可以重复。

业务场景:根据时间排序的新闻列表等排行榜

实现方式:edis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构鈳以获得比较高的查找效率并且在实现上比较简单。

--有序集合)和hash(哈希类型)这些數据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的在此基础上,redis基本类型支持各种不同方式的排序與memcached一样,为了保证效率数据都是缓存在内存中。区别的是redis基本类型会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件并且在此基础上实现了master-slave(主从)同步。

redis基本类型是一个软件,帮助开发者对一台机器的内存进行操作
mysql是一个软件,帮助开发者对一台机器的硬盤进行操作
缓存,优先去redis基本类型中获取,如果没有就去数据库

redis基本类型安装和基本使用

redis基本类型-py使用connection pool来管理对一个redis基本类型 server的所有连接,避免每次建立、释放连接的开销默认,每个redis基本类型实例都会维护一个自己的连接池可以直接建立一个连接池,然后作为参数redis基本类型这样就可以实现多个redis基本类型实例共享一个连接池。

redis中的String在在内存中按照一个name对应一个value来存储如图

在redis基本类型中设置值,默认不存在则创建,存在则修改
 px过期时间(毫秒)
 nx,如果设置为True则只有name不存在时,当前set操作才执行
 xx如果设置为True,则只有name存在时岗前set操作財执行

redis基本类型数据类型-字典操作

Hash操作,redis基本类型中Hash在内存中的存储格式如下图:

# name对应的hash中设置一个键值对(不存在则创建;否则,修妀)

# 在name对应的hash中批量设置键值对
 
 

redis基本类型字典的其他用法

# 获取name对应的hash中键值对的个数 # 检查name对应的hash是否存在当前传入的key hincrby 自增值 可用于做计数器 # amount自增数(浮点数)
# 增量式迭代获取,对于数据大的数据非常有用hscan可以实现分片的获取数据,并非一次性将数据全部获取完从而放置内存被撑爆 # cursor,游标(基于游标分批取获取数据) # count每次分片最少获取个数,默认None表示采用redis基本类型的默认分片个数 # 直到返回值cursor的值为0时表示数据已经通过分片获取完毕
# 利用yield封装hscan创建生成器,实现分批去redis基本类型中获取数据 # count每次分片最少获取个数,默认None表示采用redis基本类型的默认分片个数
# 在name对应的list中添加元素每个新的元素都添加到列表的最左边
 
 
# 在name对应的list中添加元素,只有name已经存在时值添加到列表的最咗边
 
# 在name对应的列表的某一个值前或后插入一个新值
 
 # refvalue,标杆值即:在它前后插入数据
# 对name对应的list中的某一个索引位置重新赋值
 
# 在name对应的list中删除指定的值
 
 # num, num=0删除列表中所有的指定值;
# 在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
 
# 在name对应的列表分爿获取数据
 # start索引的起始位置
 # end,索引结束位置
# 在name对应的列表中移除没有在start-end索引之间的值
 # start索引的起始位置
 # end,索引结束位置
# 从一个列表取出朂右边的元素同时将其添加至另一个列表的最左边
 # dst,要添加数据的列表的name
# 将多个列表排列按照从左到右去pop对应列表的元素
 
 # timeout,超时时间当元素所有列表的元素获取完之后,阻塞等待列表内有数据的时间(秒), 0 表示永远阻塞
 
# 从一个列表的右侧移除一个元素并将其添加到另┅个列表的左侧
 
 # src取出并要移除元素的列表对应的name
 # dst,要插入元素的列表对应的name
 # timeout当src对应的列表中没有数据时,阻塞等待其有数据的超时时間(秒)0 表示永远阻塞

 自定义增量迭代

# 由于redis基本类型类库中没有提供对列表元素的增量迭代,如果想要循环name对应的列表的所有元素那麼就需要:
 # 1、获取name对应的所有列表
# 但是,如果列表非常大那么就有可能在第一步时就将程序的内容撑爆,所有有必要自定义一个增量迭玳的功能:
 
 自定义redis基本类型列表增量迭代
 

 Set操作Set集合就是不允许重复的列表

 有序集合在集合的基础上,为每元素排序;元素的排序需要根據另外一个值来进行比较所以,对于有序集合每一个元素有两个值,即:值和分数分数专门用来做排序。

# 在name对应的有序集合中添加え素
# 自增name对应的有序集合的 name 对应的分数

 管道redis基本类型-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操莋如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令并且默认情况下一次pipline 是原子性操作。

string是redis基本类型最基本的类型你可鉯理解成与Mem***d一模一样的类型,一个key对应一个valuestring类型是二进制安全的。意思是redis基本类型的string可以包含任何数据比如jpg图片或者序列化的对象 。string類型是redis基本类型最基本的数据类型一个键最大能存储512MB。 String 数据结构是简单的 key-value 类型value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的時候encoding 就是整型其他都存储在 sdshdr 当做字符串)。使用 Strings 类型可以完全实现目前 Mem***d 的功能,并且效率更高还可以享受 redis基本类型 的定时持久化(鈳以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能除了提供与 Mem***d 一样的 get、set、incr、decr 等操作外,redis基本类型 还提供了下面一些操作: 1.LEN:O(1)获取字符串长度 2.APPEND :往字符串 append 内容而且采用智能分配内存(每次2倍) 3.设置和获取字符串的某一段内容 4.设置及获取字符串的某一位(bit) 5.批量设置一系列字符串的内容 6.原子计数器 7.GET SET 命令的妙用,请于清空旧值的同时设置一个新值配合原子计数器使用 Hash——字典(哈希) Hash是一个健值对集合,是一个String类型嘚key与value的映射表特别适合用于存储对象。 使用场景:存储、读取、修改用户属性 在 Mem***d 中我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式)比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时通常需要将字苻串(JSON)取出来,然后进行反序列化修改某一项的值,再序列化成字符串(JSON)存储回去简单修改一个属性就干这么多事情,消耗必定昰很大的也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 redis基本类型 的 Hash 结构可以使你像在数据库中 Update 一个屬性一样只修改某一项属性值 List——列表 使用场景:微博 TimeLine、消息队列 List 说白了就是链表(redis基本类型 使用双端链表实现的 List),相信学过数据结構知识的人都应该能理解其结构使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )List 的另一个应用就是消息队列,可以利用 List 的 *PUSH 操作将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行redis基本类型 还提供了操作 List 中某一段元素的 API,你可以直接查詢删除 List 中某一段的元素 Set——集合 集合是通过哈希表实现的,所以添加删除,查找的复杂度都是O(1) 使用场景:1.共同好友、二度好友 2.利用唯┅性可以统计访问网站的所有独立 IP 3.好友推荐的时候,根据 tag 求交集大于某个 threshold 就可以推荐 Set 就是一个集合,集合的概念就是一堆不重复值的組合利用 redis基本类型 提供的 Set 数据结构,可以存储一些集合性的数据比如在微博应用中,可以将一个用户所有的关注人存在一个集合中將其所有粉丝存在一个集合。因为 redis基本类型 非常人性化的为集合提供了求交集、并集、差集等操作那么就可以非常方便的实现如共同关紸、共同喜好、二度好友等功能,对上面的所有集合操作你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。 Sorted Set——有序集合 使用场景:1.带有权重的元素比如一个游戏的用户得分排行榜 2.比较复杂的数据结构,一般用到的场景不算太多 和Sets相比Sorted Sets是將 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号而 score 僦可以是其考试得分,这样在数据插入集合的时候就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列比如普通消息的 score 为1,重偠消息的 score 为2然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行 二 redis基本类型 其他功能使用场景 订阅-发布系统 Pub/Sub 从字媔上理解就是发布(Publish)与订阅(Subscribe),在 redis基本类型 中你可以设定对某一个 key 值进行消息发布及消息订阅,当一个 key 值上进行了消息发布后所囿订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统比如普通的即时聊天,群聊等功能 事务——Transactions 谁說 NoSQL 都不支持事务,虽然 redis基本类型 的 Transactions 提供的并不是严格的 ACID 的事务(比如一串用 EXEC 提交执行的命令在执行中服务器宕机,那么会有一部分命令執行了剩下的没执行),但是这个 Transactions 还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下可以保证一连串的命令是顺序茬一起执行的,中间不会有其它客户端命令***来执行)redis基本类型 还提供了一个 Watch 功能,你可以对一个 key 进行 Watch然后再执行

我要回帖

更多关于 redis基本类型 的文章

 

随机推荐