zoukankan      html  css  js  c++  java
  • redis(2)

    redis的五大数据类型:

    string
     hash
     list
     set
     sorted_set

    string

    特点:
     存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
     存储数据的格式:一个存储空间保存一个数据
     存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
    
    基础使用:

    127.0.0.1:6379> set univercity ccu
    OK
    127.0.0.1:6379> get univercity
    "ccu"

    127.0.0.1:6379> del univercity

    高级使用:

    【一次性创建多个键值,获取多个键值。值的长度。值的追加】

    127.0.0.1:6379> mset desk red pan white
    127.0.0.1:6379> mget desk pan
    127.0.0.1:6379> strlen desk
    (integer) 3
    127.0.0.1:6379> append desk -desk
    (integer) 8
    127.0.0.1:6379> get desk
    "red-desk"
    127.0.0.1:6379>

    扩展:

    127.0.0.1:6379> incr desk-height【默认初始为1】
    (integer) 1
    127.0.0.1:6379> get desk-height
    "1"
    127.0.0.1:6379> incrby desk-height 30
    (integer) 31
    127.0.0.1:6379> incrbyfloat desk-height 2.1
    "33.100000000000001"
    没有递减的浮点数
    127.0.0.1:6379> decr desk-weight
    (integer) -1

    127.0.0.1:6379> decr desk-weight 20

    定制数据的有效时间

    127.0.0.1:6379> setex death-time 59 death
    OK
    127.0.0.1:6379> ttl death-time
    (integer) 30
    127.0.0.1:6379> get death-time
    "death"
    127.0.0.1:6379> psetex li 50000 time
    OK
    127.0.0.1:6379> get li
    "time"
    127.0.0.1:6379> ttl li
    (integer) 40

     hash

     新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
     需要的存储结构:一个存储空间保存多个键值对数据
     hash类型:底层使用哈希表结构实现数据存储

      hash存储结构优化
         如果field数量较少,存储结构优化为类数组结构
         如果field数量较多,存储结构使用HashMap结构

    应用

    基础:设置,获取,删除
    127.0.0.1:6379> hset man field short-hair
    (integer) 1
    127.0.0.1:6379> hset man field2 blue-eye
    (integer) 1
    127.0.0.1:6379> hgetall man
    1) "field"
    2) "short-hair"
    3) "field2"
    4) "blue-eye"
    127.0.0.1:6379> hdel man field2
    (integer) 1
    127.0.0.1:6379> hgetall man
    1) "field"
    2) "short-hair"
    127.0.0.1:6379> 
    批量使用:

      hexists key field【存在】
      hmset key field1 value1 field2 value2 【设置】
      hmget key field1 field2【获取】
      hlen key【总长度】

    hash 类型应用场景

    电商网站购物车设计与实现
      增加:hincrby            设置:hset
      商品id:field             用户id:key
      删除:hdel              总量:hlen
      全选:hgetall             数量:value
      总量:hlen              数量:value
      商品id:field             取值:hget
      
    业务分析
     仅分析购物车的redis存储模型
      添加、浏览、更改数量、删除、清空
     购物车于数据库间持久化同步
     购物车于订单间关系
      提交购物车:读取数据生成订单
      商家临时价格调整:隶属于订单级别
     未登录用户购物车信息存储
      cookie存储

    list

     数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
     需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
     list类型:保存多个数据,底层使用双向链表存储结构实现

    基本使用:

    127.0.0.1:6379> lpush tup 1 2 3
    (integer) 3
    127.0.0.1:6379> rpush tup 4 5
    (integer) 5
    127.0.0.1:6379> lrange tup 1 3
    1) "2"
    2) "1"
    3) "4"
    127.0.0.1:6379> lrange tup 0 4
    1) "3"
    2) "2"
    3) "1"
    4) "4"
    5) "5"

    当然还有获取索引位置和长度获取

    扩展:

    规定时间内获取并移除数据
    blpop key1 [key2] timeout
    brpop key1 [key2] timeout
    brpoplpush source destination timeout

     

    set

     新的存储需求:存储大量的数据,在查询方面提供更高的效率
     需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
     set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

    基本使用:

    127.0.0.1:6379> sadd num [2 2 4]
    (integer) 3
    127.0.0.1:6379> smembers num【可以看出来,存储的数据类型不单一,但是以空格作为界定是很明显的】
    1) "4]"
    2) "[2"
    3) "2"
    127.0.0.1:6379> srem num 4
    (integer) 0
    127.0.0.1:6379> srem num 2
    (integer) 1
    127.0.0.1:6379> smembers num
    1) "4]"
    2) "[2"

    127.0.0.1:6379> sadd num 1 2 4
    (integer) 3
    127.0.0.1:6379> smembers num
    1) "2"
    2) "1"
    3) "4]"
    4) "[2"
    5) "4"
    127.0.0.1:6379> scard num
    (integer) 5
    127.0.0.1:6379> sismember num 1
    (integer) 1
    127.0.0.1:6379>

    交并差集的实现:

    sinter key1 [key2]
    sunion key1 [key2]
    sdiff key1 [key2]

    
    

    set 类型应用场景
    公司对旗下新的网站做推广,统计网站的PV(访问量),UV(独立访客),IP(独立IP)。
    PV:网站被访问次数,可通过刷新页面提高访问量
    UV:网站被不同用户访问的次数,可通过cookie统计访问量,相同用户切换IP地址,UV不变
    IP:网站被不同IP地址访问的总次数,可通过IP地址统计访问量,相同IP不同用户访问,IP不变

     

    sorted_set

     新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
     需要的存储结构:新的存储模型,可以保存可排序的数据
     sorted_set类型:在set的存储结构基础上添加可排序字段

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

    redis 127.0.0.1:6379> ZADD runoobkey 1 redis
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
    (integer) 0
    redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
    (integer) 0
    redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
  • 相关阅读:
    postgresql允许远程访问的配置修改
    Oracle常用监控sql语句
    Python Twisted 学习系列22(转载stulife最棒的Twisted入门教程)
    Python Twisted 学习系列21(转载stulife最棒的Twisted入门教程)
    有趣的题目
    入学测试题详解
    完成这个例子,说出java中针对异常的处理机制。
    遍历Map key-value的两种方法
    java中的 FileWriter类 和 FileReader类
    Java中Split函数的用法技巧
  • 原文地址:https://www.cnblogs.com/topass123/p/13063226.html
Copyright © 2011-2022 走看看