设为首页 收藏本站
查看: 1637|回复: 0

[经验分享] Redis 学习(配置文件和常用命令注释)

[复制链接]

尚未签到

发表于 2018-11-7 07:03:35 | 显示全部楼层 |阅读模式
  Redis 学习(配置文件和常用命令注释)
  最近公司需要上线一个新的业务需要使用到redis,我也趁这个机会学习了下redis,了解了redis的安装、配置、常用命令、以及怎么监控redis;我学习redis主要的是参考两本书《Redis入门指南》《Redis实战(红丸出品)》,这两本书从最基础的开始讲redis。在这里我总结了下我在学习过程中的一些信息,对配置文件和常用命令进行了详细的注释,以备以后使用。
  Redis 学习(Redis Info详细注释):
  http://54snow.blog.51cto.com/2690157/1537464
  Redis 学习(Zabbix 监控Redis):
  http://54snow.blog.51cto.com/2690157/1537482
  ===========================================================================================
  redis配置文件详细注释(redis.conf)
  daemonize   yes
  默认redis不在后台运行,如果需要在后台运行,请将该值改为yes
  pidfile     pidfilepath
  pid文件路径,默认是/var/run/reids.pid;如果运行多个实例,则需要指定不同端口和不同的pid文件
  bind
  指定reids只接受来自该ip地址的请求,默认接受所有请求,生产环节最好设置该项
  port 6379
  redis监听端口,默认为6379;运行多个实例时配置不同的端口
  timeout 0
  客户端连接超时时间,单位为秒,默认为0;
  loglevel
  log等级分为4级,debug、verbose、notice、warning;生产环境一般开始notice
  logfile
  配置log文件地址,默认使用标准输出,即打印在命令行终端
  databases 16
  设置数据库个数,可以使用select 命令来切换数据库,默认使用数据库为0;默认数据库个数为16
  save
  设置redis进行数据库镜像的频率
  save 900 1
  save 300 10
  save 10000 1
  stop-writes-on-bgsave-error yes
  当持久化出现错误时是否还提供写功能
  rdbcompression
  在进行镜像备份时,是否进行压缩,一般设置为yes
  dbfilename
  镜像备份文件的文件名,默认为dump.rdb
  dir
  数据库镜像备份文件放置路径;给文件名分开是因为镜像备份时先写一个临时文件,等备份完成后用临时文件替换上面指定的文件
  slaveof masterip masterport
  设置该数据为其他数据库的从库
  slave-serve-stale-data yes
  当slave和master断开连接后,或者正当数据正在复制传输的时候是否接受客户端的请求
  slave-read-only yes
  从服务器是否只读
  slave-priority 10
  当有多个从库的时候,当master宕机的时候,Redis Sentinel会将权重值最小的设置master,0表示永远不提升
  masterauth
  指定主数据库连接需要的密码(主数据开启了密码验证)
  requirepass
  设置客户端连接的密码
  maxclients
  限制同时连接的客户端数据,当超过这个值时,redis不在接受其他连接请求并返回error信息
  maxmemory
  设置redis能够使用的最大内存,内存满了之后,redis将先尝试提出设置过expire信息的key
  maxmemory-policy volatile-lru
  当redis最大使用内存后,内存清理策略,默认为volatile-lru
  maxmemory-samples 3
  reids内存清理策略随机样本数,默认为3
  appendonly yes
  开始redis的AOF持久化
  appendfsync
  设置对appendon.aof 文件进行同步的频率
  always  每次有写操作都进行同步,安全但最慢
  everysec 每秒一次,相对安全又兼顾了性能
  no 根据系统设置,默认每30秒写一次
  lua-time-limit 5000
  一个lua脚本执行的最长时间,0或负数表示无限制
  vm-enabled
  是否开启虚拟内存支持
  vm-swap-file
  设置虚拟内存的交换文件路径
  vm-max-memory
  设置开启虚拟内存后redis将使用的最大物理内存,默认为0即不限制,生产环节最好根据实际情况设置该值
  vm-page-size
  设置虚拟内存的页大小,如果value值比较大就需要设置较大一点
  vm-pages
  设置交换文件总得page数量,page table信息会放在物理内存中,总得虚拟内存大小 = vm-page-size *vm-pages
  mv-max-threads
  设置VM IO同时使用的线程数据,如果vlaue值比较大将该值设稍大一点,还是能够提升性能
  glueoutputbuf
  把小的输出缓存放在一起;常设置为yes
  hash-max-zipmap-entries
  设置hash数据结构指定元素个数且最大元素的临界点
  activerehashing
  设置为yes,以便尽快的释放内存
  注:这并不是所有的配置项,这是我根据我了解的进行了个人理解的注释,仅供参考
  ===========================================================================================
  常用类型命令注释之string类型及操作
  set
  设置key对应的值为string类型的value
  setnx
  设置key对应的值为string类型的value,如果key存在则不进行操作,返回0
  setex
  设置key对应的值为string类型的value,并对此键值设置对应的有效期
  setrange
  设置key的value值的子字符串(个人理解为键值的替换)
  setrange name 8 gmail.com
  将name键的键值从下标为8的字符开始替换为gmail.com
  mset
  一次设置多个key的值,返回ok表示所有值都设置成功,返回0表示所有值都设置失败
  msetnx
  一次设置多个key的值,ok则所有值都设置成功,不会覆盖已经存在的key
  get
  获取key对应的string值,key不存在则返回nil
  getset
  设置key的值,并返回key的旧值
  getrange
  获取指定key的value值的字符串
  getrange name 0 6
  获取name的键值下标从0到6部分的值
  mget
  一次获取多个key的值,key不存在则对应返回nil
  incr
  对key的值做加加操作,并返回新的值;如果value不是int类型则会报错,如果key不存在,则该key的键值为1
  incrby
  可以指定增加的值,如果key不存在,则默认认为key的value为0
  incrby age 5
  将age的value值一次性增加5
  decr
  对key的值做减减操作,key不存在则设置key的值为-1
  decrby
  可以指定减的值,跟incrby相反
  append
  给指定key的字符串值最佳value,返回新字符串值的长度
  strlen
  取指定key的value值的长度
  ===========================================================================================
  常用类型命令注释之hashes类型及操作
  hset
  设置hash 字典指定值,key不存在则创建
  hset myhash field hello
  hsetnx
  设置hash field为指定的值。如果key不存在则先创建,如果key存在则返回0
  hmset
  同时设置多个field
  hmset myhash field1 hello field2 world
  hget
  获取自定hash field,字段不存在返回nil
  hmget
  获取多个的hash field
  hmget myhash field1 field2
  hincrby
  给指定hash field加上指定的值
  hexists
  测试field是否存在
  hlen
  返回指定hash的field数量
  hlen myhash
  hdel
  删除指定field,返回的是删除后的field数量
  hkeys
  返回所有hash的field
  hvals
  返回hash所有的value
  hgetall
  获取某个hash中全部的field以及value
  ===========================================================================================
  常用类型命令注释之list类型及操作
  lpush
  在key对应list的头部添加字符串元素(从列表左边插入)
  rpush
  在key对应list的尾部添加字符串元素(从列表右边插入)
  linsert
  在key对应list的特定位置之前或者之后添加字符串元素
  linsert mylist before world there
  before 在特定位置之前插入
  after  在特定位置之后插入
  lset
  设置list中制定下标元素值
  lset mylist 2 car
  lrem
  从key对用list中删除count个和value相同的元素
  lrem mylist 2 hello
  从mylist列表中删除2个与hello相同的元素
  count > 0  从头到尾删除
  count < 0  从尾到头删除
  count = 0  删除全部
  ltrim
  保留制定key的值范围内的数据
  ltrim mylist 0 3
  lpop
  从list头部删除元素,并返回删除的元素
  rpop
  从list尾部删除元素,并返回删除的元素
  rpoplpush
  从第一个list尾部一处元素并添加到第二个list的头部,最后返回被移植的元素,如果第一个list不存在或空返回nil
  rpoplpush mylist1 mylist2
  lindex
  返回list中index位置的元素
  lindex mylist 1
  返回mylist中下标为1的元素(从0计数)
  llen
  返回list的长度
  ===========================================================================================
  常用类型命令注释之sets类型及操作
  sadd
  向set中添加元素
  srem
  删除set中的元素
  spop
  随机删除一个set中的元素并返回删除元素
  sdiff
  返回第二个set和第一个set的差集
  sidff set1 set2
  返回set2与set1的差集(也就是在set2中但不在set1中的元素)
  sidffstore
  返回第二个set与第一个set的差集,并将结果保存为另一个set
  sdiffstore set1 set2 set3
  返回set2与set1的差集,并将结果保存到set3中
  sinter
  返回给定key的交集
  sinter set1 set2
  sinterstore
  返回给定key的交集,并将结果存为另一个key
  sinterstore set1 set2 set3
  sunion
  返回给定key的并集
  sunionstore
  返回给定key的并集,并将结果存为另一个key
  smove
  从第一个set中移除元素并添加到第二个set中
  smove set1 set2 car
  从set1中移除car,并将car添加到set2中
  scard
  返回set的元素个数
  sismember
  判断元素是否在set中,返回0表示不存在,1表示存在
  sismember set two
  判断two是否在set中
  srandmember
  随机返回一个set中的元素,但不删除
  ===========================================================================================
  常用类型命令注释之sorted set类型及操作
  zadd
  向sorted set中添加元素,score用于排序,如果元素存在则更小score
  zadd myzset 1 one
  zrem
  删除zset中的元素
  zrem myzset two
  zincrby
  想zset中添加元素,如果元素存在则将该元素的score增加Increment,否则想zset中添加该元素,score值为increment
  zrank
  返回zset中元素排名(按照score从小到大排序)即下标
  zrevrank
  返回zset中元素排名(按照score从大到小排序)即下标
  zrevrange
  返回zset中(按score从大到小排序)从start到end的所有元素
  arevrange myzset 0-3 withscores
  zrangebuscore
  返回zset中score在给定区间的元素
  zrange myzset 0 5 withscores
  zcount
  返回集合中score在给定区间的数量
  zrange myzset 2 3
  zcard
  返回zset中元素个数
  zscore
  返回zset中元素对应的score
  zremrangebyrank
  删除集合排名在给定区间的元素
  zremrangebyrank myzset 3 4
  zremrangebyscore
  删除zset中score在给定区间的元素
  zremrangebyscore myzset 1 2
  ===========================================================================================
  reids常用命令
  keys *
  返回所有key
  keys mylist*
  返回所有含有mylist的key
  exists
  确认一个key是否存在
  del
  删除一个key
  expire
  设置一个key的过期时间
  move
  将当期数据库中的key移动到其他数据库
  move name 1
  将名为name的key移动到数据库1
  persist
  删除kye的过期时间
  randomkey
  随机返回一个key
  rename
  重命名key
  type
  返回值的类型
  ===========================================================================================
  服务器相关命令
  ping
  测试连接是否存活,返回PONG表示存活,否则返回connecton refused
  echo
  在命令行打印内容
  select
  选择数据库,数据库编号0-15
  quit
  退出连接
  dbsize
  返回当前数据中key的数目
  info
  获取服务器的信息和统计
  monitor
  实时转储收到的请求
  config get
  获取服务器配置信息
  flushdb
  删除当前数据中的所有key
  flushall
  删除所有数据库中的所有key
  -------------------------------------------------------------------------------------------
  持久化
  默认RDB方式
  在配置文件中通过制定save 来进行RDB持久化,由两个参数构成:实践和改动的键的个数
  save 900 1
  save 300 10
  save 60 1000
  AOF 快照
  通过appendonly yes 开启AOF方式持久化
  开启AOF持久化后每执行一条命令后redis都将该命令写入硬盘,保存文件和RDB文件路径一样通过dir设置,文件名默认appendonly.aof,通过appendfilename更改
  appendfilename appendonly.aof
  设置AOF重写,redis根据规则自动删除冗余的记录
  auto-aof-rewrite-percentage 100     设置当前AOF文件大小超过上一次重写时的AOF文件大小的百分之多少会再次进行重写
  auto-aof-rewrite-mim-size 64mb         限制允许重写的最小AOF文件大小
  AOF持久化在redis每次执行命令后并没有真正的将数据写入的硬盘,而是写入到了操作系统的硬盘缓存中,系统默认30秒会将硬盘缓存中的数据写入到本地硬盘
  设置redis在写入AOF文件后主动将硬盘缓存内容同步到本地硬盘
  appendfsync always        每次执行写入后都同步一次,这种最安全但也最慢
  appendfsync everysec    默认设置,每秒同步一次,兼顾性能又保证安全
  appendfsync no             不主动同步,由系统每30秒同步一次
  -------------------------------------------------------------------------------------------
  redis主从复制
  一个主数据可以有多个从数据库,一个从数据库只能有一个主数据库
  设置主从(在从库机器上操作)
  在配置文件中加入slaveof 主库ip 端口即可
  slaveof 192.168.5.128 6379
  或者从命令行启动
  redis-server --slaveof 192.168.5.128 6379
  在redis命令行执行 SLAVEOF 主库ip 端口
  reis > SLAVEOF 192.168.5.128 6379
  默认情况下从库是只读的
  slave-read-only no     设置从库可写
  上面数据不会同步到其他数据库
  主库上该修改会覆盖从库上的数据
  如果该机器已经是其他主数据库的从库,slaveof命令会停止和原数据库的同步改为和新数据库同步
  可以使用slaveof no one 来使当前数据库停止接收其他数据库的同步而转为主数据库
  可以配置slave-server-stale-data    no来使从库在同步完成前对所用命令(info、slaveof除外)都回复错误“SYNC with master in progress”
  图结构复制
  从数据不仅可以接收主数据库的同步数据,自己还可以同时作为主数据库存在,
  从数据库持久化
  在从数据库中启用持久化,同时主数据库禁用持久化;
  当从库出现问题后,主数据库会自动将数据同步过来;
  当主库出现问题后,需要在从库中使用slaveof no one 将从库提升为主库,并将原先的主库设置为从库,可以将数据同步回去
  -------------------------------------------------------------------------------------------
  安全(必须保证配置文件的安全性)
  可信的环境
  redis 应该运行在可信的安全环境下,默认reids会接收来自任何地址发送来的请求,可以通过bind参数绑定地址
  bind 192.168.5.128
  然后重启redis
  数据库密码
  我们可以通过配置给redis设置密码
  requirepass reids@!$REDIS
  这样每次客户端连接的时候都需要发送密码,否则客户端会拒绝执行命令
  发送密码使用AUTH
  AUTH reids@!$REDIS
  ~~提示:如果redis复制时主库设置了密码,需要在从库设置主库密码,以使从数据连接主库时自动使用AUTH命令认证
  masterauth reids@!$REDIS         (从库的配置文件中设置)
  reids 支持在配置文件中将命令重命名,以保证只有自己的应用可以使用该命令
  rename-command FLUSHALL getall         将FLUSHALL命令重命名为getall
  rename-command FLUSHALL ""             禁用FLUSHALL命令


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631667-1-1.html 上篇帖子: redis搭建及配置 下篇帖子: Redis 学习(Redis Info详细注释)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表