小工具      在线工具  汉语词典  css  js  c++  java

Redis基础

数据库,redis 额外说明

收录于:104天前

Redis 简介

Redis是一个完全开源、免费的高性能键值数据库。

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。

Redis 支持二进制情况下的字符串、列表、哈希、集合和有序集数据类型操作。

下载地址
https://redis.io/download/

Redis优势

缓存机制优化了性能。系统数据信息过多,但用户信息基本固定。一旦进入,就很少改变。那么每次加载所有用户信息时,都要请求数据库。数据库会编译并执行你的查询语句,这样效率就会提高。会低很多,因为这类信息变化不频繁,而且数据量很大。提前添加到内存中,这样后续的请求就会从缓存中读取,从而可以快速响应请求。

缓冲机制优化了并发性。在大并发的情况下,所有请求都直接访问数据库,数据库会出现连接异常。这时候就需要使用redis进行缓冲操作,让请求可以先访问redis,而不是直接访问数据库。

Redis安装

Ubuntu下安装

sudo apt-get update
sudo apt-get install redis-server

# 查看是否安装成功,配置环境变量
redis-cli

# 启动
redis-server

Redis配置
在这里插入图片描述
Windows下的配置文件时redis.windows.conf,其他系统时redis.conf

redis vli命令是进入redis数据库。和mysql -u root - p进入Mysql数据库类似。

还可以从交互式命令行配置数据库。 Redis CONFIG命令格式如下:

z注意要启动数据库redis-server后再打开命令行模式
在这里插入图片描述
打开另一个终端:
在这里插入图片描述

CONFIG GET CONFIG_SETTING_NAME

在这里插入图片描述
通过CONFIG GET <config_name>获取配置项名称。

在这里插入图片描述

CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

通过CONFIG SET <name> <value>设置配置项。

更改配置文件更方便。

redis.conf配置项说明如下:

  1. 默认情况下,Redis 不作为守护进程运行。您可以修改此配置项并使用 yes 来启用守护进程。
    daemonize no
  1. 当Redis作为守护进程运行时,Redis默认会将pid写入到/var/run/redis.pid文件中,可以通过pidfile指定
    pidfile /var/run/redis.pid
  1. 指定Redis监听端口。默认端口为 6379。
    port 6379
  1. 绑定主机地址
    bind 127.0.0.1
  1. 当客户端空闲多长时间才关闭连接,如果指定为0,则表示关闭该功能
    timeout 300
  1. 指定日志记录级别。 Redis 总共支持四个级别:debug、verbose、notice 和 warning。默认是详细的。
   loglevel verbose
  1. 日志记录模式,默认为标准输出。如果Redis配置为守护进程模式运行,并且日志记录模式配置为标准输出,则日志将发送到/dev/null

    日志文件标准输出

  2. 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
    databases 16

  3. 指定将数据同步到数据文件的时间段和更新操作次数。可以匹配多个条件。

    save <seconds> <changes>
Redis默认配置文件中提供了三个条件:
    save 900 1

    save 300 10

    save 60 10000

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
  1. 指定数据存储到本地数据库时是否压缩。默认为是。 Redis 使用 LZF 压缩。如果你想节省CPU时间,可以关闭这个选项,但它会导致数据库文件变得巨大。
    rdbcompression yes
  1. 指定本地数据库文件名,默认值为dump.rdb

    db文件名转储.rdb

  2. 指定本地数据库存储目录

    dir ./
  1. 设置本机服务slav服务时,设置master服务的IP地址和端口。 Redis启动时会自动从master同步数据。
    slaveof <masterip> <masterport>
  1. 当master服务有密码保护时,slav服务连接master的密码
    masterauth <master-password>
  1. 设置Redis连接密码。如果配置了连接密码,则客户端在连接Redis时需要通过AUTH命令提供密码。默认情况下它是关闭的。
    requirepass foobared
  1. 设置客户端同时连接的最大数量。默认无限制。 Redis可以同时打开的客户端连接数就是Redis进程可以打开的最大文件描述符数。如果 maxclients 设置为 0,则没有限制。当客户端连接数达到限制时,Redis将关闭新连接,并向客户端返回最大客户端数达到错误消息。
    maxclients 128
  1. 指定Redis的最大内存限制。 Redis启动时会将数据加载到内存中。达到最大内存后,Redis 会首先尝试清除过期或过期的键。该方法处理后,仍然达到最大内存设置。写操作将不再可能,但读操作仍然可以进行。 Redis新的vm机制将Key存储在内存中,Value存储在交换区中。
    maxmemory <bytes>
  1. 指定是否在每次更新操作后执行日志记录。 Redis默认将数据异步写入磁盘。如果不启用,断电时可能会丢失一段时间的数据。因为redis自身的同步数据文件是根据上述保存条件进行同步的,所以有些数据只会在内存中存在一段时间。默认为否
    appendonly no
  1. 指定更新日志文件名,默认为appendonly.aof
     appendfilename appendonly.aof
  1. 指定更新日志条件,有3个可选值:
    no:表示等操作系统进行数据缓存同步到磁盘(快)
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
    everysec:表示每秒同步一次(折衷,默认值)

    appendfsync everysec

  1. 指定是否启用虚拟内存机制。默认值为否。简单介绍一下,VM机制以页的形式存储数据。 Redis将访问较少的页面,即冷数据交换到磁盘,访问较多的页面会被磁盘自动换出。进入内存(后面的文章我会仔细分析Redis的VM机制)
     vm-enabled no
  1. 虚拟内存文件路径。默认值为/tmp/redis.swap。它不能被多个 Redis 实例共享。

    虚拟机交换文件 /tmp/redis.swap

  2. 将所有大于 vm-max-memory 的数据存储在虚拟内存中。无论vm-max-memory设置多小,所有索引数据都存储在内存中(Redis的索引数据是keys)。也就是说,当 vm-max-memory 设置为0时,所有值实际上都存在于磁盘上。默认值为 0

    虚拟机最大内存 0

  3. Redis 交换文件分为许多页。一个对象可以保存在多个页面上,但一个页面不能被多个对象共享。 vm-page-size 应根据存储数据的大小来设置。作者建议,如果要存储很多小对象,页面大小最好设置为32或64字节;如果您存储非常大的对象,则可以使用更大的页面。如果您不确定,请使用默认值。

     vm-page-size 32
  1. 设置交换文件中的页数。由于页表(指示页面空闲或已使用的位图)放置在内存中,因此磁盘上每 8 个页面将消耗 1 个字节的内存。
     vm-pages 134217728
  1. 设置访问交换文件的线程数。最好不要超过机器的核心数。如果设置为0,则对交换文件的所有操作都将是串行的,这可能会导致较长的延迟。默认值为 4
     vm-max-threads 4
  1. 设置响应客户端时是否将较小的数据包合并为一个数据包发送。默认已启用。

    胶水输出缓冲 是

  2. 指定当超过一定数量或最大元素超过某个临界值时,使用特殊的哈希算法。

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512
  1. 指定是否激活重置哈希,默认开启(稍后介绍Redis哈希算法时会详细介绍)
    activerehashing yes
  1. 指定包含其他配置文件。您可以在同一主机上的多个Redis实例之间使用相同的配置文件,并且每个实例都有自己特定的配置文件。
    include /path/to/local.conf

Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

String是redis最基本的类型,一个key对应一个value。字符串类型是二进制安全的。这意味着redis字符串可以包含任何数据。例如,jpg 图像或序列化对象。字符串类型是Redis最基本的数据类型,一个key最多可以存储512MB。

Redis 的 SET 和 GET 命令,来操作数据库。
在这里插入图片描述

String类型不仅可以存储字符、json字符串,还可以存储图像等二进制文件信息。

Redis安装

Redis命令

Redis 命令用于在 redis 服务上执行操作。redis 服务上执行命令需要启动一个 redis 客户端redis-cli

在远程服务上执行命令:redis-cli -h host -p port -a password

redis-cli -h 127.0.0.1 -p 6379 -a "root"

需要配置密码。安装后默认没有密码。可以在配置文件中配置,也可以通过命令行配置。

Redis key命令用于管理redis密钥

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

Redis命令官网
https://www.runoob.com/redis/redis-keys.html

Redis 字符串命令
在这里插入图片描述
在这里插入图片描述

Redis 事务

Redis 事务可以同时执行多个命令,并具有以下三个重要保证:

  • 批量操作在发送 EXEC 命令之前被放入队列缓存中。
  • 收到EXEC命令后,进入事务执行。如果事务中的任何命令执行失败,则其余命令仍然执行。
  • 事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一笔交易从开始到执行会经历以下三个阶段:

  • 开业。
  • 命令加入队列。
  • 执行交易。

MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

Redis事务命令
在这里插入图片描述

Redis脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL
在redis客户端机器上,新建一个文件ratelimiting.lua:

local times = redis.call('incr',KEYS[1])
 
if times == 1 then
 redis.call('expire',KEYS[1], ARGV[1])
end
 
if times > tonumber(ARGV[2]) then
 return 0
end
return 1

运行脚本eval ratelimiting.lua rate.limitingl:127.0.0.1 , 10 3

