redis使用

目录

简介

Redis 概述

Redis 相关参考网址如下所示:

Redis安装和登陆

Redis数据存储操作

常用数据类型

String类型操作

Hash类型应用实践

小节

List类型应用实践

小节

Set类型应用实践


简介

  • 我们现在的项目架构中,基本上是Web服务器(Tomcat)和数据库独立部署,独占服务器资源,随着用户数的增长,并发读写数据库,会加大数据库访问压力,导致性能的下降,严重时直接导致系统宕机,此时,我们可以在Tomcat同服务器上中增加本地缓存,并在外部增加分布式缓存,缓存热门数据。也就是通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。基于这样的一种架构设计,于是类似redis的一些分布式数据库就诞生了。

Redis 概述

  • Redis是一个key-value存储系统(官网:http://redis.io),是一个分布式缓存数据库。在DB-Engines.com的数据库排行中, Redis上升排行第七,如图所示:
  • 版本及参考说明
  • Redis的次版本号(第一个小数点后的数字)为偶数的版本是稳定版本(2.4、2.6等),奇数为非稳定版本(2.5、2.7),一般推荐在生产环境使用稳定版本。最新版本6.2.2,新增了stream的处理方式,性能更高。Redis官方是不支持windows平台的,windows版本是由微软自己建立的分支,基于官方的Redis源码上进行编译、发布、维护的,所以windows平台的Redis版本要略低于官方版本。

Redis 相关参考网址如下所示:

  1. Bootnb 相关:https://www.runoob.com/redis/redis-tutorial.html
  2. Redis 官网:https://redis.io/
  3. 源码地址:https://github.com/redis/redis
  4. Redis 在线测试:http://try.redis.io/
  5. Redis 命令参考:http://doc.redisfans.com/

Redis安装和登陆

Redis数据存储操作

  1. 基于redis执行操作
  2.  keys *基于查看redis中的所有key
  3.  set test1 123基于key/value形式存储数据
  4. get test1基于key获取redis中存储的数据
  5. del test1  #test1为key的名字删除指定key对应的数据
  6.  flushdb清除当前数据库数据
  7. flushall清除所有数据库数据
  8. EXPIRE key seconds    #Expire (设置生效时长-单位秒)Key有效时间设计
  9.  expire bomb 10
  10. ttl bomb 查看剩余有效时间当返回值为-2时,表示键被删除。 当 key 存在但没有设置剩余生存时间时,返回 -1 。
  11. 语法:PERSIST key 通过persist让对特定key设置的生效时长失效。其中,设置新的数据时需要重新设置该key的生存时间,重新设置值也会清除生存时间。
  12. 语法:PEXPIRE key milliseconds    pexpire (单位毫秒)pexpire 让key的生效时长以毫秒作为计量单位,这样可以做到更精确的时间控制。例如,可应用于秒杀场景。

常用数据类型

  • Reids中基础数据结构包含字符串、散列,列表,集合,有序集合。工作中具体使用哪种类型要结合具体场景。

String类型操作

  • 最大字符串长度支持到512M。基于此类型,可以实现博客的字数统计,将日志不断追加到指定key,实现一个分布式自增iid,实现一个博客的的点赞操作等
  1. incr  key 当字符串是整数时,键值递增,如果num不存在,则自动会创建,如果存在自动+1。
  2. incrby key increment指定增长系数
  3. decr key 按照默认步长(默认为1)进行递减
  4. decrby key decrement 按照指定步长进行递减
  5. append key value向尾部追加值。如果键不存在则创建该键,
  6. strlen key 长度,返回数据的长度,如果键不存在则返回0。如果键值为空串,返回也是0。
  7. mset/mget 同时设置/获取多个键值

Hash类型应用实践

  • Redis散列类型相当于Java中的HashMap,实现原理跟HashMap一致,一般用于存储对象信息,存储了字段(field)和字段值的映射,一个散列类型可以包含最多232-1个字段。
  1. hset key field value    存入数据大key,小k,数据,
  2. hest执行插入操作时返回1,当执行更新操作时返回0。
  3. hget key field  获取数据
  4. hmset key field value [field value…]  存入多个数据
  5. hmget key field [field]   取出多个数据
  6. hgetall key   取出key对相应的所有数据
  7. hexists 属性是否存在
  8. hdel 删除属性
  9. hkeys/hvals只获取字段名HKEYS或字段值HVALS
  10.  hlen元素个数

小节

  • 发布一篇博客需要写内存吗?(需要,hmset)
  • 浏览博客内容会怎么做?(hmget)
  • 如何判定一篇博客是否存在?(hexists)
  • 删除一篇博客如何实现?(hdel)
  • 分布式系统中你登录成功以后是如何存储用户信息的?(hmset)

List类型应用实践

  • Redis的list类型相当于java中的LinkedList,其原理就就是一个双向链表。支持正向、反向查找和遍历等操作,插入删除速度比较快。经常用于实现热销榜,最新评论等的设计。
  1. lpush在key对应list的头部添加字符串元素
  2. Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
  3. rpush在key对应list的尾部添加字符串元素
  4. del清空集合元素
  5. linsert在key对应list的特定位置之前或之后添加字符串元素
  6. lset设置list中指定下标的元素值(一般用于修改操作)
  7. lrem从key对应list中删除count个和value相同的元素,count>0时,按从头到尾的顺序删除
  8. count<0时,按从尾到头的顺序删除,count=0时,删除全部
  9. ltrim保留指定key 的值范围内的数据
  10. lpop从list的头部删除元素,并返回删除元素
  11. rpop从list的尾部删除元素,并返回删除元素:
  12. llen返回key对应list的长度:
  13. lindex返回名称为key的list中index位置的元素:
  14. rpoplpush从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil:

小节

  • 如何基于redis实现一个队列结构?(lpush/rpop)
  • 如何基于redis实现一个栈结构?(lpush/lpop)
  • 如何基于redis实现一个阻塞式队列?(lpush/brpop)
  • 如何实现秒杀活动的公平性?(先进先出-FIFO)
  • 通过list结构实现一个消息队列(顺序)吗?(可以,FIFO->lpush,rpop)
  • 用户注册时的邮件发送功能如何提高其效率?(邮件发送是要调用三方服务,底层通过队列优化其效率,队列一般是list结构)
  • 如何动态更新商品的销量列表?(卖的好的排名靠前一些,linsert)
  • 商家的粉丝列表使用什么结构实现呢?(list结构)

Set类型应用实践

  • Redis的Set类似Java中的HashSet,是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  1. sadd添加元素,重复元素添加失败,返回0
  2. smembers获取集合中成
  3. spop移除并返回集合中的一个随机元素
  4. scard获取集合中的成员个数
  5. smove移动一个元素到另外一个集合
  6. sunion实现集合的并集操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值