`
TemplarAssassin
  • 浏览: 7167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

redis支持的数据类型详解以及用途

阅读更多

 

                                        redis 支持的数据类型详解以及用途

 

         redis 支持多种数据类型,常见的有  String ,List  Set , Sorted set ,Hash等。下面就以上几种类型的特点和用途进行说明 。

 

String 类型.

   

    string 类型是二进制安全存储的,通常用以保存 图片,css文件等静态文件。

    string类型的内存结构:

    struct sdshdr{

           long len;

           long free;

           char buf[];

    };

    buf数组:字符串的尸体,保存字符串的内容  len:记录buf的长度,free:记录buf还有多少空间可用。

 

     string类型redis中常用的命令:

          set key value   设置key 和value

          get key    获取key的值

          mset key1 value1 key2 value2  设置多个key 和value

          mget key1 key2     获取多个key 的值

          incr key     对key对应的值自增1

          decr key    对key对应的值自减1

 

     用途除了储存静态文件外,根据incr 的自增特性,可以做统计用。如:统计网站的访问次数

 

List 类型:

     list 数据类型是指 key对应的 value 是一个双向链表结构,所以list类型支持所有链表的操作。

 

     常用的命令:

          lpush key string  给list头部添加一元素

          rpush key string  给list尾部添加一个元素

          lpop key    返回获取头部的元素   并移除这个元素

          rpop key     返回获取尾部的元素 并移除这个元素

 

     List 的用途:

          大致常用的有,如:微博的“我关注的列表””就可以用list去存储,userName为key  关注的东西为value,当然,论坛中的回帖也是可以这样处理的。这样的用法是比较常见的。

list也可以做消息队列,从而减轻数据库压力,充分用到了 rpush 和lpop 。尾部插入,头部获取并移除。构建消息队列。

 

Set类型:

        set数据类型是一种无序的集合,正好和list形成了鲜明的对比。在redis内部,Set是通过HashTable实现的。所以查找元素的时间复杂度是O(1). Set 的优势在于,快速的查找元素是否存在,用于记录一些不能重复的数据。

 

     Set 常用命令:

          sadd key value  添加一个string元素到key对应的set集合

          sismember key value  判断value 是否存在key对应的set集合内,存在返回1  不存在返回0  

          smembers key   返回key对应的set集合的所有元素,结果是无序的。

 

     Set的用途:

          set类型通常是用于记录做过某些事情,或者判断是否存在。如: 可以将注册的用户名放到set中,在注册是就可以通过redis set 快速的判断用户名是否存在了。再如: 投票统计,假如每天每个用户只能参加一次某个活动的投票,那么我们就可以通过set 的命令 sismember 判断是否投过票,当然通过得到的结果集合,就可以看到用户的投票情况  set  smembers。

 

Sorted Set 类型

          

          sorted set类型和set类型很相似。都是strng类型元素的集合。不同的是 sorted set 属于有序集合。

sorted set 通过一个double类型的证书 score 进行排序的。 sorted set中,通过SkipList(跳跃表) 和 HashTable组合完成的。SkipList负责排序,HashTable负责保存数据。保证了时间复杂度的 O(1)

 

     Sorted Set常用的命令

           zadd key score value   添加元素value 到集合,元素在集合中存在的则更新对应的score

           zincrby  key incr value    增加对应value元素的score值

           zrange key start end       从集合中指定 start  end 返回score 的顺序排序列表

           zrevrange key star end    从集合中指定 start  end 返回score 的逆序排序列表。

           zcard key                         返回集合中元素的个数

 

     Sorted Set 用途:

           Sorted set 可以做set 能做的,也可以做set 不能做的,比如说: 构建一个具有优先级的消息队列。

再比如: 排行榜应用中,按“顶帖“次数排序, 可以将排序的值设置成sorted set中的 score 。将具体的数据设置成相应的value 。 用户每次点击”顶贴“按钮时。只需要zadd命令修改score的值。

 

Hash类型。

      hash类型时一个key 对应一个hashTable 。添加,查找,修改,删除操作的时间复杂度都是O(1). 

hash 类型适合应用于存储对象,新建一个hash对象的时候,为了节省内存,redis 使用zipmap 进行存储数据,这个zipmap并不是真正的hashtable ,添加,删除等操作的时间复杂度都是O(n),但是相比于一般的hashtable ,zipmap节省了不少内存。

 

     hash 类型常用的命令:

          hset key field value  设置key对应的hashtable 中对象field 的值     

 

          hget key field             获取 key对应的hashtable 中 field的关联的值

          hexists key field         判断field域 是否存在

          hgetall key                   获取key对应的整个hashtable 的所有域和关联的值

 

     Hash类型的用途:

              比如:存储用户信息对象,用户id 作为key   field 域 都有 name age sex 等名称,每个field对应的value --name的数据,age的数据,sex数据;

 

          如果field 或者value的大小超过一定的限制,那么redis在内部自动将zipmap转化为正常的hashTable ,配置文件中,hash-max-zipmap-entries 和  hash-max-zipmap-value 这两个设置 对应的限制。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics