redis命令大全--学习笔记(一)

下载可视化管理工具:
先下载vc_redist.x86.exe进行环境配置
下载地址:vc_redist.x86.exe
安装 Redis Desktop Manager
下载地址:redis-desktop-manager-0.9.3.817.exe

1.测试redis服务是否正常启动 ping

2.查看当前数据库的大小 dbsize

3.redis默认是16个数据库,可以通过修改配置文件进行修改dababases size

4.选择数据库 select index

5.清楚当前数据库数据 flushdb

6.操作key相关的命令

  • a.keys pattern 根据 pattern 来查找对应的key(可以使用通配符)
  • b.exists key [key …]b.exists key [key …]判断key是否存在,返回key的数量
  • c.ttl(time to live) key 查看key的剩余时间,单位是秒;返回-1 c.ttl(time to live) key 查看key的剩余时间,单位是秒;返回-1 表示永久,返回-2 表示key不存在,返回其他整数表示剩余存活的秒数
  • d.expire key seconds d.expire key seconds 设置key的过期时间,返回1表示设置成功,返回0表示设置失败
  • e.type key e.type key 查看key存储的数据类型,一共五种类型:string ,list,set,zset,hash;如果key不存在,那么返回none
  • f.del key [key…] 删除key这个键值对,返回删除成功的数量f.del key [key…] 删除key这个键值对,返回删除成功的数量

7.五大数据类型

  • a.string 可以存储字符串,jason,二进制数据,图片
  • b.hash b.hash 适合存储java中的对象,每个hash里面是kv的形式
  • c.list 字符串的有序集合,按照插入顺序,可重复
  • d.set 字符串的无序集合,元素不可重复
  • e.zset 字符串的有序集合,元素不可重复

8.string常用命令

  • a.set key value 创建一个值为string类型的键值对
  • b.get key
    获取一个为key的对应的值,如果key不存在返回nil
  • c.incr key 将key对应的值进行+1,如果key对应的值不是一个数字,那么报错;如果key不存 ,那么创建一个这样的key,值初始化为0,那么+1就会得到1
  • d.decr key 将key对应的值进行-1,如果key对应的值不是一个数字,那么报错;如果key不存在,那么创建一个这样的key,值初始化为0,那么-1就会得到-1
  • e.append key value 追加到key对应的value,返回这个value的长度;如果key不存在,会创建这个kv对,返回这个value的长度
  • f.strlen key 获取key对应value的长度;如果key不存在,那么返回0
  • g.getrange key start end
    根据start和end获取key对应的子串,包括start和end;从左往右下标从0开始,从右往左下表从-1开始(可以理解为每个字符都有两个下标)
  • h.setrange key offset value
    根据offset的位置,用value来替换字串,包括offset;key不存在会用空白字符填充,会创建kv对
  • i.mset key value[key value…] 一次同时创建多个kv对
  • j.mget key [key…]
    一次获取多个value,返回的values是按照key的顺序的,如果key不存在会返回对应的nil;

9.hash常用命令(当hash表里面的没有field,这个key会被删除)

  • a.hmset key field value[field value] 创建一个名为key的hash表,设置多个field和value
  • b.hmget key field [field…] 获取hash名称为key的hash表,指定多个field值来获取对应的value
  • c.hdel key field [field…] 删除一个或者多个hash表字段,返回影响的行数
  • d.hkeys key 列出hash表中所有的field
  • e.hvals key 获取hash表中所有的value
  • f.hlen key 获取hash表中field的个数的长度
  • g.hexists key field 判断key对应的hash表中是否存在field,如果存在返回1,不存在返回0
  • h.hget key field 获取key对应hash表中field的值,如果不存在返回nil
  • i.hgetall key 获取key对应hash表所有field的所有value
  • j.hincrby key field increment(针对整数)
    将key对应的hash表中field属性添加increment(可以±);如果key的hash表不存在,那么创建名称为key的hash表,field不存在也会创建,然后继续执行hincrby操作
  • k.hincrbyfloat key field increment(针对小数)
    将key对应的hash表中field属性添加increment(可以±);如果key的hash表不存在,那么创建名称为key的hash表,field不存在也会创建,然后继续执行hincrby操作

10.list常用命令(当list长度为0时,这个key会被删除)

  • a.lpush key valuevalue… 把value插入key对应有序列表,如果key不存在,那么会创 建一个空集合,并且执行push操作
    lpushx key value 把value插入key对应有序列表,如果key不存在,那么什么也不会操作
  • b.lindex key index
    获取key对应有序列表中index对应的value,index可以为±,相当于每个元素有两个下表
  • c.linsert key before|after pivot value
    将value值插入到pivot这个元素的前面或者后面,如果成功,返回列表的总长度,如果列表不存在,返回0,如果pivot不存在返回-1,如果key不是list类型将会返回错误
  • d.llen key 获取有序列表的长度,如果key不存在,那么当作空列表返回0,如果key不是list类型,那么将会返回错误
  • e.lpop key 移除key对应list的第一个元素,并且返回;如果key没有元素,那么返回nil
  • f.lrange key start stop
    获取start和stop之间索引的值,包括start和stop(start和stop可以为±)
  • g.lrem key count value 删除key中count绝对值个数的value值
    a.count>0,从左到右删除count个value的值
    b.count<0, 从右到左删除count个value的值
    c.count=0, 删除所有value值
  • h.lset key index value 设置下标为index的值,如果下表不存在,或者key不存在,将会出错
  • i.ltrim key start stop 获取key的子list
  • j.rpop key 移除key对应list的最后一个元素,并且返回;如果key没有元素,那么返回nil
  • k.rpush key valuevalue…
    把value插入key对应有序列表,如果key不存在,那么会创建一个空集合,并且执行push操作 rpushx key value
    把value插入key对应有序列表,如果key不存在,那么什么也不会操作
  • l.rpoplpush source des 将source列表最后一个元素移除到des别表第一个元素

11.set常用命令(当set长度为0时,这个key会被删除)

  • a.sadd key member [member…]
    添加到多个memeber到集合中,返回添加的数量;如果存在已经添加的,那么会被忽视;
  • b.smembers key 显示key集合中所有元素
  • c.srem key member [member…] 删除key集合中member元素

12.zset,参考官方文档,命令格式差不多

13.事务常用命令(redis的事务中,除了语法错误会放弃这个事务外,其他情况都是将事务中多个命令依次执行)

  • a.multi 开启事务

  • b.exec 执行事务

  • c.discard 放弃事务(1.当语句有语法错误的时候,整个事务会被放弃执行。2.当对于语句不满足时,可以主动放弃事务)

  • d.watch key [key…]
    监控某个key的值是否改变,当需要进行事务操作的时候,当前事务会监控key值是否改变,如果未改变,那么正常执行事务,否则放弃当前事务的执行

  • e.unwatch 放弃监控

14.redis发布与订阅(这里需要注意模式和频道的区别)

  • a.psubscribe pattern pattern…
    订阅多个pattern匹配到的channel,在匹配到的pattern发送message的时候,会接收到(根据通配符)

  • b.publish channel message 在某个channel发布消息,订阅了的客户端将收到消息

  • c.subscribe channel channel…
    订阅多个指定的channel(根据具体channel名称进行订阅)

  • d.punsub subcommand arg[arg…] 查看订阅与发布的相关信息
    subcommand1.channels pattern(模式) 根据pattern,列出所有匹配的channel
    subcommand2.numsub channelchannel… 返回channel的订阅数量
    subcommand3.numpat 返回pattern的订阅数量

15.数据持久化

  • a.rdb(redis
    database)方式(默认开启的,根据策略自动备份;也可以使用save命令手动备份(会在主线程完成,不会开子进程去做备份的工作,会影响性能)):

    a.在配置文件中配置保存策略 save [seconds] [keyAccount],指定在多少秒内,改变多少个key 的值进行一次备份
    b.配置rdb文件名 dbfilename filename
    c.配置rdb文件存放目录 dir dirName
    (注意:每次将快照写入到磁盘中都是将内存完整的数据写入,不是同步部分数据;如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能)

优势:
1.一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这样非常方便进行备份。比如你可能打算没1天归档一些数据。

2.方便备份,我们可以很容易的将一个一个RDB文件移动到其他的存储介质上

3.RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

4.RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。

劣势:
1.如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。 虽然 Redis 允许你设置不同的保存点(save point)来控制保存 RDB 文件的频率, 但是, 因为RDB 文件需要保存整个据集的状态, 所以它并不是一个轻松的操作。 因此你可能会至少 5 分钟才保存一次 RDB 文件。 在这种情况下, 一旦发生故障停机, 你就可能会丢失好几分钟的数据。

2.每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。 在数据集比较庞大时, fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端;
如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。 虽然 AOF 重写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失。

16 redis主从复制(主服务器负责写操作,从服务器负责读操作,从而实现读写分离):

  • a.redis主从结构的基本配置

a.配置include path,指定redis配置模板
b.配置port [port],指定服务启动端口(覆盖模板中的端口配置)
c.配置dbfilename filename ,指定rdb方式持久化文件名(覆盖模板中rdb文件名)
d.配置logfile filename,配置日志文件名称(覆盖模板中日志文件名)
e.配置daemonize yes/no,配置是否后台启动(覆盖模板中是否后台模式启动配置)
f.配置pidfile filename.pid,指定保存进程号文件名称(覆盖模板中的配置)
g.配置slaveof ip port ,指定主服务的ip和端口,主服务不需要配置

  • b.容灾处理(冷处理)

a.slaveof no one:将从服务器转换为主服务器
b.slaveof [ip] [port]:将服务设置为ip:port的从服务

  • c.哨兵机制(windows,配置sentinel.conf文件)

a.redis-server setinel.conf --sentinel(根据配置文件,启动哨兵服务)
b.配置port 26380 指定sentinel在指定端口启动
c.sentinel monitor mastername 127.0.0.1 6380 2 指定主节点的服务ip,port,名称,确认节点失效的哨兵投票数量
d.sentinel down-after-milliseconds mastername 5000 利用心跳机制,当哨兵发送ping到主服务时,在5000毫秒没收到pong,那么主观认为master下线
e.sentinel config-epoch mastername 12 在故障转移的时候,允许同时多个从服务复杂主服务的个数
f.sentinel leader-epoch master 13 如果在该时间(ms)内未能完成failover操作,则认为该failover失败

17.安全设置

  • a.requirepass foobared 设置密码(auth password客户端验证密码)

  • b.port 6379 设置端口

  • c.bind 192.168.1.100 10.0.0.1 设置允许访问的机器ip

你可能感兴趣的:(redis)