Redis常用命令大集合快速入门

Redis

一、介绍

程序是用来处理数据的,Redis是用来存储数据的,程序处理完的数据要存储在Redis中,不同特点的数据要存储在Redis中不同类型的数据结构中。

数据在没有存到Redis之前存在内存中。

二、Redis的五种数据类型以及操作命令

  1. Redis的key的操作命令

    • keys

      语法:keys pattern

      作用:查找所有符合模式pattern的key。pattern可以使用通配符。

      通配符:*(匹配0到多个字符),?(匹配一个字符),[](匹配括号中的一个字符)

      实例:

    • exists:判断key是否存在于数据库中

      语法:exists key ;判断1个key是否存在,存在返回1,不存在返回0。

      exists key [key key ...];判断多个key是否存在,返回存在的个数。

      实例:

    • move:移动指定的key到指定的数据库实例(Redis默认有16个库),用户默认使用第0个库

      语法:move key index

      实例:

    • ttl:查看key的剩余生存时间

      语法:ttl key ;返回值:-1:没有设置生存时间;-2:该key不存在

      实例:

    • expire:设置key的最大生存时间

      语法:expire key seconds

      实例:

    • type:查看指定key的数据类型

      语法:type key

      实例:

    • rename:重命名指定key

      语法:rename key newkey

      实例:

    • del:删除指定key和value

      语法:del key:删除一个key,

      del key [key key ...]:删除多个key

      返回值:删除实际删除数据条数

      实例

    • decrby:减去指定值

      语法:decrby key num

    • incrby:增加指定值

      语法:incrby key num

  2. 字符串类型:string(key-value)

    • 添加数据:set key value;(如果key以存在,之前的value将会被覆盖)

    • 获取指定key的值:get key;

    • 追加字符串:append key value;返回字符串长度;(如果key不存在,则存储为新的key)

    • 获取字符串长度:strlen key;

    • 将value数值加一:incr key;返回计算后的值;(如果该值不是数值,将报错;如果key不存在,则自动存储新的key,并初始化为0,然后加一);

    • 将value数值减一:decr key;用法同上;

    • 将value数值加某一具体值:incrby key increment;

    • 将value数值减某一具体值:decrby key increment;

    • 闭区间截取字符串中的某一段:getrange key startIndex endIndex;(下标从0开始,最后一个字符的下标为-1或字符串长度减1)

    • 用新的value覆盖从某一下标开始的字符串:setrange key offset value;

    • 添加新的数据并同时设置生命周期:setex key seconds value;

    • 当key值不存在时添加数据:setnx key value;key值不存在时添加,返回结果1;key值已存在不添加,返回结果0;

    • 批量添加新的数据:mset key1 value1 key2 value2 key3 value3(中间使用空格隔开)

    • 批量获取数据:mget key1 key2 key3 (中间使用空格隔开)

    • 批量添加key不存在的数据:msetnx key1 value1 key2 value2...(所有key都不存在设置成功,只要有一个存在设置失败)

  3. 列表类型:list(key:value1 value2...)有序可重复列表

    • 将一个或多个值依次插入列表的表头:lpush key value1 value2 ...(若该key已存在,将新值追加在原来的列表中)(l:left)

    • 获取列表中指定下标区间的元素:lrange key startIndex endIndex

    • 将一个或多个值依次插入列表的表尾:rpush key value1 value2 ...(若该key已存在,将新值追加在原来的列表中)(r:right)

    • 删除指定列表的表头元素并返回:lpop key;

    • 删除指定列表的表尾元素并返回:rpop key;

    • 获取指定列表中指定下标的元素并返回:lindex key index

    • 获取指定列表的长度:llen key

    • 根据count的值移除列表中的指定的某一些元素:lrem key count value(count>0:从表头开始数前n个;count<0:从表尾开始数前n个;count=0:移除所有跟value相同的元素)【n=count】

  4. 集合类型:set(key:member1 member2...)value无序,并且不能重复

    • 将一个或多个元素添加到指定的集合中:sadd key member1 member2...

    • 获取指定集合中的所有元素:smembers key

    • 判断指定元素在指定集合中是否存在:sismember key member; 存在返回1,不存在返回0;

    • 获取指定集合的长度:scard key

    • 移除指定集合中一个或者多个元素:srem key member1 member2...(不存的元素会忽略)

    • 随机获取指定集合中的n个元素:srandmember key [count];(count不指定,默认为1;count>0:随机获取的数不重复,count<0:随机获取的数可能重复)

    • 从指定集合中随机移除一个或者多个元素:spop key [count](count不指定,默认为1);

    • 从指定集合中移动指定一个元素到另一个集合中:smove source destination member;

    • 返回差集(一个集合中有,其他集合没有):sdiff key key...

    • 返回交集(两个集合共同存在的值):sinter key1 key2...

    • 返回并集(两个集合所有值):sunion key1 key2...

  5. 双列集合:hash(单key:filed-value filed-value...)

    • 将一个或多个键值对存储到指定集合中:hset key filed value ...

    • 获取hash表中指定的filed值:hget key filed;

    • 批量获取hash表中指定的filed值:hmget key filed1 filed2...;

    • 获取指定hash表中的所有filed和value:hgetall key;

    • 删除指定hash表中的一个或者多个filed:hdel key filed1 filed2...

    • 获取指定hash表中所有的filed的个数:hlen key

    • 判断指定hash表中指定的filed是否存在:hexists key filed

    • 获取指定hash表中所有filed的列表:hkeys key;

    • 获取指定hash表中所有value的值:hvals key;

  6. 有序单列集合:zset()value会根据关联的分数进行排序,不能重复

    • 将一个或者多个member及score加入有序集合:zadd key score1 member1 score2 member2 ...

    • 根据指定集合获取指定区间的元素:zrange key startindex endindex

    • 根据指定分数区间获取元素:zrangebyscore key min max

    • 删除指定集合中一个或多个指定元素:zrem key member1 member2...

    • 获取集合中元素的个数:zcard key

    • 获取指定元素的排名:zrank key member(排名从0开始) zrevrank(倒叙排名:从大到小)

    • 获取指定集合中在指定分数区间的元素个数:zcount key min max

    • 获取指定集合中的指定元素的分数:zscore key member

三、回顾Redis的配置文件

  1. 可以在redis.conf中修改配置文件,若使用配置文件中的参数,启动Redis的时候要选择使用配置文件启动,否则使用默认配置启动。(redis-server redis.conf &)

    • port:启动端口,默认6379;

    • bind:客户端连接使用IP,默认本地主机的任意一个IP

  2. 常规配置:

    • loglevel:配置日志级别:开发阶段配置debug,上线阶段配置notice和warning

    • logfile:指定日志文件。使得日志信息输出到指定文件中。

    • databases:配置Redis服务默认创建的数据库实例个数,默认值为16;

  3. 安全配置:(高效性,默认不用密码)

    • requirepass:配置Redis的访问密码,默认不配置密码,即访问不需要密码验证。此配置项需要在protected-mode-yes时起作用,使用密码登录客户端:redis-cli-h ip -p 6379 -a pwd

四、Redis的持久化

Redis提供持久化策略,用一些适当的手段在适当的时机将数据存在磁盘中,每次启动Redis都会自动加载磁盘的数据到内存中。

1、RDB(redis默认持久化策略)

RDB策略:在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发依次持久化操作。

默认策略:【可以通过配置文件中的save <seconds><changes>修改】

  • 1分钟内改变了1万次

  • 5分钟内改变了10次

  • 15分钟内改变了1次

    配置属性:

    save <seconds><changes>:配置持久化策略

    dbfilename:配置redis RDB持久化数据存储的文件

    dir:配置redis RDB持久化文件所在目录

2、AOF

采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的命令。效率较低,redis默认不开启。

appendonly:配置是否开启AOF

appendfilename:配置操作日志文件

3、总结

  1. 如果数据特别重要,可以开启两个策略,但是效率会降低。一般只开启RDB

五、Redis的事务

事务:把一组数据库放在一起执行,保证操作的原子性,要么同时成功,要么同时失败。

redis事务:允许把一组redis命令放在一起,把命令进行序列化,然后执行,可以保证部分原子性。

1、命令

  • multi:用来标记一个事务的开始。

  • exec:用来执行一组已压入的队列。

  • redis事务只能保证部分原子性:

    • 一组数据在开始事务后,压入队列的过程中有其中一条数据出错,则所有事务将会回滚,可以保证事务的原子性。

    • 如果一组命令中,在压入队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其他命令的执行,不能够保证事务的原子性。

  • discard:清除所有压入队列中的命令,并且结束整个事务。

  • watch:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则,正常执行。

  • unwatch:放弃监控所有键

六、redis消息的发布与订阅

redis客户端订阅频道,消息的发布者往频道上发布消息,所有订阅该频道的客户端都会接收到消息。

  1. subscribe:订阅一个或多个频道的消息。

    语法:subscribe ch1 ch2 ch3

  2. publish:将消息发布到指定频道

七、redis的主从复制(集群)

主少从多,主写从读,读写分离,主写同步复制到从。

  1. 搭建一主二从redis集群:

    • 搭建三台redis服务:使用一个redis模拟三台redis服务

    • 提供三份redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf

    • 修改三份配置文件:

      • bind 127.0.0.1

      • port 6379

      • pidfile /var/run/redis-6379.pid

      • logfile "6379.log"

      • dbfilename dump6379.rdb

    • 启动三个redis服务

      • redis-server redis6379.conf &

    • 通过redis客户端分别连接三台redis服务:

      • redis-cli -h 127.0.0.1 -p 6379

      • redis-cli -h 127.0.0.1 -p 6380

      • redis-cli -h 127.0.0.1 -p 6381

    • 查看三台redis服务在集群中的主从角色:

      • info replication ;默认情况下redis服务器都是主机,可以读写操作,没有从机。

    • 每一台服务器写数据,测试三台服务器独立,互补影响。

    • 设置主从关系(6379为主机):主机的数据会自动存到从机上

      • 在6380上执行:slaveof 127.0.0.1 6379

      • 在6381上执行:slaveof 127.0.0.1 6379

    • 全量复制:一旦主从关系设置,主机上的所有数据会自动同步复制到从机。

    • 主写从读,读写分离:在从机上进行写操作,报错;

    • 主机宕机:(模拟命令:redis-cli -h 127.0.0.1 -p 6379 shutdown)

      • 从机原地待命:可以读已有的数据

      • 主机恢复后一切恢复

    • 从机宕机:

      • 主机不连接已宕机的从机,其他从机未受影响。

      • 从机恢复后与主机断开连接,自己默认为一个独立的主机

    • 从机上位:

      • 主机宕机

      • 其中一个从机与主机断开连接,该从机变为主机,然后设置其他从机从属于该主机。

        • slaveof no one

        • slaveof 127.0.0.1 6380

      • 数据位未丢失。

    • 宕机的主机再恢复:(成为一个独立的主机)

      1. 可以作为主机:让其他从机连接(从机的数据不会更新到主机中)

      2. 可以作为从机:连接到其他主机或从机

        小结:一台主机配置多台从机,一台从机又可以配置多台从机,从而形成一个庞大的集群结构。

        减轻了一台主机的压力,但是增加了服务间的延迟时间。

八、哨兵模式

  1. 配置文件

    • 新建配置文件:touch redis_sentinel.conf

    • 打开配置文件:vim redis_sentinel.conf

    • 设置参数:sentinel monitor dc-redis 127.0.0.1 6379 1

      • 指定监控主机的IP地址

      • 设置投票数量为1

    • 启动哨兵服务:

      • redis-sentinel redis_sentinel.conf

    • 主机宕机:哨兵程序自动选择从机上位;

    • 之前的主机恢复:自动从属于新的主机。

原文地址:https://blog.csdn.net/yy12345_6_

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc