翼度科技»论坛 编程开发 .net 查看内容

01.Redis常用的一些命令

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
简介:
Redis是一款开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存也可持久化的日志型、Key-Value高性能数据库。Redis与其他Key-Value缓存产品相比有以下三个特点:

  • 支持数据持久化,可以将内存中的数据保存在磁盘中,重启可再次加载使用


  • 支持简单的Key-Value类型的数据,同时还提供Str、List、Set、Zset、Hash等数据结构的存储


  • 支持数据的备份,即Master-Slave模式的数据备份
  • NoSQL数据库
优势:

  • 读速度为110000次/s,写速度为81000次/s,性能极高


  • 具有丰富的数据类型


  • Redis所有操作都是原子的,意思是要么成功执行要么失败完全不执行,多个操作也支持事务


  • 丰富的特性,比如Redis支持publish/subscribe、notify、key过期等
Windows Redis安装

下载:
  1. https://github.com/microsoftarchive/redis/releases
复制代码
启动服务器:
  1. redis-server redis.windows.conf   #进入到解压补录
  2. redis-server --service-install redis.windows.conf   #redis作为windows服务启动方式
复制代码
关闭服务器:
  1. redis-server --service-stop
复制代码
启动客户端
  1. redis-cli
  2. redis-cli -h ip -p 端口 -a 密码
复制代码
关闭客户端:
  1. redis-cli -p 端口号 shutdown
复制代码
Linux Redis安装

下载:
  1. wget http://download.redis.io/releases/redis-5.0.7.tar.gz
复制代码
解压:
  1. tar xzf redis-5.0.7.tar.gz
复制代码
放到/usr/local目录下面:
  1. mv ./redis-5.0.7/* /usr/local/redis/
复制代码
进入redis目录:
  1. cd /usr/local/redis/
复制代码
生成:
  1. sudo make
复制代码
测试:
  1. sudo make test
复制代码
安装:
  1. sudo make install
复制代码
Mac Redis安装


下载:
  1. http://download.redis.io/releases/redis-5.0.7.tar.gz
复制代码
解压:
  1. tar zxvf redis-4.0.10.tar.gz
复制代码
编译测试:
  1. sudo make test
复制代码
编译安装
  1. sudo make install
复制代码
 
 
redis.conf 常用配置:
配置作用默认
bind只有bind指定的ip可以直接访问Redis,这样可以避免将Redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程访问Redis
如果bind选项为空或0.0.0.0的话,那会接受所有来自于可用网络接口的连接
127.0.0.1
protected-modeprotected-mode是Redis3.2之后的新特性,用于加强Redis的安全管理,当满足以下两种情况时,protected-mode起作用:
 bind未设置,即接收所有来自网络的连接
密码未设置
当满足以上两种情况且protected-mode=yes的时候,访问Redis将报错,即密码未设置的情况下,无密码访问Redis只能通过安装Redis的本机进行访问
yes
portRedis访问端口,由于Redis是单线程模型,因此单机开多个Redis进程的时候会修改端口,不然一般使用大家比较熟悉的6379端口就可以了6379
timeout指定在一个client空闲多少秒之后就关闭它,0表示不管0
daemonize指定Redis是否以守护进程的方式启动no
pidfile当Redis以守护进程的方式运行的时候,Redis默认会把pid写到pidfile指定的文件中/var/run/redis_6379.pid
loglevel指定Redis的日志级别,Redis本身的日志级别有notice、verbose、notice、warning四种,按照文档的说法,这四种日志级别的区别是:
debug,非常多信息,适合开发/测试
verbose,很多很少有用的信息(直译,读着拗口,从上下文理解应该是有用信息不多的意思),但并不像debug级别这么混乱
notice,适度的verbose级别的输出,很可能是生产环境中想要的
warning,只记录非常重要/致命的信息
notice
logfile配置log文件地址,默认打印在命令行终端的窗口上""
databases设置Redis数据库的数量,默认使用0号DB16
save把Redis数据保存到磁盘上save 900 1
save 300 10
save 60 10000
requirepass设置客户端认证密码关闭
maxclients设置同时连接的最大客户端数量,一旦达到了限制,Redis会关闭所有的新连接并发送一个"max number of clients reached"的错误关闭,默认10000
maxmemory不要使用超过指定数量的内存,一旦达到了,Redis会尝试使用驱逐策略来移除键 如果1G内存可以设置256-512之间 需要转换字节关闭
 
 
Redis 常用命令:

  • 切换数据库
    1. select index    #select 1 、 select 2
    复制代码
  • 清空数据库
    1. flushdb
    复制代码
  • 查看所有key
    1. keys *
    复制代码
  • 删除key
    1. del key
    复制代码
  • 判断key是否存在
    1. exists key               #返回1表示存在,0表示不存在
    复制代码
  • 设置key过期时间
    1. expire key seconds      #expire key名为name 100秒
    复制代码
  • 查看过期时间
    1. ttl  key                 #ttl name
    2. 返回值
    3. -1 代表永久
    4. -2 无效
    复制代码
  • 移除过期时间,让key永久有效
    1. persist key             #persist name   返回-1,表示永久
    复制代码
  • 通配符查找key
    1. keys pattern
    2. * 代表任意字符
    3. ?代表一个字符
    复制代码
  • 返回一个随机的KEY
    1. randomkey
    复制代码
  • 修改key的名字
    1. rename key newkey
    复制代码
  • 把key移动到指定数据库
    1. move key db
    复制代码
  • 查看KEY类型
    1. type key
    复制代码
     
    1. [/code]
    2. [/list][b]str数据结构常用命令[/b]
    3. 设置指定 key 的值
    4. [code]set key value
    复制代码
    获取指定 key 的值
    1. get key
    复制代码
    只有在 key 不存在时设置 key 的值
    1. setnx key value
    复制代码
    返回 key 中字符串值的截取字符串
    1. getrange key start end     #getrange name 0 3
    复制代码
    取出指定key的值,在赋值
    1. getset key value
    复制代码
    返回 key 所储存的字符串值的长度
    1. strlen key
    复制代码
    将 key 中储存的数字值加一
    1. incr key
    复制代码
    将 key 中储存的数字值减一
    1. decr key
    复制代码
    将 key 所储存的值加上给定的增量值
    1. incrby key increment       #incrby age 10  加10
    复制代码
     
    1.  
    复制代码
     Hash数据结构常用命令

    将哈希表 key 中的字段 field 的值设为 value
    1. hset key field value         #hset user:1 age 12
    复制代码
    获取存储在哈希表中指定字段的值
    1. hget key field              #hget user:1 age
    复制代码
    同时将多个 field-value (域-值)对设置到哈希表 key 中
    1. hmset key field1 value1 [field2 value2 ]        #hmset user:2 name zhansan age 12
    复制代码
    获取所有给定字段的值
    1. hmget key field1 [field2]                       #hmget user:2 name  或  hmget user:2 name age
    复制代码
    获取指定key所有field-value
    1. hgetall key                      #hgetall user:2
    复制代码
    获取指定key所有的field
    1. hkeys key                       #hkeys user:2
    复制代码
    获取指定key的field数量
    1. hlen key
    复制代码
    删除一个或多个哈希表字段
    1. hdel key field1 [field2]       #hdel user:2 name
    复制代码
    为哈希表 key 中的指定字段的整数值加上增量 increment
    1. hincrby key field increment      #hincrby user:2 age 1
    复制代码
    查看哈希表 key 中,指定的字段是否存在
    1. hexists key field  # 不存在返回0  存在返回1
    复制代码
     
     list数据建构常用命令

    应用场景:消息队列、分页文章列表
    在左侧插⼊数据
    1. lpush key value1 value2 ...    #lpush mylist 1 2 3  返回的是 3 2 1
    复制代码
    在右侧插⼊数据
    1. rpush key value1 value2 ...
    复制代码
    获取数据
    1. lrange key start stop
    复制代码
    设置指定索引位置的元素值
    1. lset key index value
    复制代码
    获取列表长度
    1. llen key
    复制代码
    根据索引获取值
    1. lindex key index
    复制代码
    从左侧删除默认删除一个
    1. lpop key
    复制代码
    从右侧删除默认删除一个
    1. rpop key
    复制代码
    让列表只保存指定区间的元素
    1. ltrim key start stop
    复制代码
    在列表的元素前或者后插入元素
    1. linsert key BEFORE|AFTER pivot value
    复制代码
    删除指定元素
    1. lrem key count value
    复制代码
     
     set数据建构常用命令

    Redis中的set是无序的集合,元素类型是string,元素具有唯一性,不能重复,元素不能修改。
    应用场景:通过交集、并集、差集找到爱好相同与不同的人
    添加元素
    1. sadd key member1 member2 ...
    复制代码
    返回所有元素
    1. smembers key
    复制代码
    获取集合的元素的数量
    1. scard key
    复制代码
    判断 member 元素是否是集合 key 的成员
    1. sismember key member
    复制代码
    返回随机元素
    1. srandmember key count
    复制代码
    删除指定元素
    1. srem key field
    复制代码
    移除并返回集合中的一个随机元素
    1. spop key
    复制代码
    将 member 元素从 source 集合移动到 destination 集合
    1. smove source destination member
    复制代码
    差集
    1. sdiff key1 [key2]
    2. #返回给定所有集合的差集并存储在 destination 中
    3. sdiffstore destination key1 [key2]
    复制代码
    交集
    1. sinter key1 [key2]
    2. #返回给定所有集合的交集并存储在 destination 中
    3. sinterstore destination key1 [key2]
    复制代码
    并集
    1. sunion key1 [key2]
    2. #所有给定集合的并集存储在 destination 集合中
    3. sunionstore destination key1 [key2]
    复制代码
     
     Zset数据建构常用命令

    Redis中的zset是有序的集合,元素类型是string,元素具有唯一性,不能重复,元素不能修改。
    每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
    应用场景:排行榜系统
    添加元素
    1. zadd key score1 member1 score2 member2 ...      #zzadd zmm 7 zs 8 ls 8 ww 9 zl
    复制代码
    获取元素
    1. zrange key start stop           #zrange 0-1
    复制代码
    计算在有序集合中指定区间分数的成员数
    1. zcount key min max        
    复制代码
    获取有序集合的成员数
    1. zcard key
    复制代码
    返回有序集合中指定成员的索引
    1. zrank key member
    复制代码
    返回有序集中指定区间内的成员,通过索引,分数从高到低
    1. zrevrange key start stop [WITHSCORES]
    复制代码
    删除指定元素
    1. zrem key member1 member2 ...
    复制代码
    移除有序集合中给定的分数区间的所有成员
    1. zremrangebyscore key min max
    复制代码
    移除有序集合中给定的排名区间的所有成员
    1. zremrangebyrank key start stop
    复制代码
     
     Redis的发布订阅

    订阅
    1. subscribe 频道名称 [频道名称 ...]
    复制代码
    发布
    1. publish 频道 消息
    复制代码
    取消订阅
    1. unsubscribe 频道名称 [频道名称 ...]
    复制代码
     
     Redis的事务

    Redis事务就是一次按照顺序执行多个命令,Redis事务有两个特点:

    • 按顺序执行,不会被其他客户端的命令打断
    • 原子操作,要不不执行、要不全执行(业务报错问题除外)
    命令

      MULTI标记一个事务开始EXEC执行事务DISCARD取消事务WATCH监听KEY,如果KEY在事务执行前被改变,事务取消执行UNWATCH取消监听KEY
    1. set user:A 100    #用户A100
    2. set user:B 50     #用户B50<br>watch user:A      #监听用户A<br>
    3. umlyi                  #开启事务
    4. decrby user:A 50       #用户A减去50
    5. incrby user:B 50       #用户B加50
    6. get user:A             #查看
    7. get user:B
    8. exec                   #执行
    复制代码
     
    Redis持久化

    提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF。
    RDB优点:
    1. 1.体积更小:相同的数据量rdb数据比aof的小,因为rdb是紧凑型文件
    2. 2.恢复更快:因为rdb是数据的快照,基本上就是数据的复制,不用重新读取再写入内存
    3. 3.性能更高:父进程在保存rdb时候只需要fork一个子进程,无需父进程的进行其他io操作,也保证了服务器的性能。
    复制代码
     
    RDB缺点:
    1. 1.故障丢失:因为rdb是全量的,我们一般是使用shell脚本实现30分钟或者1小时或者每天对redis进行rdb备份,(注,也可以是用自带的策略),<br>  但是最少也要5分钟进行一次的备份,所以当服务死掉后,最少也要丢失5分钟的数据。
    2. 2.耐久性差:相对aof的异步策略来说,因为rdb的复制是全量的,即使是fork的子进程来进行备份,当数据量很大的时候对磁盘的消耗也是不可忽视的,<br>  尤其在访问量很高的时候,fork的时间也会延长,导致cpu吃紧,耐久性相对较差。
    复制代码
     
    AOF优点:
    1. 1.数据保证:我们可以设置fsync策略,一般默认是everysec,也可以设置每次写入追加,所以即使服务死掉了,咱们也最多丢失一秒数据
    2. 2.自动缩小:当aof文件大小到达一定程度的时候,后台会自动的去执行aof重写,此过程不会影响主进程,重写完成后,新的写入将会写到新的aof中,<br>  旧的就会被删除掉。但是此条如果拿出来对比rdb的话还是没有必要算成优点,只是官网显示成优点而已。
    复制代码
     
    AOF缺点:
    1. 1.性能相对较差:它的操作模式决定了它会对redis的性能有所损耗
    2. 2.体积相对更大:尽管是将aof文件重写了,但是毕竟是操作过程和操作结果仍然有很大的差别,体积也毋庸置疑的更大。
    3. 3.恢复速度更慢:
    复制代码
     
     Redis的过期策略

    我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。
    过期策略通常有以下三种:

    • 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
    • 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
    • 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。 (expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。)
    Redis中同时使用了惰性过期和定期过期两种过期策略。
    Redis的内存淘汰策略

    Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。

    • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
    • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
    • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
    • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
    • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
    • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
    总结

    Redis的内存淘汰策略的选取并不会影响过期的key的处理。内存淘汰策略用于处理内存不足时的需要申请额外空间的数据;过期策略用于处理过期的缓存数据。
       
    主从复制

    在数据为王的时代,数据的安全是显得尤为重要,数据我们可能要复制多份。
    在网络时代,数据一般的特点是一次上传,多次读取,也就是需要我们实现读写分离。
    上面这两个功能,我们都可以用Redis的主从复制来解决。

     

    • 一个master可以拥有多个slave,一个slave又可以拥有多个slave。
    • 数据在自动从master端复制到slave端
    • master用来写数据,slave用来读数据,来实现读写分离
     
    配置

    复制出一份配置文件
    1. cp redis.conf redis.slave.conf
    复制代码
    编辑配置文件redis.slave.conf
    1. port 6380
    2. replicaof 127.0.0.1 6379
    复制代码
    启动redis
    1. redis-server redis.slave.conf
    复制代码
    查看主从关系
    1. redis-cli -h ip info Replication
    复制代码
    进入主端
    1. redis-cli -h 127.0.0.1 -p 6379
    复制代码
    写入数据
    1. set name master
    复制代码
    进入从端
    1. redis-cli -h 127.0.0.1 -p 6380
    复制代码
    取出数据
    1. get name
    复制代码
     
     Redis集群

    Redis集群采用无中心结构,每个节点都保存数据和整个集群状态。每个节点都和其他所有节点连接。Redis集群模式通常具有 高可用可扩展性分布式容错等特点。
    集群模型

     

     
    配置

    新建文件夹redis-cluster
    1. mkdir redis-cluster
    复制代码
    在文件夹下新建7001、7002、7003、7004、7005、7006文件夹,在每个新文件夹下都创建一个文件:redis.conf
    1. port 7001  # 需要更换
    2. bind 127.0.0.1  # 不同机器换不同ip
    3. daemonize yes
    4. pidfile 7001.pid  # 需要更换
    5. cluster-enabled yes
    6. cluster-config-file 7001_node.conf  # 需要更换
    7. cluster-node-timeout 15000
    8. appendonly yes
    复制代码
    不同的文件夹下的配置文件,port、pidfile、cluster-config-file 7001_node.conf 值是不一样,依次排列。然后这个bind我现在是一台机器,如果两台机器,可以让一台绑定三个。
    依次启动每个文件夹下的配置文件
    1. redis-server 7001/redis.conf
    复制代码
    执⾏集群
    1. redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
    复制代码
    连接集群
    1. redis-cli -c -h 127.0.0.1 -p 7001
    复制代码
    集群知识


    • redis cluster在设计的时候,就考虑到了去中⼼化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
    • Redis集群没有并使⽤传统的⼀致性哈希来分配数据,⽽是采⽤另外⼀种叫做哈希 槽 (hash slot)的⽅式来分配的。redis cluster 默认分配了 16384 个 slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。
    • Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节 点获取数据。 只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master
    • 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了
     

    来源:https://www.cnblogs.com/MingQiu/p/18277660
    免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具