redis hash 分析

地点:北京}用户:地点:上海,其中用户:1用户:2分别定义了两个用户信息,上海所有的用户id都是通过Redis中的hash数据结构记录的,通过集合数据结构实现 。

1、Redis---八种数据类型(基本命令String , Hash,List,Set和Zset 。相当于java中的,Mapstring是redis中最基本的数据类型,一个键对应一个值 。应用场景:字符串是最常用的数据类型,普通的键/值存储都可以归为这一类,比如用户信息、登录信息、配置信息等 。实现方式:存储在redis中的字符串默认为字符串 , 被redisObject引用 。当它遇到incr、decr等操作时 。(加减等原子操作),会转换成数值型进行计算 。此时redisObject的编码字段为int 。

2、 redis面试之数据结构 redis是面试中被问得最多的中间件,数据结构主要集中在枚举和使用上 。让我们来描述一下数据结构和使用它的主要方法 。大家都知道redis的几种数据结构,包括string、hash (hash)、list、set、zset 。让我们列出一些常见的命令和一些关于这些结构的使用场景 。String是redis最基本的数据类型 。

字符串类型的值可以存储512MB1,普通单值缓存2,对象数据缓存(json格式)3,分布式锁的应用4,计数器的使用,使用INCR和DECR redis hash是字符串类型的字段(field)和值(value)的映射表 。hash最合适的是用redis的对象缓存列表做一个字符串列表,可以选择在头部或者尾部插入值 。

3、Redis中String和Hash哪个结构更加省内存String结构:Redis的字符串结构可以简单的用SDS(简单动态字符串)数据结构实现 。hash Structure在使用ziplist结构的时候,ziplist最大的特点就是它不是一个hashtable结构,而是一个比较长的字符串 , 所有的keyvalue都按顺序存储在一个长字符串中 。如果你想找到一个键,你需要遍历整个长字符串 。

但是,当使用hash的ziplist时,只需要报头的几个标识位,后面是压缩数据 。这也是hash(ziplist)比string更节省内存的原因 。hash数据结构,有两种编码方式 , 1是hash表,2是zipList 。换句话说,zipList比hashTable占用的空间少 , 但是查询会消耗更多的cpu 。

4、 redishaskey和getkey效率Redis的get和hget操作性能普遍较高,可以获得比HashSet等其他数据结构更快的读取性能 。因为Redis加载到内存中,可以提供更快的查询速度,而hashset需要在硬盘中查询,所以效率会更低 。redis中HASKEY指令的效率与GETKEY指令略有不同 。HASKEY指令的执行速度比GETKEY指令快 , 因为HASKEY指令只检查KEY是否存在,而GETKEY指令不仅检查KEY是否存在,还会获取KEY对应的值 。

5、Redis技巧:分片技术和HashTag【redis hash 分析】twitter的Twemproxy是Redis的一个代理服务程序,可以实现关键分段 。分片可以使密钥均匀分布在集群机器上,保证数据的一致性,有很多好处 。但是从Redis单实例切换到twemproxy集群时,还是有一些需要注意的地方:不支持的方法:key , MIGRATE,SCAN等支持的方法需要特殊处理:MSET,

Sunionstore、ZinterStore、ZunionStore等 。请检查Redis命令列表 。对于不受支持的方法,您需要在使用它们时找到替代方法 。本文主要解决需要特殊处理的方法 。单个实例上的MSET是一个原子操作,所有给定的键将同时被设置,并且不可能在一些给定的键被更新的同时另一些保持不变 。

6、 redis中list和 hash的基本命令和使用场景Redis有五种数据类型:string , list , hash,set,zset;字符串String比较正常 , keyvalue类似于hashmap的用法;列表队列,可以双向存储值 , 设计时也可以简单的作为队列模式;哈希字典,一个键对应多个值;设置无序集;Zset有序集;List listRedis list是一个简单的字符串列表,按插入顺序排序 。

像7、 redis里的 hash类型怎么模糊查询value这样的查询在Redis中是不能按值比较的 。但这可以通过不同的数据结构类型来实现 , 比如下面的数据定义:users:1 {姓名:jack,年龄:28,地点:上海} users:2 {姓名:frank , 年龄:30,地点:北京} users:地点:上海,其中users:1users:2分别定义了两个用户信息 , 所有上海的用户id都是通过Redis中的hash数据结构记录的,这是通过集合数据结构实现的 。
8、 redis使用 hash或string序列化存储对象的区别当hash对象能够同时满足以下两个条件时,hash对象使用ziplist编码:hash对象保存的所有键值对的键和值的字符串长度小于64字节;存储在哈希对象中的键值对的数量小于512;不能满足这两个条件的Hash对象需要用hashtable进行编码 。上面的测试数据满足这两个条件 , 所以这里用的是存储在ziplist中的数据,而不是hashtable 。

    推荐阅读