redis_数据类型

Redis数据类型

数据类型可以存储的值操作具体操作应用场景
String字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作对整数和浮点数执行自增或者自减操作
INCR 自增 DECR 自减
计数器
List列表从两端压入或者弹出元素对单个或者多个元素,进行修剪
LPUSH(RPUSH) key value1[value2]

只保留一个范围内的元素
LRANGE key start stop
对大数据的删减

任务队列
Set无序集合添加、获取、移除单个元素检查一个元素是否存在于集合中;SISMEMBER key member

计算交集(SINTER)、并集(SUNION)
差集(SDIFF);SDIFF key1[key2]

从集合里面随机获取元素
SRANDMEMBER key [count]
共同关注、共同喜好、二度好友
Hash包含键值对的无序散列表添加、获取、移除单个键值对获取所有键值对
HGETALL key
检查某个键是否存在
HEXISTS key field
存储对象(数据库表
Zset有序集合添加、获取、删除元素根据分值范围或者成员来获取元素
ZRANGE key start stop[WITHSCORES] ;计算一个键的排名
排行榜

1.1Redis的键Key

> DEL key            删除键
> EXISTS key         判断key是否存在
> DUMP key           序列化key
> EXPIRE key seconds 给key设置过期时间
> TTL key            key的生存剩余时间(秒为单位)
> PTTL key           key的生存剩余时间(毫秒单位)
> PERSIST key        移除key的过期时间,将持久保留
> KEYS pattern       查找所有符合给定模式的key(* 所有 ?一个字符)
> RANDOM key         从当前数据库随机返回一个key
> RENAME key newkey  修改key名称
> MOVE key db        当前数据库移动到给定数据库中
key的应用场景

(1)限时的活动信息

(2)网站的数据缓存(对于一些要定时更新的数据如积分排行榜)

(3)手机验证码

(4)限制网站的访问频率

1.2 Redis的值value

1.2.1 String类型

> SET key_name value       设置给定key的值(key存在则覆盖,不存在则新建)
> SETNX key_name value     设置给定key的值(key不存在时)
> GET key_name             取值
> GETRANGE key start end   字符串截取
> GETBIT key offset        对key所存储的字符串值,获取指定偏移量上的位
> MGET key1 [key2..]       获取一个或多个key的值
> GETSET key_name value    设置key值,并返回key的旧值
> STRLEN key               获取长度
> DEL key_name             删除
> INCR key_name            自增
> DECR key_name            自减 
> APPEND key_name value    字符串拼接
string应用场景
  • 1.String通常用于保存单个字符串或JSON字符串数据

  • 2.因string是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储

  • 3.计数器(常规key-value缓存应用。(常规计数:微博数,粉丝数)

    • INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR.INCRBY.DECR,DECRBY等指令来实现原子计数的效果。不少网站都利用redis的这个特性来实现业务上的统计计数需求

1.2.2 List类型

> LPUSH key value1[value2]  将一个或多个值插入列表头部
> RPUSH key value1[value2]  将一个或多个值插入列表尾部
> LPUSHX key value          将一个或多个值插入列表头部,列表不存在则操作无效             
> RPUSHX key value          将一个或多个值插入列表尾部,列表不存在则操作无效
> LLEN key                  获取列表长度
> LINDEX key index          通过索引获取列表元素
> LRANGE key start stop     获取列表指定范围内的元素
> LPOP key                  左移除
> RPOP key                  右移除
> BLPOP key1[key2] timeout  移除并获取列表的第一个元素,没有元素就会阻塞队列    
                            直到等待超时或发现可弹出元素
list应用场景

1、对数据量大的集合数据删减

  • 列表数据显示关注列表、粉丝列表、留言评价、分页、热点新闻(Top5)等 利用LRANGE还可以很方便的实现分页的功能。

2、任务队列

  • (list通常用来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDERBY来进行排序)

任务队列介绍(生产者和消费者模式):

在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些,通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能能完成的操作,这种将工作交给任务处理器来执行的做法被称为任务队列(task queue)。

3、 RPOPLPUSH source destination

  • 移除列表的最后一个元素,并将该元素添加到另一个列表并返回示例描述:

  • 常用案例:订单系统的下单流程、用户系统登录注册短信等

1.2.3 Hash类型

> HSET key field value                 为指定的key,设定field/value
> HMSET key field value[field1,value]  同时将多个field-value 设到key中
> HGET key field                       根据field等待value 
> HMGET key field[field1]              获取key所有给定字段的值
> HGETALL key                          返回hash表所有字段和值
> HKEYS key                            获取哈希表中的字段
> HLEN key                             获取哈希表中字段的数量
> HDEL key field[field2]               删除一个或多个hash表字段
> HSETNX key field value               只有在字段不存在时,设置字段值
> HINCRBY key field increment          key中指定字段的整数值加增量
> HINCRBYFLOAT key field increment     指定字段的浮点数加增量
> HEXISTS key field                    指定字段是否存在
hash应用场景

1、 常用于存储一个对象

2、 **为什么不用string存储一个对象? **

  • hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。

  • 用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:

    • (1)用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时, 需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。`

    • (2)这个用户信息对象有多少成员就存成多少个key-value对,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是不可观的。`

总结:

Redis提供的Hash很好的解决了这个问题,Redis 的Hash实际是内部存储的Value为一个Hashmap,并提供了直接存取这个Map成员的接口

1.2.4 Set类型

赋值语句
> SADD key member1[member2]           添加一个或多个成员
取值语句
> SCARD key                           获取成员数
> SMEMBERS key                        返回集合中的所有成员
> SISMEMBER key member                判断是否存在
> SRANDMEMBER key [count]             返回集合中一个或多个随机数
删除语句
> SREM key member                     移除一个或多个
> SPOP key[count]                     移除并返回集合中的一个随机元素
> SMOVE source destination member     将member从source移到destination
差集语句
> SDIFF key1[key2]                    返回给定集合的差集(左侧)
> SDIFFSTORE destination key1[key2]   返回差集并存到destina.
交集语句
> SINTER key1 [key2]                  返回给定集合的交集
> SINTERSTORE destination key1[key2]  返回交集并存到destination
并集
> SUNION key1[key2]                    返回并集
> SUNIONSTORE destination key1[key2]  返回并集并存储在destination
set应用场景

常应用于:对两个集合间的数据[计算]进行交集、并集、差集运算

  • 1、以非常方便的实现如共同关注、共同喜好、二度好友等功能。对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存储到一个新的集合中。

  • 2、利用唯一性,可以统计访问网站的所有独立IP

1.2.5 Zset类型

赋值语句
> ZADD key score1 member1[score member2]  添加一个或多个成员
取值语句
> ZCARD key                               获取成员数
> ZCOUNT key min max                      计算集合中指定区间分数的成员数
> ZRANK key member                        返回有序集合中指定成员索引
> ZRANGE key start stop[WITHSCORES]       返回指定区间内成员[低到高]
> ZREVRANGE key start stop[WITHSCORES]    返回指定区间内成员[高到低]
删除语句
> ZREM key member[member...]              移除有序集合中的一个或多个成员
Zset应用场景

常应用于:排行榜

  • 1)比如twitter的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

  • 2)比如一个存储全班同学成绩的Sorted Set, 其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。

  • 3)还可以用Sorted Set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值