Redis简介、数据类型和命令

news2024/11/27 7:37:34

1 Redis 简介

Redis 是一个高性能的 key/value 数据库。它是完全开源免费的,并且遵守 BSD 协议。

1.1 Redis 特点

  1. 不仅支持 key/value 类型的数据,也支持 list,hash,set,zset 等等数据结构。

  1. 支持持久化,可以把内存数据保存到磁盘上,重启后再次加载到内存中使用。

  1. 支持备份,可以使用主/从模式进行数据备份。

1.2 Redis 优势

  1. 数据类型丰富 : Redis 支持 Strings, Lists, Hash, Set 及 Ordered Sets 数据类型操作。

  1. 高性能 : Redis 能读的速度是 110000 次/s ,写的速度是 81000 次/s。

  1. 原子型操作 : Redis 的所有操作都是原子性的,还支持对几个操作完成后的原子性执行。

  1. 丰富的特性 : Redis 支持 publish/subscribe, 通知, key 过期等等特性。

1.3 Redis 安装

使用 docker 安装和启动 redis,我们创建 docker-compose.yml

services:
  redis:
    container_name: my-redis
    image: redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - ./redis-conf/redis.conf:/etc/redis/redis.conf
      - ./redis-data/:/data

redis.conf 是一个默认的配置文件 我们可以根据需要使用自己的配置文件

redis.conf

# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# 开始启动时必须如下指定配置文件

# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 存储单位如下所示

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

################################## INCLUDES ###################################

# 如果需要使用多配置文件配置redis,请用include
#
# include /path/to/local.conf
# include /path/to/other.conf

################################## MODULES ##################################### modules

# 手动设置加载模块(当服务无法自动加载时设置)
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

################################## NETWORK #####################################

# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# 设置绑定的ip
bind 127.0.0.1

# 保护模式:不允许外部网络连接redis服务
protected-mode yes

# 设置端口号
port 6379

# TCP listen() backlog.
#
# TCP 连接数,此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度
tcp-backlog 511

# Unix socket.
#
# 通信协议设置,本机通信使用此协议不适用tcp协议可大大提升性能
# unixsocket /tmp/redis.sock
# unixsocketperm 700



# TCP keepalive.
#
# 定期检测cli连接是否存活
tcp-keepalive 300

################################# GENERAL #####################################

# 是否守护进程运行(后台运行)
daemonize yes

# 是否通过upstart和systemd管理Redis守护进程
supervised no

# 以后台进程方式运行redis,则需要指定pid 文件
pidfile /var/run/redis_6379.pid

# 日志级别
# 可选项有: # debug(记录大量日志信息,适用于开发、测试阶段); # verbose(较多日志信息); # notice(适量日志信息,使用于生产环境);
# warning(仅有部分重要、关键信息才会被记录)。
loglevel notice

# 日志文件的位置
logfile ""

# 数据库的个数
databases 16

# 是否显示logo
always-show-logo yes

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
# 持久化操作设置 900秒内触发一次请求进行持久化,300秒内触发10次请求进行持久化操作,60s内触发10000次请求进行持久化操作

save 900 1
save 300 10
save 60 10000

# 持久化出现错误后,是否依然进行继续进行工作
stop-writes-on-bgsave-error yes

# 使用压缩rdb文件 yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间
rdbcompression yes

# 是否校验rdb文件,更有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗
rdbchecksum yes

# dbfilename的文件名
dbfilename dump.rdb

# dbfilename文件的存放位置
dir ./

################################# REPLICATION #################################

# replicaof 即slaveof 设置主结点的ip和端口
# replicaof <masterip> <masterport>

# 集群节点访问密码
# masterauth <master-password>

# 从结点断开后是否仍然提供数据
replica-serve-stale-data yes

# 设置从节点是否只读
replica-read-only yes

# 是或否创建新进程进行磁盘同步设置
repl-diskless-sync no

# master节点创建子进程前等待的时间
repl-diskless-sync-delay 5

# Replicas发送PING到master的间隔,默认值为10秒。
# repl-ping-replica-period 10

#
# repl-timeout 60

#
repl-disable-tcp-nodelay no

#
# repl-backlog-size 1mb

#
# repl-backlog-ttl 3600

#
replica-priority 100

#
# min-replicas-to-write 3
# min-replicas-max-lag 10
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234

################################## SECURITY ###################################

# 设置连接时密码
# requirepass 123456

################################### CLIENTS ####################################

# 最大连接数
# maxclients 10000

############################## MEMORY MANAGEMENT ################################

# redis配置的最大内存容量
# maxmemory <bytes>

# 内存达到上限的处理策略
# maxmemory-policy noeviction

# 处理策略设置的采样值
# maxmemory-samples 5

# 是否开启 replica 最大内存限制
# replica-ignore-maxmemory yes

############################# LAZY FREEING ####################################

# 惰性删除或延迟释放
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

############################## APPEND ONLY MODE ###############################

# 是否使用AOF持久化方式
appendonly no

# appendfilename的文件名

appendfilename "appendonly.aof"

# 持久化策略
# appendfsync always
appendfsync everysec
# appendfsync no

# 持久化时(RDB的save | aof重写)是否可以运用Appendfsync,用默认no即可,保证数据安全性
no-appendfsync-on-rewrite no

# 设置重写的基准值
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 指定当发生AOF文件末尾截断时,加载文件还是报错退出
aof-load-truncated yes

# 开启混合持久化,更快的AOF重写和启动时数据恢复
aof-use-rdb-preamble yes

################################ REDIS CLUSTER  ###############################

# 是否开启集群
# cluster-enabled yes

# 集群结点信息文件
# cluster-config-file nodes-6379.conf

# 等待节点回复的时限
# cluster-node-timeout 15000

# 结点重连规则参数
# cluster-replica-validity-factor 10

#
# cluster-migration-barrier 1

#
# cluster-require-full-coverage yes

#
# cluster-replica-no-failover no

查看 redis 启动情况:docker ps

进入 redis 容器中:docker exec -it my-redis /bin/bash

输入命令:

redis-cli
ping

返回如下图

1.4 远程 redis-cli 语法

$ redis-cli -h host -p port -a password

h ip 地址

p – 端口

a – 密码

2 Redis 数据类型

2.1 Redis 支持七种数据类型

  1. string ( 字符串 )

  1. hash ( 哈希 )

  1. list ( 列表 )

  1. set ( 集合 )

  1. zset ( sorted set:有序集合 )

  1. Bitmaps ( 位图 )

  1. HyperLogLogs ( 基数统计 )

2.2 String(字符串)

  1. string 是 Redis 最基本的数据类型,key/value。

  1. string 类型的一个键最大能存储512 MB 数据。

  1. Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。

  1. string 类型是二进制安全的。

使用 Redis 的 SETGET 命令来进行设置和读取字符串。

127.0.0.1:6379> set redisKey redisValue
OK
127.0.0.1:6379> get redisKey
"redisKey"

2.3 Hash(哈希)

  1. Redis Hash 是一个 string 类型的 field 和 value 的映射表。

  1. 每个 hash 可以存储 232-1 键值对(40 多亿)。

  1. Hash 适合用于存储对象。

127.0.0.1:6379> hmset account:1 name huanxi password 123456 fav travel
OK
127.0.0.1:6379> hgetall account:1
1) "name"
2) "huanxi"
3) "password"
4) "123456"
5) "fav"
6) "travel"

使用 Redis HMSET, HGETALL 命令, account:1 为键。

2.4 List(列表)

  1. List 是简单的字符串列表,按照插入顺序排序。

  1. 向列表中添加一个元素,可以从列表的头部 ( 左边 ) 或者尾部 ( 右边 )开始。

127.0.0.1:6379> rpush listTemp 1 2 3
(integer) 3
127.0.0.1:6379> lrange listTemp 0 10
1) "1"
2) "2"
3) "3"

2.5 Set(集合)

  1. Set 是 string 类型的无序集合

  1. Set 内元素不可重复,无论插入多少次,只会保留一份。

  1. Set 是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是 O(1)。

2.5.1 sadd 命令

sadd 添加一个 string 元素到 set 集合中。

2.5.2 Redis sadd 语法

sadd key member

例子

127.0.0.1:6379> sadd setTemp 1
(integer) 1
127.0.0.1:6379> sadd setTemp 2
(integer) 1
127.0.0.1:6379> sadd setTemp 3
(integer) 1
127.0.0.1:6379> sadd setTemp 3
(integer) 0

127.0.0.1:6379> smembers setTemp
1) "1"
2) "2"
3) "3"

3添加了两次,但最后只存储了一份。

2.6 zset ( sorted set:有序集合 )

zset 和 set 一样也是 string 类型元素的集合。不同的是 zset 中的每个元素都有自己的分数(double 类型),通过分数来对集合中的元素进行排序。这个分数是不重复的。

2.6.1 Redis zadd 命令

zset 添加元素到集合中,如果元素在集合中存在则更新对应分数(score)。

2.6.2 Redis zadd 命令语法格式

zadd key score member

例子

127.0.0.1:6379> zadd zsetTemp 1 1
(integer) 1
127.0.0.1:6379> zadd zsetTemp 2 2
(integer) 1
127.0.0.1:6379> zadd zsetTemp 3 3
(integer) 1
127.0.0.1:6379> zadd zsetTemp 4 1
(integer) 0

zrangebyscore zsetTemp 0 10
1) "2"
2) "3"
3) "1"

1 被添加 2 次,但是最后只存储了一份。

2.7 Redis Bitmap ( 位图 )

Bitmap 通过类似 map 结构存放 0 或 1 ( bit 位 ) 作为值。可以用来统计状态,如 日活,打卡,浏览量等。

2.7.1 setbit 命令

setbit 命令用于设置或者清除一个 bit 位

2.7.2 setbit 命令语法格式

SETBIT key offset value

例子

127.0.0.1:6379> setbit aa 10001 1 # 返回操作之前的数值
(integer) 0
127.0.0.1:6379> setbit aa 10001 2 # 如果值不是0或1就报错
(error) ERR bit is not an integer or out of range
127.0.0.1:6379> setbit aa 10001 0
(integer) 1
127.0.0.1:6379> setbit aa 10001 1
(integer) 0
127.0.0.1:6379> getbit aa 10001
(integer) 1

3 Redis 命令

更多命令请参考:https://redis.io/commands

下表列出了 Redis 键相关的命令

命令

描述

DEL

用于删除 key

DUMP

序列化给定 key ,并返回被序列化的值

EXISTS

检查给定 key 是否存在

EXPIRE

为给定 key 设置过期时间

EXPIREAT

用于为 key 设置过期时间 接受的时间参数是 UNIX 时间戳

PEXPIRE

设置 key 的过期时间,以毫秒计

PEXPIREAT

设置 key 过期时间的时间戳(unix timestamp),以毫秒计

KEYS

查找所有符合给定模式的 key

MOVE

将当前数据库的 key 移动到给定的数据库中

PERSIST

移除 key 的过期时间,key 将持久保持

PTTL

以毫秒为单位返回 key 的剩余的过期时间

TTL

以秒为单位,返回给定 key 的剩余生存时间(

RANDOMKEY

从当前数据库中随机返回一个 key

RENAME

修改 key 的名称

RENAMENX

仅当 newkey 不存在时,将 key 改名为 newkey

TYPE

返回 key 所储存的值的类型

3.1 操作 key 语法

COMMAND KEY的名称

例子

127.0.0.1:6379> SET key value
OK
127.0.0.1:6379> get key
"value"
127.0.0.1:6379> del key
(integer) 1
127.0.0.1:6379> get key
(nil)

4 相关文章

一、Redis简介、数据类型和命令

二、Redis数据类型介绍、使用场景及其操作命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高并发异步多线程处理例子

用户请求流程 问题点 tomcat 线程资源占满&#xff0c;由于tomcat线程资源有限&#xff0c;每个请求都会经由tomcat线程处理&#xff0c;阻塞至web层处理完才能回收再利用。web层分发至后端服务可能会扩大几倍甚至数百倍的&#xff0c;譬如用户发起请求1w/s&#xff0c;到后端…

JavaEE10-Spring Boot配置文件

目录 1.配置文件作用 2.配置文件的格式 为配置文件安装提示插件 2.1. .properties&#xff08;旧版&#xff0c;默认的&#xff09; 2.1.1.基本语法 PS:配置文件中使用"#"来添加注释信息&#xff0c;2种添加方式&#xff1a; 2.1.2.缺点分析 2.2. .yml&#…

阿里“云开发“小程序(uniCloud)

博主ps&#xff1a; 网上资料少的可怜&#xff0c;哎&#xff0c;腾讯云涨价了&#xff0c;论服务器&#xff0c;我肯定选的阿里&#xff0c;再着你们对比下uniCloud的报价就知道了&#xff0c;如果有钱就另当别论了。 所以这片博文&#xff0c;博主试过之后&#xff0c;先抛出…

Git速成指南

文章目录版本管理工具概念版本管理工具介绍版本管理发展简史SVN(SubVersion)GitGit工作流程图Git安装基本配置为常用指令配置别名&#xff08;可选&#xff09;解决GitBash乱码问题Git常用命令获取本地仓库基础操作指令查看修改的状态&#xff08;status&#xff09;添加工作区…

[翻译]PostgreSQL中的WAL压缩以及版本15中的改进

[翻译]PostgreSQL中的WAL压缩以及版本15中的改进从以开始就一直在尝试对WAL进行不同级别的压缩。自2016年以来内置功能&#xff08;wal_compression&#xff09;就一直存在&#xff0c;几乎所有备份工具都会在传递到备机前对WAL进行压缩。但现在是时候再看看内置的wal_compress…

呦~,这不 SVG 映射反爬么,这你都会?厉害厉害 | 案例 25

在正式学习本篇博客前&#xff0c;先要了解一下什么是 SVG&#xff08;Scalable Vector Graphics&#xff09;&#xff0c;它是一种矢量图形格式&#xff0c;可以用来在网页上创建可伸缩的图形。 使用 SVG 技术实现反爬虫的方法有以下几种&#xff1a; 验证码&#xff1a;使用…

imx6ull Linux使用设备树配置LED

我们基于寄存器的方式已经编写了LED驱动&#xff0c;实现点亮/熄灭LED&#xff0c;但是你有没有发现一个问题&#xff0c;就是假设LED修改了一个GPIO&#xff0c;那么需要对应的修改寄存器代码&#xff0c;非常繁琐&#xff0c;而且随着改板次数增加&#xff0c;那么会带来一个…

从零开始的数模(五)插值与拟合

目录 一、概念 二、 插值 2.1方法 2.2MATLAB实现 例题1 ​编辑例题2 2.3python实现 2.3.1例题一的python解法 2.3.2二维网格节点插值 例题四 三、拟合篇&#xff1a; 3.1MATLAB实现 3.2python实现 一、概念 二、 插值 2.1方法 2.2MATLAB实现 在MATLAB中提供了一些…

带滤波器的PID控制仿真-2(M语言)

被控对象为三阶传递函数&#xff1a;低通滤波器为&#xff1a;采样时间为1ms&#xff0c;噪声信号加在对象的输出端。分三种情况进行:M1 时&#xff0c;为未加噪声信号;M2时&#xff0c;为加噪声信号未加滤波;M3时&#xff0c;为加噪声信号加滤波。阶跃响应结果如图1&#xff5…

【论文精读】KD-MVS

今天读的是发表在ECCV2022上的自监督MVS文章&#xff0c;作者来自于旷视科技和清华大学。 文章链接&#xff1a;arxiv 代码链接&#xff1a;https://github.com/megvii-research/KD-MVS 目录Abstract1. Introduction2. Related work3. Methodology3.1 Self-supervised Teacher …

51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频)

