当前位置: 首页 > news >正文

Redis小白入门

启动/停止

启动

一、直接运行redis-server即可启动redis,默认端口号:6379,通过--port参数可自定义端口号:

redis-server   #直接运行redis
redis-server --port 6380  #自定义端口号

二、在生产环境推荐使用脚本运行redis,可以使redis随系统自动运行。在redis源代码目录的utils文件夹下有个redis_init_script的初始化脚本文件,可以配置redis运行方式和持久化文件、日志文件的存储位置等:

  1. 配置初始化脚本:将初始化脚本复制到/etc/init.d目录中,文件名为redis_端口号,修改脚本第6行REDISPORT变量的值与端口号保持一致;
  2. 建立文件夹:用于存放配置文件和持久化文件;
  3. 修改配置文件:将配置文件模板复制到/etc/redis目录中,以端口号命名(*6379.conf),修改配置如下:
/etc/init.d/redis_端口号 start            #启动redis
sudo update-rc.d redis_端口号 defaults    #使redis随系统自启动

停止

停止redis时,redis可能会将内存中的数据同步到硬盘中,强行终止redis进程可能导致数据丢失。使用redis的SHUTDOWN命令或者kill redis进程的PID。两种方式效果一样。

redis客户端

redis-cli是redis自带的基于命令行的客户端。

# 1、将命令作为redis-cli的参数执行
redis-cli -h 127.0.0.1 -p 6379        #链接redis
redis-cli PING                        #测试链接是否正常,正常会返回PONG# 2、运行redis-cli进入交互模式,可自由输入多条命令
redis-cli

配置

redis支持通过配置文件设置是否持久化、日志级别等,启用配置文件的方法是在启动时将配置文件的路径作为启动参数传递给redis-server

redis-server /path/to/redis.conf# 通过启动参数传递同名的配置选项会覆盖配置文件中相应的参数
redis-server /path/to/redis.conf --loglevel warning#redis 运行时,通过CONFIG SET 命令可在不重启的情况下修改配置CONFIG SET loglevel warning#通过CONFIG GET 命令可获取当前的配置情况

多数据库

 Redis 是一个字典结构的存储服务器,而实际上一个 Redis 实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。

每个数据库对外都是以一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改这一数字。客户端与Redis 建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库。

  • Redis不支持自定义数据库的名字,每个数据库都以编号命名(0-15);
  • Redis不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。
  • Redis多个数据库之间不完全隔离,比如FLUSHALL命令可以清空一个Redis 实例中所有数据库中的数据。
  • 这些数据库像是一种命名空间,不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库存储B应用的数据,不同的应用应该使用不同的Redis实例存储数据。
  • Redis非常轻量级,一个空Redis实例占用的内存只有1MB左右,不用担心多个 Redis 实例会额外占用很多内存。

redis数据类型

基础命令:redis不区分命令大小写

1.获得符合规则的键名列表

KEYS pattern

pattern支持glob风格通配符格式:

使用 KEYS * 能获得 Redis中所有的键
注意 KEYS命令需要遍历 Redis 中的所有键,当键的数量较多时会影响性能,不建议在生产环境中使用。

2.判断一个键是否存在

EXISTS key        #如果键存在则返回整数类型1,否则返回0。

3.删除键:可以删除一个或多个键,返回值是删除的键的个数。

DEL key 【key ...]

4.获得键值的数据类型
TYPE 命令用来获得键值的数据类型,返回值可能是string(字符串类型)、hash(散列类型)、1ist(列表类型)、set(集合类型)、zset(有序集合类型)。

TYPE key

字符串类型

字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。

一个字符串类型键允许存储的数据的最大容量是 512 MB。

字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种角度来说只是组织字符串的形式不同。例如,列表类型是以列表的形式组织字符串,而集合类型是以集合的形式组织字符串。

# 1.赋值与取值
SET key value
GET key# 2.递增数字,当存储的字符串是整数形式时,INCR作用是让当前键值递增,并返回递增后的值
INCR key    # 3.增加指定的整数,通过increment参数指定一次增加的数值
INCRBY key increment            # 4.减少指定的整数
DECR key
DECRBY key decrement# 5.增加指定浮点数,可以递增一个双精度浮点数
INCRBYFLOAT key increment        # 6.向尾部追加值,如果键不存在则将该键的值设置为value。返回值是追加后字符串的总长度
APPEND key value   # 7.获取字符串长度,如果键不存在则返回0。
STRLEN key                    # 8.同时获得/设置多个键值
MGET key [key ...]
MSET key value [key value...]

散列类型

散列类型(hash)的键值也是一种字典结构,其存储了字段(feld)和字段值的映射,但字段值只能是字符串,不支持其他数据类型。

