01 Redis 入门基本操作

1. 简介

1.1 背景

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

1.2 Redis概述

Redis是一个key-value存储系统(官网:http://redis.io),是一个分布式缓存数据库。在DB-Engines.com的数据库排行中,一直是前十的排名

1.3 版本及参考说明

Redis的次版本号(第一个小数点后的数字)为偶数的版本是稳定版本(2.4、2.6等),奇数为非稳定版本(2.5、2.7),一般推荐在生产环境使用稳定版本。最新版本6.2.2,新增了stream的处理方式,性能更高。Redis官方是不支持windows平台的,windows版本是由微软自己建立的分支,基于官方的Redis源码上进行编译、发布、维护的,所以windows平台的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/

2. Redis初始操作

redis默认有16个数据库使用 select 下标 来选择

2.1 启动Redis服务相关操作指令

Docker 环境下的启动(docker环境启动多个需要运行多个容器):

docker start redis01 #底层也是通过redis-server启动,start单词后的redis01为容器名

docker ps #docker 中查看redis 服务

#查看启动的redis进程信息
ps -ef|grep redis
root      3511     1  0 16:29 ?   00:00:01 redis-server *:6379
root      3515     1  0 16:29 ?   00:00:01 redis-server 127.0.0.1:6380

2.2 进入Redis容器后相关操作

docker exec -it redis01 bash #进入redis容器,  redis01 为容器名

# 登陆redis服务
redis-cli
或者
redis-cli -p 6379
或者
redis-cli -p 6379 -a  password #-a后面为password,此操作需要开启redis.conf文件中的 requirepass选项

# 登陆远程redis
redis-cli  -h ip  -p 6379  -a  password

2.3 Redis数据库内基本操作

# 查看redis信息
#首先登陆redis,然后输入info指令
127.0.0.1:6379> info		# 查看当前redis节点的详细配置信息
127.0.0.1:6379> clear		# 清空redis屏幕
127.0.0.1:6379> exit		# 退出redis服务
127.0.0.1:6379> shutdown 	# 关闭redis服务,保护机制,就等于是自己把电脑关机
127.0.0.1:6379> help		# 系统帮助
127.0.0.1:6379> ?			# 系统帮助,等同于help
127.0.0.1:6379> help type	# 系统帮助,各种参数的类型

2.4 Redis数据存储操作

  1. 查看redis中的key所有的key
127.0.0.1:6379> keys *
(empty list or set)
  1. 基于key/value形式存储数据
127.0.0.1:6379> set test1 123
OK
127.0.0.1:6379> set test2 ab
OK
127.0.0.1:6379> keys *
1) "test1"
2) "test2"
  1. 基于key获取redis中存储的数据
127.0.0.1:6379> get test1
"123"
127.0.0.1:6379> get test2
"ab"
127.0.0.1:6379> get test3
(nil)
127.0.0.1:6379>
  1. 清除redis中的数据
    ps: redis默认有16个数据库使用 select 下标 来选择
127.0.0.1:6379> flushdb  	#清除当前数据库数据
127.0.0.1:6379> flushall 	#清除所有数据库数据

5. Redis中Key有效时间设计

实际工作中我们经常要控制redis中key的有效时长,例如秒杀操作的计时,缓存数据的有效时长等。

设置key的有效时长

Expire (设置生效时长-单位秒)
语法:EXPIRE key seconds(秒数)

127.0.0.1:6379> set key value
127.0.0.1:6379> expire key 10  # 设置此key存在10秒
127.0.0.1:6379> ttl key			# TTL查看key的剩余时间
(integer) 5
127.0.0.1:6379> ttl key
(integer) 3

pexpire (设置生效时长-单位毫秒)
语法:PEXPIRE key milliseconds(毫秒数)

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

127.0.0.1:6379> set key value
127.0.0.1:6379> pexpire key 10  # 设置此key存在10毫秒

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

取消时长设置

通过persist让对特定key设置的生效时长失效。

Persist (取消时长设置)
语法:语法:PERSIST key

127.0.0.1:6379> set key value
127.0.0.1:6379> expire key 60 #设置时长
127.0.0.1:6379> persist key #取消时长设置

其中,设置新的数据时需要重新设置该key的生存时间,重新设置值也会清除生存时间。

简介和基本操作的总结

redis的一些入门操作,主要是一些需要记住的一些指令

3. Redis常用数据类型

3.1 概述

Redis作为一种key/value结构的数据存储系统,为了便于对数据进行进行管理,提供了多种数据类型。然后,基于指定类型存储我们项目中产生的数据,例如用户的登陆信息,购物车信息,商品详情信息等等。

3.2 常用数据类型

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

3.3 String类型操作实践

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

增加key值操作
  1. 当存储的字符串是整数时,redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
    语法:INCR key
127.0.0.1:6379> set key 1
127.0.0.1:6379> incr num  # 此时key的值+1

说明,如果num不存在,则自动会创建,如果存在自动+1。

  1. 指定增长系数
    语法:INCRBY key increment (增长数)
127.0.0.1:6379> incrby key 2 # key增加两位数
减少key值操作

语法:DECR key 按照默认步长(默认为1)进行递减
语法:DECRBY key decrement 按照指定步长进行递减

127.0.0.1:6379> decr key 	# 递减
127.0.0.1:6379> decrby key  # 指定减少多少
向value尾部追加值。

如果键不存在则创建该键,其值为写的value,即相当于SET key value。返回值是追加后字符串的总长度。
语法:APPEND key value

127.0.0.1:6379> append test "abc" 
返回value数据的长度

字符串长度,返回数据的长度,如果键不存在则返回0。注意,如果键值为空串,返回也是0。
语法:STRLEN key

127.0.0.1:6379> get test
"123abc"
127.0.0.1:6379> strlen test
(integer) 6
127.0.0.1:6379> exists key  # 检测指定的key是否存在
(integer) 1
同时设置/获取多个键值

语法:MSET key value [key value …]
语法:MGET key [key …]

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset a 1 b 2 c 3
OK
127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"
小节面试分析
  • 博客的字数统计如何实现?(strlen)
  • 如何将审计日志不断追加到指定key?(append)
  • 如何实现一个分布式自增id?(incr-雪花算法)
  • 如何实现一个博客的的点赞操作?(incr,decr)

3.4 Hash类型应用实践

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

Hash类型语法结构
hset key field value  # 编辑创建
HGET key field
hmset key field value [field value…]
HMGET key field [field]
HGETALL key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值