51单片机七人多数表决器仿真设计( proteus仿真程序报告讲解视频&#xff09; 仿真图proteus 7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0033 51单片机七人多数表决器仿真设计视频讲解1.主要功能&#xff1a;2.仿真3.…

Java:Mybatis的使用

一、Mybatis的概述 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发。 MyBatis中文官网&#xff1a;https://mybatis.org/mybatis-3/zh/getting-started.html 二、Mybatis快速入门 1、创建user表&#xff0c;添加数据 create database mybatis; use mybati…

英语语法大全

文章目录一、主语1、名词、代词和动词做主语2、主语从句做主语&#xff0c;谓语动词用单数3、主语从句练习二、谓语动词1、谓语动词种类2、主谓一致三、宾语1、单宾语2、双宾语3、复合宾语4、宾语从句四、定语1、定语从句2、定语从句的翻译五、状语1、分词做状语2、独立主格结构…

42.Isaac教程--超像素

超像素 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 超像素是一组外观相似的相连像素。 超像素分割将图像分成数百个不重叠的超像素&#xff08;而不是数千或数百万个单独的像素&#xff09;。通过使用超像素&#xff0c;您可以在更有意义的区…

ESP-C3入门2. Clion+IDF 开发环境搭建

ESP-C3入门2. ClionIDF 开发环境搭建一、准备工作二、Clion配置过程1. 使用idf.py命令创建一个范例工程2. 使用Clion打开项目&#xff0c;修改CMakeLists.txt3. 设置交叉编译工具链4. 设置CMake5. 对cmake一些路径进行修改。三、编译及烧录1. 编译2. 烧录3. 查看输出一、准备工…

审核中台业务数据进审升级之路

本文字数&#xff1a;3850字预计阅读时间&#xff1a;15 分钟目录1.背景1.1. 相关名词介绍1.2. 审核中台介绍1.3. 业务痛点介绍2. 规范化改造2.1 规范通讯协议2.2 规范处理流程3. 自动化改造3.1 业务接入检测器3.2 数据自动化流转3.3 源码示例4. 总结1.背景1.1 相关名词介绍1.1…

计算机图形学基础教程(Visual C++版)习题解答与编程实践(第2版)孔令德1-到第3章的直线扫描转换

1-到第3章的直线扫描转换&#xff08;没更新完&#xff09;习题1知识积累习题2知识点映射模式使用GDI对象习题3知识积累直线的中点Bresenham算法习题1 1.计算机图形学的定义是什么?说明计算机图形学、图像处理和模式识别之间的关系。 答&#xff1a; CG是计算机图形学的缩写。…

实验一、旅馆客户服务呼叫显示系统

实验一 旅馆客户服务呼叫显示系统 实验目的 综合应用数字电子技术知识&#xff0c;按照要求设计并完成一个小规模的数字电路系统。进行硬件线路的设计、仿真、焊接、调试与实现。使系统实现一种用于旅馆客户服务呼叫显示系统的实用电路。在呼叫过程中&#xff0c;当8位旅客有…

Spark Core ---- RDD持久化

RDD的数据是过程数据 RDD之间进行相互迭代计算&#xff08;Transformation的转换&#xff09;&#xff0c;当执行开启后&#xff0c;新RDD的生成&#xff0c;代表老RDD的消失 RDD的数据是过程数据&#xff0c;只在处理的过程中存在&#xff0c;一旦处理完成&#xff0c;就不见…

【数据结构和算法】实现带头双向循环链表(最复杂的链表)

前文&#xff0c;我们实现了认识了链表这一结构&#xff0c;并实现了无头单向非循环链表&#xff0c;接下来我们实现另一种常用的链表结构&#xff0c;带头双向循环链表。如有仍不了解单向链表的&#xff0c;请看这一篇文章(7条消息) 【数据结构和算法】认识线性表中的链表&…