Redis介绍以及如何配置使用。

本文介绍了Redis的背景及使用原因,包括解决单机时代的数据和访问量问题。详细讲解了Redis的特性,如内存持久化、高效缓存、发布订阅系统等。同时,阐述了Redis的单线程模型及其高效率原理。还介绍了Redis的多种数据类型如String、List、Set、Hash和ZSet,并提供了实例操作。最后提到了Redis的事务处理和配置文件详解,以及简单的安全性和持久化策略。
摘要由CSDN通过智能技术生成

1.为什么要使用NoSql

在这里插入图片描述在这里插入图片描述

1.1单机时代

  • 数据放不下了
  • 数据库索引,一个机器存放不下
  • 访问量 一个机器适配不了

1.2 memorycache +mysql+垂直拆分

在这里插入图片描述减轻数据库压力,如果数据不变的话放进缓存中。
因为做一个网站80%情况都是在读,每次操作数据库那么会对数据库造成压力
发展过程:
优化数据库结构和索引-》文件缓存(io)-》memorycache-》

2 Redis(remote dictionary server)概述

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

2.1 redis能干嘛

  • 内存持久化,内存断电即失,持久化很重要
  • 效率高,可以用于告诉缓存。
  • 发布订阅系统。
  • 地图信息分析
  • 计时器计数器。

2.2 特性

多样的数据类型

  • 持久化
  • 集群
  • 事务

2.3 安装

2.3.1 window安装redis

安装地址

https://github.com/MicrosoftArchive/redis/releases;

msi直接安装。
我这里下载zip包

  • 解压运行即可

在这里插入图片描述
但是官网不推荐使用win开发,所以尽量使用linux系统。

2.3.2 linux安装redis

网址 redis中文网 最新版本down下来就可以了

  1. tar -xvf 解压
  2. 安装 gcc 环境
    yum install gcc-c++
  3. make 编译
  4. make install

linux 默认安装路经usr 目录下
进入 、usr/local/bin

复制 之前的redis。conf 到该目录下
修改配置
daemonize yes

启动redis
redis-server redis.conf

2.4 redis基础知识

  1. redis默认有16哥数据库,在redis配置文件中可以看到,默认使用第0个
    使用 select 切换数据库 dbsize 查看大小

  2. redis是单线程的,cpu不是redis的性能瓶颈, redis性能是基于机器的内存和网络带宽决定的。redis是c语言写的官方提供的数据qps 10万+,所以性能不比memorycache差

redis 6.0 后引入了多线程 具体信息可以查看该篇博客

https://www.cnblogs.com/madashu/p/12832766.html

  1. 为什么单线程redis还这么快

在这里插入图片描述

keys * 查看所有key
flushdb 清空当前数据库
flushall 清空所有
exist key值 返回等于该key值得个数
expire key 10 设置10秒过期
ttl key 查看过期剩余时间
type key 查看当前key的类型

2.4.1 String类型

append key value 向key中添加字符串 如果不存在该key 那么就相当于set一个新值
strlen key 获取key 对中的 value 长度
incr key 相当于 +1 操作
decr key -1
incrby key 10 步数为10增长 DECRBY key 10 步数为10 减少
getrange key 0 3 相当于substring 截取字符串 0 -1 取得全部字符串
setrange key 2 sss 相当于replace 从索引2处开始替换
settex key 20 value 创建一个过期时间为20秒的 键值对 如果已存在则覆盖
setnx key value 不存在则添加,已存在则添加失败
getset key value 先获取再赋值
批量设置key与value

mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx 他可以保证原子性

redis存入对象
mset user:1:name 张三 user:2:name lisi

2.4.2 List 类型

与list命令有关的 都是以L开头
lpush key 1 2 3 4 向key 中放入元素 1234 这个是从左边依次放入
lrange key 1 3 从 左边索引为1为起始点获得元素
rpush key 5 从右边开始放入元素
lpop 左边移除
rpop 右边移除
lindex key value 获取索引为value的值
llen key 判断list的长度
LREM k1 1 3 移除掉1个 k1list 中元素为3 的元素
ltrim key 1 3 保留 key list中的 索引 1-3 的元素其他会被删除
RPOPLPUSH k1 k1 取出值 并添加到k1中
lset key value 设置值 不存在的话报错
LINSERT k1 before it new 插入元素 befor确定是从前 after 是从后