eval 参数告诉 redis-cli 读取并运行以下 Lua 脚本。 ratelimiting.lua 是脚本的位置,后面是传递给 Lua 脚本的参数。其中,“,”前面的rate.limiting:127.0.0.1是要操作的key,可以通过脚本中的KEYS[1]获取。 “,”后面的10和3是参数。 ARGV[1] 可以在脚本中使用。并获得ARGV[2]。注意:“,”两边的空格不能省略,否则会出错。

在这里插入图片描述

Redis连接

Redis 连接命令主要是用于连接 redis 服务。在这里插入图片描述

Redis服务器命令

Redis服务器命令主要用于管理redis服务。

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

雷迪斯地理
Redis流

Java 使用 Redis

在开始在Java中使用Redis之前,我们需要确保已经安装了redis服务和Java redis驱动。

  • 首先需要下载驱动包 下载jedis.jar,确保下载最新驱动包。
  • 将此驱动程序包包含在您的类路径中。
import redis.clients.jedis.Jedis;
 
public class RedisJava {
    
    public static void main(String[] args) {
    
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        // 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
        // jedis.auth("123456"); 
        System.out.println("连接成功");
        //查看服务是否运行
        System.out.println("服务正在运行: "+jedis.ping());
    }
}

Redis Java String(字符串)示例

import redis.clients.jedis.Jedis;
 
public class RedisStringJava {
    
    public static void main(String[] args) {
    
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");
        //设置 redis 字符串数据
        jedis.set("runoobkey", "www.runoob.com");
        // 获取存储的数据并输出
        System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
    }
}
. . .

相关推荐

额外说明

Oracle Secure Backup管理员指南 第6章 还原文件系统数据

本章介绍如何还原Oracle安全备份备份的文件系统对象。 6.1、关于文件系统还原操作 通过Oracle安全备份,可以使用以下方式还原文件系统数据: 基于目录的还原操作。在这种类型的还原操作中,可以浏览Oracle安全备份目录查看要还原的文件系统对象。在

额外说明

sql数据不多,mdf文件特别大怎么处理

1、重建大表的聚集索引 2、完整备份+日志备份一次 3、收缩数据文件(不是收缩数据库),收缩过程一开始先100M/次,过几次再调到500M,不要一次收缩好几G,要话很多时间的。 请问你是不是之前操作这个数据库的时候,有很多delete表的操作? 如果是的

额外说明

在Sql Server中,group by后,同时查询了select中表中的其他列,但是数据不想分组...

最近帮朋友处理一批数据,将指定的列重复的数据拿出来。这些数据在excel里。有10W条左右。由于EXCEL不好操作。就想着将数据导入数据库通过SQL语句来操作。 导入数据库成功了,但由于SQL不是很牛,所以查询有些问题。 我用group by 把重复的拿

额外说明

Unity 3d 发布apk

详细可以看 : https://blog.csdn.net/huawei12341/article/details/78491974 (教程中的资源 jdk7 无法和 sdk配套使用 会报错) 链接:https://pan.baidu.com/s/1Og

额外说明

四川音乐学录音艺术与计算机音乐,艺考中作曲专业和录音专业有什么不同呢?...

原标题:艺考中作曲专业和录音专业有什么不同呢? 近几年,作曲专业和录音专业逐渐成为艺考的热门,但很多同学对这两个专业一知半解。我在教学中常常会有学生问到:“老师,这两个专业有什么区别?在艺考中,这两个专业分别考什么内容?入学后,这两个专业都学习哪些科目?

额外说明

数字思维:指数函数,威力巨大

文章目录 一、指数函数 1、指数函数概述 2、指数函数图像 二、象棋发明者的故事 三、编程计算米粒数 1、提出任务 - 用米粒填充国际象棋盘 2、编写程序 - 用米粒填充国际象棋盘.py 3、运行程序,查看结果 4、尝试其它计算方法 (1)利用列表生成式

额外说明

JavaScript学习笔记:创建、添加与删除节点

JavaScript学习笔记:创建、添加与删除节点 文章目录 JavaScript学习笔记:创建、添加与删除节点 一、DOM对象节点类型 二、创建节点 1、创建元素节点 2、创建文本节点 3、创建属性 4、创建属性节点 三、添加节点 1、追加新节点 2、

额外说明

Vue ElementUI el-tree 默认初始化时,未展开的子节点不渲染

官网 API 中这个参数默认是 true,改为 false 后,初始化时未展开的子节点也会渲染。 当为 true 时,只勾选父节点,未渲染的子节点是接收不到 check 事件的,从而导致功能错误。

额外说明

【MySQL】索引问题

索引下推 在联合索引中,由于查询条件导致无法使用整个联合索引,但可以使用联合索引中一部分字段可以使用依然使用该索引,就把他们称为有效索引字段吧,而其它的无效索引的字段作为无效索引查询条件字段(名字有点长)。 查询时,在存储引擎层,首先根据这些有效索引字段

ads via 小工具