step04day15 分布式数据库redis简介

本文详细介绍了Redis的基本概念、数据结构和常用指令,包括字符串、哈希、列表和集合的操作,以及如何利用这些数据类型实现缓存、计数、队列等功能。通过对Redis的深入理解和实践,能有效提升应用程序的性能和响应速度。
摘要由CSDN通过智能技术生成

目录

1.redis简介

2.redis结构介绍

3.redis基本指令

3.1. redis初始操作

3.2 数据存储操作

3.3 Key有效时间设计 

4 redis的数据类型

4.1 string数据类型

小节面试分析

4.2  Hash类型应用实践 

小节面试分析

4.3  List数据类型

面试小结分析

4.4  set 数据类型

小节面试分析

总结(Summary)


1.redis简介

Redis 是一种开源(BSD 许可)、内存中数据结构存储,用作数据库、缓存和消息代理。Redis 提供了诸如字符串、散列、列表、集合、带范围查询的排序集合、位图、超级日志、地理空间索引和流等数据结构。

redis主要的作用在于缓存浏览器经常访问的数据,比如热点数据等,是为了缓解后台数据库访问压力的另一种方式,不同于普通的关系型数据库,reids里储存的数据是非关联的,是以key--value形式进行存储的。

Redis是一个key-value存储系统(官网:http://redis.io),是一个分布式缓存数据库。在DB-Engines.com的数据库排行中, Redis上升排行第七,如图所示:

2.redis结构介绍

redis实际上是以key-value的形式进行存储,即key存储数据地址编号等,value存取对象,数值,数组等元素,具体机构如下图:

在这里插入图片描述

根据redis的数据结构,可以对应进行相应的操作,查询的地址诸如下图。

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

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

实际上,redis的作用在将常用的数据缓存进行存储,以便更为及时和迅速的将数据传递给用户,同时也为后端数据库提供了一个缓冲的地带。

3.redis基本指令

3.1. redis初始操作

启动:

docker start redis   Docker 环境下的启动

docker ps 显示运行的所有进程

ps -ef|grep redis   查看启动的redis进程信息

进入redis:

docker exec -it redis01 redis-cli   进入redis数据库

docker exec -it redis01  bash #redis01 为容器名 

redis-cli /redis-cli -p 6379   登录redis服务 默认不需要密码

退出redis:

exit 退出redis服务

 配置和帮助

info  查看配置信息

help   可以基于hep指令查看相关指令帮助

 其他指令

clear 清除屏幕内容

shutdown  关闭redis服务

3.2 数据存储操作

基于查看redis中的key   keys *

基于key/value形式存储数据   set test1 123

基于key获取redis中存储的数据  get test1

清除redis中的数据  flushdb   #单个

清除所有数据库数据  flushall

3.3 Key有效时间设计 

Expire (设置生效时长-单位秒) 

TTL查看key的剩余时间,当返回值为-2时,表示键被删除。
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。

视图:

Persist (取消时长设置)

pexpire (单位毫秒)

pexpire 让key的生效时长以毫秒作为计量单位,这样可以做到更精确的时间控制。例如,可应用于秒杀场景。

视图:

4 redis的数据类型

4.1 string数据类型

字符串类型是redis中最简单的数据类型,它存储的值可以是字符串,其最大字符串长度支持到512M。基于此类型,可以实现博客的字数统计,将日志不断追加到指定key,实现一个分布式自增id,从而实现一个博客的的点赞操作等。

操作命令小结:

incr / incrby  自增 1 / 自增 n 

 decr/decrby  自减 1 / 自减 n

 append  向尾部追加值。如果键不存在则创建该键,其值为写的value

strlen 字符串长度,返回数据的长度,如果键不存在则返回0

mset/mget  同时设置/获取多个键值

操作视图:

拓展———乱码出现的原因:

utf-8 一个中文汉字3个字节 ;gbk :一个中文汉字2个字节

编码时字符串截取的字节数不正确,因而可能实现乱码。

小节面试分析

  • 博客的字数统计如何实现?(strlen)
  • 如何将审计日志不断追加到指定key?(append)
  • 你如何实现一个分布式自增id?(incr-雪花算法)
  • 如何实现一个博客的的点赞操作?(incr,decr)

4.2  Hash类型应用实践 

Redis散列类型相当于Java中的HashMap,实现原理跟HashMap一致,一般用于存储对象信息,存储了字段(field)和字段值的映射,一个散列类型可以包含最多232-1个字段。

操作命令小结:

1.设置获取对象

hset/hget  设置值 /获取值 

hincrby  自增 

hmset/hmget  设置和获取对象属性

操作视图:

2.查看和删除

hexists  属性是否存在

hdel  删除属性

hkeys/hvals  只获取字段名HKEYS或字段值HVALS

操作视图:

小节面试分析

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

4.3  List数据类型

Redis的list类型相当于java中的LinkedList,其原理就就是一个双向链表。支持正向、反向查找和遍历等操作,插入删除速度比较快。经常用于实现热销榜,最新评论等的设计。

操作命令小结:

1.头尾增加元素:

lpush  在key对应list的头部添加字符串元素

rpush 在key对应list的尾部添加字符串元素

操作视图:

2. 设置修改元素

del  删除集合

linsert  在key对应list的特定位置之前或之后添加字符串元素\

lset  设置list中指定下标的元素值(一般用于修改操作)

操作视图:

3.删除元素

lrem   从key对应list中删除count个和value相同的元素,

count>0时,按从头到尾的顺序删除

count<0时,按从尾到头的顺序删除

count=0时,删除全部

操作视图:

4.保留指定元素;

ltrim 保留指定key 的值范围内的数据

操作视图:

5.头尾部删除元素:

lpop 从list的头部删除元素,并返回删除元素

rpop 从list的尾部删除元素,并返回删除元素

llen :返回key对应list的长度

lindex:返回名称为key的list中index位置的元素

rpoplpush:从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil

面试小结分析

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

4.4  set 数据类型

Redis的Set类似Java中的HashSet,是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

操作命令小结:

sadd  添加元素  重复元素添加失败,返回0

smembers  获取内容

spop  移除并返回集合中的一个随机元素

scard 获取成员个数

smove 移动一个元素到另外一个集合

sunion 并集

小节面试分析

  • 朋友圈的点赞功能你如何实现?(sadd,srem,smembers,scard)
  • 如何实现一个网站投票统计程序?
  • 你知道微博中的关注如何实现吗?

总结(Summary)

本章节主要是对redis进行简单介绍,对于redis常用数据类型存储string ,hash,list,set等基本操作进行了分析和实践,结合指令特性理解其应用场景,

其中string的主要操作包括自增自减,追加字符串,设置值等操作,hash无自减,多了检查属性是否存在(hexits),list数据类型等同于数据操作,而set 类型类似hashset。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值