Redis 1- redis基础

一、Redis 数据结构

  1. String :值最大不能超过512MB
    1. Set 设置值:set key value [ex seconds] [ px milliseconds] [nxlxx];ex seconds:秒级过期时间 px millisecondes:毫秒级过期时间 nx:键必须不存在才可添加xx:键必须存在才可设置用于更新 除了set 还提供了setex 和setnx:setex dey seconds value setnx dey value ;setex ,setnx 和ex nx选项一样,setex设置秒级过期时间,sexnx键必须不存在才可成功。
      1. Get获取值
      2. Mset 批量设置值
      3. mget批量获取值
      4. lncr数字运算(用于对值做自增):值不是整数返回错误,是整数,返回自增结果,键不存在,按值为0自增,反回1
      5. decr自减,incrby(自增指定数字)decrby(自减指定数字)incrbyfload(自增浮点数)
      6. Append 追加
      7. Strlen 长度
      8. Getset设置并返回原值
      9. Setrange设置指定位置字符
      10. Getrange截取字符串

命令的时间复杂度

Del,mset,mget,支持多个键批量操作,时间复杂度与键个数有关,getrange和字符串长度有关,其它的基本都是O(1)的时间复杂度,速度很快

使用场景:

缓存:redis作为缓存,mysql作为存储

计数:可以实现快速计数,查询缓存功能,同时数据可以异步到其它数据源

共享session:一个分布式web服务将用户session信息保存到各自服务器,出于负载均衡考虑,分布式服务将用户的访问均衡的不同服务器,用户刷新一次就重新登录,这明显不可以为解决这个问题,redis将用户session进行集中管理,在这种模式下只要保证redis是高可用和扩展性的,每次用户从redis中集中获取

限速:限制每分钟获取验证频率

  1. Hash
    1. Hset 设值 hset user:1 name mark
    2. Hget 取值 hget user:1 name
    3. Hdel:删除
    4. Hlen:计算个数
    5. Hmset 批量设值
    6. Hmget:批量取值
    7. Hexists 判断是否存在
    8. Hkeys 获取所有filed
    9. hvals获取所有vale
    10. hgetall获取所有filed 与value
    11. .....

时间复杂度

,hdel,hmget,hmset 的时间复杂度和命令所带的 field 的个数相关 O(k),hkeys,hgetall,hvals 和存储的 field 的总数相关,O(N)。其余的命 令时间复杂度都是 O(1)

使用场景

哈希类型比较适宜存放对象类型的数据

  1. 列表
    1. Lrange 获取指定范围内的元素列表
    2. Rpush 右向插入  lpush左向插入
    3. Linsert 在某个前或后插入
    4. Lpop 左侧弹出 rpop右侧弹出
    5. Lrem 删除
    6. Ltrirm 按索引范围修剪列表
    7. lset修改指定索引下标元素
    8. Lindex 获取列表指定索引下标元素
    9. llen获取列表长度
    10. Blpop brpop阻塞式弹出元素

时间复杂度

列表类型的操作命令中,llen,lpop,rpop,blpop 和 brpop 命令时间复杂度都是 O(1),其余的命令的时间复杂度都是 O(n),只不过 n 的值根据命令不同而不同, 比如 lset,lindex 时间复杂度和命令后的索引值大小相关,rpush 和 lpush 和插入元 素的个数相关等等。

使用场景

消息队列 文章列表

4 set 集合

  1. Sadd
  2. Srem
  3. Scard
  4. Sismember
  5. Srandmember 随机从集合中返回指定个数元素
  6. Spop
  7. Smembers 获取所有元素无序
  8. Sinter 求多个集合的交集
  9. Suinon 求多个集合并集
  10. Sdiff 求多个集合差集

时间复杂度

scard,sismember 时间复杂度为 O(1),其余的命令时间复杂度为 O(n),其中 sadd,srem 和命令后所带的元素个数相关,spop,srandmember 和命令后所带 count 值相关,交集运算 O(m*k),k 是多个集合中元素最少的个数,m 是键个数, 并集、差集和所有集合的元素个数和相关。

使用场景

标签,抽奖,社交图谱

  1. 有序集合zset

使用场景:排行榜

  • Redis 高级数据结构

Bitmaps 位图

现代计算机用二进制作为信息基础单位,1字节等于8位,eg:”big”字符串3个字节。bitmaps本身不是一种数据结构,实际上就是字符串,但它对字符串的位进行操作。bitmaps想成一个以位为单位的数组,每个单元只存0,1 数组下标在bitmaps中叫偏移量

Set bit 设置值

Get bit 获取

Bitcount 获取指定范围内为1的个数

Bitop bitmaps 间的运算

优势:如网站有1亿用户,每天访问用户5千万,如果每天用集合类型和bitmaps分别存储活跃用户,假如用户id是long 64位,则集合占空间为64位*50 000 000=400M,而bitmap则要1位* 100 000 000 = 12.5Mb节省甚多空间

布隆过滤器

比较巧妙的概率型数据结构,比于传统list,set ,map等它更高效,占空间更少但是概率性的,不准确,应用于黑名单,垃圾邮件过滤,爬虫网址判重等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值