redis的基本使用

1.Redis常⽤数据类型

redis常用的数据类型主要有以下5种:

(1)Sting类型

存:set key value
取:get key 获得对应的value值

(2)list类型 :

存:lpush key values
取:lpush list1 1 2 3 4 5 
注:栈的数据结构是先进后出(后进先出)
lpush表示从左边开始进行压栈操作,取出的数据顺序和进栈的顺序刚好相反,
rpush表示从最右边开始进行压栈操作,取出数据的顺序和插入数据的顺序一致

(3)set无序集合

set集合不允许有重复的元素,如果有重复的,自动将重复的数据删除
存:sadd key values 
例:sadd list2 a b c 
取:smembers key 
例:smembers list2

(4)zset集合

zset有顺序,不能重复,会将插入数据时的数字作为排序的依据,默认进行升序的排列
存值:zset key score1 value1 score2 value2 score3 value3
取值:取出的数据是经过升序排列的没有重复的有序集合
zrange key 0 -1 升序输出
zrevrange key 0 -1 降序输出
删除:zrem key value

(5)hash数据类型

hash: key-fields-values(做缓存使用)
Hset :向hash中添加数据
Hget:从hash中取出数据

注:redis中的所有数据都是字符串,命令不区分大小写,key是区分大小写的,由于redis是单线程的,因此不适合保存内容大的数据,key/value,单个value的数据最⼤为512M。

2.Redis作为单线程模型为什么效率这么⾼
redis的基本使用

Redis是单线程模型为什么这么快:多路(多个⽹络连接)复⽤(复⽤同⼀个线程)
1、纯内存访问
2、⾮阻塞I/O:Redis采⽤epoll作为I/O的多路复⽤器实现
3、采⽤单线,避免了不必要的上下⽂切花和竞争

3. 如何实现Redis数据持久化
redis的持久化分为两种⽅式:RDB、AOF
3.1. RDB⽅式

Redis将内存中所有数据全量写⼊⽂件的⽅式
优势
  每隔⼀段时间进⾏备份,全量备份
  灾备简单,可以远程传输
  备份是会fork⼀个⼦进程,对当前进⾏数据访问的主进程不影响
劣势
  发⽣故障时,有可能或丢失最后⼀次要备份的数据
  ⼦进程进⾏数据备份时会复制内存数据导致内存瞬间膨胀两倍,如果复制的数据量很⼤就会
  导致CPU和内存负载很⾼产⽣卡顿
  Redis RDB备份的设置⽅式
      save 900 1   900内更新1次就触发RDB全量备份
      save 300 10
      save 60 10000
  如果RDB过程中出错,则redis停⽌写操作
      stop-writes-on-bgsave-error yes
  save 不会fork⼀个新进程,所以在save的过程中,主进程可能会卡住
  bgsave 会fork⼀个新进程,系统⾃动触发也是使⽤的bgsave

数据已经持久化到RDB⽂件,如果恢复?

  只需要把dump.rdb 复制到dir⽬录中,redis在启动的时候机会⾃动加载

3.2. AOF⽅式
AOF的特点

 以⽇志的形式来记录⽤户的请求写操作(特别像MySQL的binlog),读操作不会保存
 ⽂件是以追加的形式进⾏记录
 redis的aof恢复其实就是把追加的⽂件从头到尾全部执⾏⼀遍

优势:

AOF以秒为单位进⾏备份,丢失数据范围更⼩
log⽇志形式追加,如果磁盘满了会调⽤redis-check-aof⼯具进⾏⽂件的重写
当数据量太⼤的时候,redis会在后台⾃动重新AOF⽇志⽂件

劣势:

相同的key数据会有多份,AOF⽐RDB⼤的多
AOF⼀旦出现过问题,就会导致数据不完整

RDB(全量备份mysqldump)+AOF(增量备份binlog)最后组合使⽤

# AOF默认是不开启的
appendonly no | yes
# AOF的⽂件名,同样存在dir⽬录下
appendfilename "appendonly.aof"
# 同步策略
# appendfsync always 每次操作都会备份,性能差
appendfsync everysec # 每秒备份⼀次,推荐时间
# appendfsync no aof备份时不进⾏磁盘同步
# 重写aof⽂件时是否同步,no同步 ,yes不同步
no-appendfsync-on-rewrite no
# AOF⽂件重写机制:避免AOF⽂件越来越⼤,将key的历史轨迹整合只保留最后⼀个
# 当前⽂件的容量⽐上⼀次重写后多出100%,也就现在是之前的两倍
auto-aof-rewrite-percentage 100
# 当前⽂件⼤于64mb
auto-aof-rewrite-min-size 64mb
# 如果要触发重写,以上两个条件都要满⾜

重新的时候Redis也会从主进程fork⼀个⼦进程进⾏重写操作,所有和RDB的开销⼀样
AOF默认是不开启,如何你在Redis运⾏过程中开启AOF⼀定要注意不要直接开启后重启
如果AOF和RDB同时开启,Redis只读取AOF⽂件的内容
如何解决:在运⾏中修改appendonly 为 yes:config set appendonly yes

4. Redis内存管理之缓存过期机制
redis⾥定义key的时候set gavin EX 10,数据过期后只是你⽆法访问了,但不会直接删除,什么时候删除
(主动)定期删除

   redis默认会⼀秒10次巡检内存,将已经过期的数据进⾏删除
   可以设置主动频次:config get hz

(被动)惰性删除

   当客户端请求时,如果发现过期超时就进⾏删除并返回客户端⼀个nil

如果redis内存被占满(你的key都没有设置过期时间)

  # redis提供了⼀套缓存淘汰机制
  # maxmemory <bytes> //可以设置内存的可⽤⼤⼩,可以预留内存给操作系统,主从两台机器内存不⼀样⼤,设置成⼩的
  # redis提供了⼀套缓存淘汰机制
  # maxmemory-policy noeviction 这是默认,旧缓存永不过期,如果内存满了新缓存⽆法写⼊
  # allkeys-lru 当内存满时,有新缓存进⼊,将最少使⽤的旧缓存清除

5.Redis读写分离主从架构搭建
redis的基本使用

# 从机的单机安装参考前⾯
# 修改slave的redis.conf
# 主机连接
replicaof 127.0.0.1 6379
# 主机访问密码
masterauth icoding
# 主从复制过程中,从服务是否可以响应客户端请求
replica-serve-stale-data yes
# 从机只读
replica-read-only yes
上一篇:temp 表空间无法扩展 案例分析


下一篇:Qt之自定义界面(QMessageBox)