Redis 常用命令的学习

Redis 常用命令的学习

1. 介绍

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

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

Redis 是一个开源(BSD许可的),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。其通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis 支持的键值数据类型如下:

  • 字符串类型:string
  • 哈希类型:hash
  • 列表类型:list
  • 集合类型:set
  • 有序集合类型:sortedset(zset)

2. Redis 的五种数据类型以及操作命令

1. 连接

# 进入redis 所在bin目录
cd /usr/local/bin/

./redis-cli -h 127.0.0.1 -p 8085

auth xxx

2. Redis的key的操作命令

1、keys

语法:keys pattern

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

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

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

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

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

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

语法:move key index

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

语法:ttl key ;

返回值:-1:没有设置生存时间;

​ -2:该key不存在

5、expire:设置key的最大生存时间 (s)

语法:expire key seconds

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

语法:type key

7、rename:重命名指定key

语法:rename key newkey

8、del:删除指定key 和value

语法:del key:删除一个key

​ del key [key key …]:删除多个key

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

9、decrby:减去指定值

语法:decrby key num

10、incrby:增加指定值

语法:incrby key num

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

字符串类型是Redis 最进出的数据结构,其他的几种数据结构都是在字符串类型基础上构建的,字符串的值可以是:字符串、数字、二进制,但其值最大不能超过512M。

使用场景:缓存、计算器、对象存储缓存(共享session)、限速

常用命令

  1. 添加数据:set key value;(如果key存在,之前的value革囊会被覆盖)
  2. 仅当key不存在时进行set:setnx key value
  3. 获取指定key 的值:get key;
  4. 追加字符串:append key value; 返回字符串长度;(如果key 不存在,则存储为新的key)
  5. 获取字符串长度:strlen key;
  6. 将value 数值加一:incr key;返回计算后的值 ;(如果该值不是数值,将报错;如果key 不存在,则自动存储新的key,并初始化为0,然后加一);
  7. 将value数值减一:decr key;用法同上;
  8. 将value数据加某一具体值:incrby key increment;
  9. 将value数值减某一具体值:decrby key increment;
  10. 闭区间截取字符串中的某一段:getrange key startIndex endindex; (下标从0开始,最后一个字符的下标为-1 或字符串长度减1)
  11. 用新的value 覆盖从某一下标开始的字符串:setrange key offset value ;
  12. 添加新的数据并同时设置生命周期:setex key seconds value;
  13. 当key 值不存在时添加数据:setnx key value; key值不存在时添加,返回结果1;key 值已存在不添加,返回结果0;
  14. 批量添加新的数据:mset key1 value1 key2 value2 key3 value3(中间使用空格隔开)
  15. 批量获取数据:mget key1 key2 key3 (中间使用空格隔开)
  16. 批量添加key 不存在的数据:msetnx key1 value1 key2 value2… (所有key都不存在设置成功,只要有一个存在设置失败)

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

Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),也可以获取指定范围指定下表的元素等。一个列表最多可以包含2^32 -1个元素(4284967285,每个列表超过40亿个元素)

两个特点

  1. 列表中的元素是有序的,可以通过索引下标获取某个元素或某个范围内的元素列表
  2. 列表中的元素可以是重复的

使用场景:消息队列、栈、文章列表等。

常用命令

  1. 将一个或多个值依次插入列表的表头:Ipush key value1 value… (若该key已存在,将新值追加在原来的列表中)(l:left)
  2. 获取列表中指定下表区间的元素:lrange key startIndex endIndex
  3. 将一个或多个值依次插入列表的表尾:rpush key value1 value2… (若该key已存在,将新值追加在原来的列表中)(r:right)
  4. 删除指定列表的表头元素并返回:lpop key;
  5. 删除指定列表的表尾元素并返回:rpop key;
  6. 获取指定列表中指定下标的元素并返回:lindex key index
  7. 获取指定列表的长度:llen key
  8. 根据count 的值一处列表中的指定的某一些元素:lrem key count value (count>0:从表头开始数前n个;count<0:从表尾开始数前n个;count=0:移除搜友跟value相同的元素)【n=count】

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

Redis 的Set 是string 类型的无序集合,我们不能通过索引获取元素。集合成员是唯一的,这就意味这集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为2^32 -1(4284967295,每个集合可存储40多亿个成员)。

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

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

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

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

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

  6. 随机获取指定集合中的n个元素:srandmember key [count] (count不指定,默认为1;

    count>0:随机获取的数不重复,count<0:随机获取的数可能重复)

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

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

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

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

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

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

Redis 中hash 是一个string 类型的field 和value 的映射表 value={ {field1,value1},{field2,value2}…},可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。

应用场景:用户信息缓存

  1. 将一个或多个键值对存储到指定集合中:hset key filed value…
  2. 获取hash 表中指定的filed值:hget key filed;
  3. 批量获取hash 表中指定的filed值:hmget key filed1 filed2…;
  4. 获取指定hash 表中的搜友filed和value:hgetall key;
  5. 删除指定hash表中的一个或者多个filed:hdel key filed1 filed2…
  6. 获取指定hash表中所有的filed 的个数:hlen key
  7. 判断指定hash表中指定的filed 是否存在:hexists key filed
  8. 获取指定hash表中所有filed的列表:hkeys key;
  9. 获取指定hash表中所有value 的值:hvals key;

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

在有序集合中保留了不能有重复成员的特性,但其中的成员是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis 正是通过分数来为集合中的成员进行从小到大的排序。

应用场景:排行榜系统,成绩单,工资表

常用命令

  1. 将一个或者多个member及score加入有序集合:zadd key score1 member1 score2 member2 …
  2. 根据指定集合获取指定区间的元素:zrange key startindex endindex
  3. 根据指定分数区间获取元素:zrangebyscore key min max
  4. 删除指定集合中一个或多个指定元素:zrem key member1 member2…
  5. 获取集合中元素的个数:zcard key
  6. 获取指定元素的排名:zrank key member(排名从0 开始)zrevrank(倒叙排名:从大到小)
  7. 获取指定集合中在指定分数区间的元素个数:zcount key min max
  8. 获取指定集合中的指定元素的分数:zscore key member

3. Redis 的配置文件

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

1. port:启动端口,默认6379;

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

2、常规配置:

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

2. logfile:指定日志文件。是的日志信息输出到指定文件中。
3. databases:配置Redis服务默认创建的数据库实例个数,默认值为16;

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

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

4. Redis 的持久化

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

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

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

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

  • 1分钟内改变了1万次
  • 5分钟内改变了10次
  • 15分钟内改变了1次

配置属性:

​ save :配置持久化策略

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

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

2、AOF

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

appendonly:配置是否开启AOF

appendfilename:配置操作日志文件

3、总结

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

5.Redis 的事务

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

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

1、命令

  • multi:用来标记一个事务的开始。
  • exec:用来执行一组已压入的队列。
  • redis 事务只能保证部分原子性:
    • 一组数据在开始事务后,压入队列的过程中有其中一条数据出错,则所有事务将会回滚,可以保证事务的原子性。
    • 如果一组命令中,在压入队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其他命令的执行,不能够保证事务的原子性。
  • discard:清楚所有压入队列中的命令,并且结束整个事务。
  • watch:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本十五放弃执行;否则,正常执行。
  • unwatch:放弃监控所有键

6.redis 消息的发布与订阅

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

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

​ 语法:subscribe ch1 ch2 ch3

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

7.redis 的主从复制(集群)

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

1.搭建1主2从redis集群:

1. 搭建三台redis服务:使用一个redis模拟三台redis服务
2. 提供三分redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf
3. 修改三份配置文件:
  	1. bind 127.0.0.1
  	2. port 6379
  	3. pidfile /var/run/redis-6379.pid
  	4. logfile "6379.log"
  	5. dbfilename dump6379.rdb
  1. 启动三个redis 服务

    1. redis-server redis6379.conf &
    2. ps -ef |grep redis
  2. 通过redis 客户端分别连接三台redis 服务:

    1. redis-cli -h 127.0.0.1 -p 6379
    2. redis-cli -h 127.0.0.1 -p 6380
    3. redid-cli -h 127.0.0.1 -p 6381
  3. 查看三台redis 服务在集群中的主从角色:

    1. info replication:默认情况下 redis 服务器都是主机,可以读写操作,没有从机。
  4. 每一台服务器写数据,测试三台服务器独立,互补影响。

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

    1. 在6380上执行:slaveof 127.0.0.1 6379
    2. 在6381上执行:slaveod 127.0.0.1 6379
    3. 在6379上查看:info replication
  6. 全量复制:一旦主从关系设置,主机上的所有数据会自动同步复制到从机。

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

    如在6381上执行:set ke 2

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

    1. 从机原地待命:可以读已有的数据
    2. 主机恢复后一切恢复
  9. 从机宕机:

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

      如在6379上执行:info replication

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

    # 模拟宕机
    redis-cli -h 127.0.0.1 -p 6380 shutdown
    # 重启
    redis-server redis6380.conf &
    # 连接
    redis-cli -h 127.0.0.1 -p 6380
    # 查看主从角色
    info replication
    
  10. 从机上位:

    1. 主机宕机
    2. 其中一个从机与主机断开连接,该从机变为主机,然后设置其他从机从属于该主机。
      1. slaveof no one
      2. slaveof 127.0.0.1 6380
    3. 数据未丢失。
  11. 宕机的主机再恢复:(成为一个独立的主机)

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

在这里插入图片描述

小结:

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

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

8.哨兵模式

  1. 配置文件
    1. 新建配置文件:touch redis_sentinel.conf
    2. 打开配置文件:vim redis_sentinel.conf
    3. 设置参数:sentinel monitor dc_redis 127.0.0.1 6379 1
      1. 指定监控主机的IP地址
      2. 设置投票数量为1
    4. 启动哨兵服务:
      1. redis-sentinel redis_sentinel.conf
    5. 主机宕机:哨兵程序自动选择从机上位;
    6. 之前的主机恢复:自动从属于新的主机。

9. 服务器相关命令

  • ping:检测连接是否存活
  • echo:在命令行打印一些内容
  • quit、exit:退出客户端
  • shutdown:退出服务器端
  • info:返回redis相关信息
  • config get dir/* 实时传递接受的请求
  • showlog:显示慢查询
  • select n :切换到数据库n,redis 默认有16个数据库(DB 0 ~DB 15),默认使用第0个
  • dbsize:查看当前数据库大小
  • move key n :不同数据库之间数据是不能互通的,move 移动键到指定数据库
  • flushdb:清空当前数据库中的键值对。
  • flushall:清空所有数据库的键值对。

10.key 相关命令

在redis 中无论什么数据类型,在数据库中都是以key-value 形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。

常用命令

  • keys * :查看当前数据库中所有的key
  • dbsize:键总数
  • exists key:检查键是否存在
  • del key [key …]:删除键
  • expire key seconds:设置键过期
  • ttl key :获取键的有效时长
  • persist key:移除键的过期时间
  • type key :键的数据结构类型
  • randomkey:随机返回数据库中的一个键
  • rename key1 key2:重命名
  • renamex key1 key2:当key2 不存在时,key1 重命名

猜你喜欢

转载自blog.csdn.net/weixin_45866849/article/details/127069656