提示 除了散列类型,Redis 的其他数据类型同样不支持数据类型嵌套。比如集合类型的每个元素都只能是字符串,不能是另一个集合或散列表等。

散列类型适合存储对象:使用对象类别和ID 构成键名,使用字段表示对象的属性,而字段值则存储属性值。

# 1.赋值与取值:HSET 命令不区分插入和更新操作,当执行的是插入操作时返回1,当执行的是更新操作时返回0。即当键本身不存在时HSET命令还会自动建立它。HSET key field value
HGET key field
HMSET key field value [field value...]
HMGET key field [field...]
HGETALL key# 2.当需要同时设置多个字段的值时,可以使用HMSET、HMGET命令。HSET key fieldl valuel field2 value2
HGET key fieldl field2 # 3.判断字段是否存在:HEXISTS 命令用来判断一个字段是否存在。如果存在则返回1,否则返回0(如果键不存在也会返回 0)。HEXISTS key field# 4.当字段不存在时赋值:HSETNX命令与 HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行任何操作。HSETNX 命令是原子操作,不用担心竞态条件。HSETNX key field value# 5.增加数字:HINCRBY命令与之类似,可以使字段值增加指定的整数。如果之前键不存在,HINCRBY命令会自动建立该键并默认字段的值为“0”。命令的返回值是增值后的字段值。HINCRBY key field increment# 6.删除字段:HDEL命令可以删除一个或多个字段,返回值是被删除的字段个数 HDEL key field lfield...]# 7.只获取字段名或字段值,HVALS命令用来获得键中所有字段值HKEYS key
HVALs key# 8.获得字段数量
HLEN key

在 Redis 中每个键都属于一个明确的数据类型,如通过 HSET 命令建立的键是散列类型,通过 SET命令建立的键是字符串类型等。使用一种数据类型的命令操作另一种数据类型的键会提示错误:"ERR Operation aqainst a key holding thewrong kind of value"

列表类型

  • 列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素或者获得列表的某一个片段。
  • 列表类型内部是使用双向链表(doublelinked list)实现的
  • 通过索引访问元素比较慢
# 1.向列表两端增加元素:LPUSH 命令用来向列表左边增加元素,返回值表示增加元素后列表的长度。
LPUSH key value [value ...]
RPUSH key value [value ...]LPUSH命令同时增加多个元素时,会依次将元素加在列表左侧,如:LPUSH aaa 2 3 4,加入后顺序为:4 3 2# 2.从列表两端弹出元素:LPOP命令可以从列表左边弹出一个元素。LPOP命令执行两步操作:第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。LPoP key
RPOP key# 3.获取列表中元素的个数:当键不存在时 LLEN 会返回 0
#LLEN 的时间复杂度为O(1),使用时Redis会直接读取现成的值,而不需要像部分关系数据库(如使用InnoDB存储引擎的MySOL表)那样需要遍历一遍数据表来统计条目数量。LLEN key# 4.获得列表片段:LRANGE命令将返回索引从 start 到 stop之间的所有元素(包含两端的元素)。Redis的列表起始索引为0LRANGE key start stop# 5.删除列表中指定的值LREM key count valueLREM 命令会删除列表中前count个值为 value 的元素,返回值是实际删除的元素个数。根据 count值的不同,LREM命令的执行方式会略有差异:
当count>0时LREM命令会从列表左边开始删除前count个值为value的元素;
当count<0时LREM命令会从列表右边开始删除前(count)个值为value的元素;
当count =0时LREM命令会删除所有值为value的元素。# 6.获得/设置指定索引的元素值LINDEX key index
LSET key index valueLINDEX命令用来返回指定索引的元素,索引从0开始。
如果index是负数则表示从右边开始计算的索引,最右边元素的索引是-1。
LSET是另一个通过索引操作列表的命令,它会将索引为index的元素赋值为 value。# 7.只保留列表指定片段:LTRIM命令可以删除指定索引范围之外的所有元素。LTRIM key start end# 8.向列表中插入元素LINSERT key BEFORE|AFTER pivot valueLINSERT 命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是 BEFORE 还是 AFTER 来决定将 value 插入到该元素的前面还是后面。LINSERT 命令的返回值是插入后列表的元素个数。# 9.将元素从一个列表转到另一个列表RPOPLPUSH source destinationRPOPLPUSH命令会先从source列表类型键的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值,整个过程是原子的

集合类型

  • 在集合类型(set)中的每个元素都是不同的,且没有顺序。
  • 集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等
  • 集合类型在 Redis内部是使用值为空的散列表(hashtable)实现的,所以这些操作的时间复杂度都是 O(1)。最方便的是多个集合类型键之间还可以进行并集、交集和差集运算
# 1.增加/删除元素
SADD key member [member ...]
SREM key member [member ...]SADD 命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。返回值是集合元素数量。SREM 命令用来从集合中删除一个或多个元素,并返回删除成功的个数,# 2.获得集合中的所有元素SMEMBERS key# 3.判断元素是否在集合中SISMEMBER key member判断一个元素是否在集合中是一个时间复杂度为0(1)的操作,无论集合中有多少个元素,SISMEMBER命令始终可以极快地返回结果。当值存在时SISMEMBER命令返回1,当值不存在或键不存在时返回0# 4.集合间运算SDIFF key [key ...]        #对多个集合执行差集运算
SINTER key [key ...]       #对多个集合执行交集运算
SUNION key [key...]        #对多个集合执行并集运算# 5.获取集合中元素个数SCARD key# 6.进行集合运算并将结果存储SDIFFSToRE destination key[key...]
SINTERSTORE destination key[key ...]
SUNIONSTORE destination key[key...]# 7.SRANDMEMBER命令用来随机从集合中获取一个元素SRANDMEMBER key [count]还可以传递 count 参数来一次随机获得多个元素,根据count的正负不同,具体表现也不同。
(1)当count为正数时,SRANDMEMBER 会随机从集合里获得 count个不重复的元素。如果 count的值大于集合中的元素个数,则 SRANDMEMBER 会返回集合中的全部元素。
(2)当count为负数时,SRANDMEMBER会随机从集合里获得count个的元素,这些元素有可能相同。# 8. SPOP命令会从集合中随机选择一个元素弹出。SPOPkey

有序集合

在集合类型的基础上,有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是它们的分数却可以相同。

  • 有序集合类型是有序的,可以获得某一范围的元素;
  • 有序集合类型是使用散列表和跳跃表(Skiplist)实现的,所以即使读取位于中间部分的数据速度也很快;
  • 有序集合可以简单地调整某个元素的位置(通过更改这个元素的分数);
# 1.增加元素ZADD key score member [score member ...]ZADD 命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。ZADD命令的返回值是新加入到集合中的元素个数(不包含之前已经存在的元素)。
分数不仅支持整数,还支持双精度浮点数,其中+inf和-inf表示正无穷和负无穷# 2.获得元素的分数ZSCORE key member# 3.获得排名在某个范围的元素列表ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]ZRANGE命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素),索引都是从0开始,负数代表从后向前查找(-1表示最后一个元素)。如果需要同时获得元素的分数的话可以在RANGE命令的尾部加上WITHSCORES参数,这时返回的数据格式就从“元素1,元素2,…,元素n”变为了“元素1,分数 1,元素2,分数 2,…,元素 n,分数n”如果两个元素的分数相同,Redis 会按照字典顺序(即"0"<"9"<"A"<"Z"<"a"这样的顺序)来进行排列ZREVRANGE 命令是按照元素分数从大到小的顺序给出结果的。# 4.获得指定分数范围的元素ZRANGEBYSCORE key min max[WITHSCORES][LIMIT offset count]该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含min和 max)的元素;
如果希望分数范围不包含端点值,可以在分数前加上“(”符号。
min 和 max还支持无穷大,-inf 和+inf 分别表示负无穷和正无穷。# 5.增加某个元素的分数ZINCRBY key increment memberZINCRBY命令可以增加一个元素的分数,返回值是更改后的分数,increment也可以是个负数表示减分;
如果指定的元素不存在,Redis在执行命令前会先建立它并将它的分数赋为0再执行操作。# 6.获得集合中元素的数量
ZCARD key# 7.获得指定分数范围内的元素个数
ZCOUNT key min max# 8.删除一个或多个元素
ZREM key member [member .]
ZREM 命令的返回值是成功删除的元素数量(不包含本来就不存在的元素)。# 9.按照排名范围删除元素
ZREMRANGEBYRANK key start stopZREMRANGEBYRANK命令按照元素分数从小到大的顺序(即索引0表示最小的值)删除处在指定排名范围内的所有元素,并返回删除的元素数量。# 10.按照分数范围删除元素,返回值是删除的元素数量。
ZREMRANGEBYSCORE key min max# 11.获得元素的排名
ZRANK key member
ZREVRANK key memberZRANK命令会按照元素分数从小到大的顺序获得指定的元素的排名(从0开始,即分数最小的元素排名为 0)。
ZREVRANK 命令则相反(分数最大的元素排名为0)# 12.计算有序集合的交集
ZINTERsToRE destination numkeys key [key ...] [WEIGHTS weight [weight ...)] [AGGREGATESUM|MIN|MAX]ZINTERSTORE 命令用来计算多个有序集合的交集并将结果存储在destination键中(同样以有序集合类型存储),返回值为destination键中的元素个数。destination键中元素的分数是由AGGREGATE 参数决定的。(1)当AGGREGATE是SUM时(也就是默认值),destination键中元素的分数是每个参与计算的集合中该元素分数的和。
(2)当AGGREGATE是MIN时,destination键中元素的分数是每个参与计算的集合中该元素分数的最小值。
(3)当AGGREGATE是MAX时,destination键中元素的分数是每个参与计算的集合中该元素分数的最大值。ZINTERSTORE 命令还能够通过 WEIGHTS 参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重。
ZUNIONSTORE命令与ZINTERSTORE命令的用法一样。


文章转载自:

http://rQOsoyuP.xdbbx.cn
http://MixWRvvk.xdbbx.cn
http://FM0Mqi6D.xdbbx.cn
http://bmpyA2k6.xdbbx.cn
http://FWWln5an.xdbbx.cn
http://yKTDDqqM.xdbbx.cn
http://kGXQrawg.xdbbx.cn
http://rF9CpgvY.xdbbx.cn
http://3lgt4pjX.xdbbx.cn
http://xeVGIyNE.xdbbx.cn
http://ktWw6XRB.xdbbx.cn
http://V16tCVTF.xdbbx.cn
http://eCbuDBLa.xdbbx.cn
http://EVMjHjvO.xdbbx.cn
http://oUXmSKLU.xdbbx.cn
http://Dy1tzYN5.xdbbx.cn
http://WF1z8wR4.xdbbx.cn
http://UWaKeNpQ.xdbbx.cn
http://DoWq5GER.xdbbx.cn
http://trcQRRXJ.xdbbx.cn
http://K6hYqxrO.xdbbx.cn
http://jHXI6bqv.xdbbx.cn
http://3xwiDdh5.xdbbx.cn
http://yN7Ty5zt.xdbbx.cn
http://RSn16ObF.xdbbx.cn
http://rjeKjhg7.xdbbx.cn
http://XO0VNnuk.xdbbx.cn
http://opv72pKu.xdbbx.cn
http://CgVNrvNE.xdbbx.cn
http://wkmqSctr.xdbbx.cn
http://www.dtcms.com/a/374684.html

相关文章:

  • 分层-三层架构
  • 实战:HarmonyOS 中 HEIF 图像开发全流程(图处理篇)
  • 深入 Kubernetes:从零到生产的工程实践与原理洞察
  • 在Ubuntu上修改Nginx的默认端口(例如从80端口改为其他端口,如8080)
  • 《用 Pandas 和 Matplotlib 绘制柱状图:从数据读取到可视化表达的实战指南》
  • python之socket网络编程
  • 【用与非门设计一个七段显示译码器,要求显示Y, E, S 三个符号+门电路符号逻辑式】2022-12-5
  • 解决 Ubuntu 25.04 下 make menuconfig 报 ncurses 错误的问题
  • (49)es容器化部署启动报错-RBAC权限问题
  • MacOS 运行CosyVoice
  • Adam优化算法:深度学习的自适应动量估计方法
  • macos deepctr_torch虚拟环境配置
  • react的filber架构
  • Spring框架事件驱动架构核心注解之@EventListener
  • ARM的big.LITTLE架构
  • 整体设计 之 绪 思维导图引擎 :思维价值链分层评估的 思维引导和提示词导航 之 引 认知系统 之8 之 序 认知元架构 之3(豆包助手 之5)
  • 飞算JavaAI全链路实战:智能构建高可用电商系统核心架构
  • 01-AI-神经网络-视觉-PaddleDetection交通信号灯的目标检测的模型训练(平台提供的数据集)
  • SpringBoot改造MCP服务器(StreamableHTTP)
  • Gradle 与 Android 构建缓存机制全面总结
  • 数据结构题集-第四章-串-采用特定数据类型对串求逆
  • 新能源汽车中维修开关有什么作用?
  • GitHub 热榜项目 - 日榜(2025-09-09)
  • Go 装饰器模式学习文档
  • 20.44 QLoRA调参秘籍:零成本实现7B模型微调,参数黄金配比全解析(附3090实战方案)
  • Ubuntu 22.04 安装 Docker Compose 最新最简单完整指南​
  • 网络原理——传输层协议UDP
  • 从Java全栈开发到云原生实践:一次真实面试的深度剖析
  • 更换libc.so导致linux变砖,通过LD_PRELOAD挽救
  • PySpark数据输出