这里的list其实是一个链表 前后增删效率会很高,从中间添加或删除效率会很低
所以根据该特性 我们可以实现栈或队列

2.4.3set 类型

sadd key value
127.0.0.1:6379> SISMEMBER k2 new 集合k2是否存在new 这个值
smember key 查看所有元素
scard key 获取元素个数
srem key value 移除元素
SRANDMEMBER key count 随机抽选count个数
spop 随机删除元素
smove k1 k2 new 将k1中元素new 移到k2中
差集sdiff k1 k2
并集SUNION
交集sinter

2.4.4hash

127.0.0.1:6379> hset k4 kui 1 设置 k4 中的 map 中的 kui 为1
(integer) 1
127.0.0.1:6379> HGET k4 kui 得到值
hmset k4 name1 1 name2 2 name3 3批量设置
hmget k4 name1 name2 name3 批量获取
hgetall k4 获取全部
HDEL h4 kui 删除全部
hlen k4 获取键值对个数
HEXISTS k4 name1 判断是否存在
hkeys key 获取全部key
hvalue key 获取全部value
HINCRBY k4 name 5 增加5

hash更适合变更数据的存贮,以及对象的存储

2.4.5 zset 有序集合

因为他是个有序集合 所以key值一定是整数
zadd k6 1 name 向k6 中添加 元素name key值为1
ZRANGE k6 0 -1
ZRANGEBYSCORE k6 -inf +inf withscores 排序正无穷到负无穷 withscores是加上key数据打印
ZREM k6 2 移除元素

2.5 三种特殊数据类型

这里先不做描述 具体看参照官方文档,以后如果有具体实践我会再次编写
在这里插入图片描述

3 事务

在这里插入图片描述
它分为三个阶段
在这里插入图片描述

开启事务
multi
命令入队
执行事务
exec

放弃事务
discard
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
总结
简单的说就是开启事务时如果命令能够压入队列,那么就会执行所有除了运行时的异常命令,如果不能压入队列,就会都不执行

3.1 redis乐观锁

在这里插入图片描述
在这里插入图片描述那么如何解决问题呢 通过unwatch 解锁
再重新加锁 watch money 继续事务 。知道循环成功为止

4 springboot整合redis

导入依赖

5 Redis.config

redis启动都是通过配置文件启动

  1. 单位
    在这里插入图片描述
    配置文件unit 单位,对大小写不敏感

  2. 包含

在这里插入图片描述
可以导入其他的配置文件。和jsp thymeleaf有点像。

  1. 网络

在这里插入图片描述
bind 127.0.0.1
这个是绑定地址,这里默认是绑定本地
我们可以自己添加固定ip允许访问redis
port 6370 端口

  1. 通用
    daemonize yes
    守护进程开启
    关闭的话 无法后台运行
    pidfile /var/run/redis_6379.pid
    如果以后台方式运行需要指定pid文件
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

日志级别

# it will abort. It is possible to use multiple loadmodule directives.
# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile ""

默认日志文件名

在这里插入图片描述
rdbcompression yes 是否压缩rdb文件 压缩会消耗一定的cpu资源
rdbchecksum yes 是否校验 如果失败则会自动修复
dir ./ rdb文件保存目录
5. REPLICATION 主从复制
6. security
设置密码 redis默认没有密码 可以使用命令

config get requirepass 查看是否设置密码

配置文件设置
requirepass 123456 设置密码为123456
在这里插入图片描述
在这里插入图片描述

6 redis持久化

在这里插入图片描述在这里插入图片描述在这里插入图片描述默认保存为 dump.rdb

在这里插入图片描述
在这里插入图片描述

6.1恢复rdb文件

将rdb文件放到启动目录下

6.2优缺点

在这里插入图片描述
再生产环境需要对rdb文件备份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值