Redis基础学习

2018-11-06  本文已影响0人  曦夫

1.redis注意点

select num
dbsize 或者 keys*
flushdb & flushall

2.redis数据类型

五大数据类型: String Hash List Set Zset

2.1.key操作

exists key

move key db

expire key 秒数

ttl key

type key

del key


2.2.String类型

set/get/del/append/strlen key (value)

incr/decr key:每次加减1
incrby/decrby key num:每次加减num

getrange key num(start) num(end)

setrange key num XXX

setex key 有效时间 value

setnx key value

mset/msetnx key1 value1 key2 value2 ...
mget key1 key2 key3 ...


2.3.List列表操作

rpush/lpush list(key) value1 value2 ...
lrange list(key) num(start) num(end)

lpop/rpop list(key)

lindex list(key) index

lren list(key) num value

ltrim key index(start) index(end)

rpoplpush list1(源) list2(目的)

lset key index value

linsert list(key) brfore value value1
linsert list(key) after value value1


2.4.Set集合操作

sadd key value1 value2 ...
smembers key
sismember key value

scard key

srem key value

srandmember key num

spop key

smove set1 set2 value

sdiff set1 set2

sinter set1 set2

sunion set1 set2


2.5.Hash哈希操作(KV模式不变,但V是一个键值对)

hset hash1 id idval
hget hash1 id
hmget hash1 id idval name nameval age ageval
hmget hash1 id name age
hgetall hash1
hdel hash1 id(或name ...)

hlen hash1

hexists hash1 key

hkeys hash1
hvals hash1

增加整数:hincrby hash1 key num(int)
增加小数:hincrbyfloat hash1 key num(float)

hsetnx hash1 key value


2.6.Zset有序集合操作

在set基础上。加了一个score值
之前set是k1 v1 v2 v3 ...
现在zset是k1 score1 v1 score2 v2 ...

zadd zset1 score1 v1 score2 v2

zrange zset1 0 -1
zrange zset1 0 -1 withscores
zrange zset1 num(start) num(end)

zrevrangebyscore zset1 start end
 score范围:start <= value <= end
zrevrangebyscore zset1(start (end
 范围:start < value < end
zrevrangebyscore zset1 start end limit 2 3
 从结果中第二个开始截取3个返回

zrem zset1 v1

zcard zset1

zcount zset1 score1 score2

zrank zset v1

zscore zset1 v1

zrevrank zset1 v3

zrange zset1 0 -1
zrevrange zset1 0 -1

zrevrangebyscore zset1 score2 score1


3.redis配置文件

1.配置文件单位,开头定义一些基本的度量单位,只支持bytes,不支持bit
2.不区分大小写

include包含:redis.conf作为一个总闸,包含其他redis配置文件

1.save:可以直接手动备份
2.stop-writes-on-bgsave-error:当后台保存出错时,前台停止再写入。
3.rdbccompression:对磁盘中的快照,是否进行压缩存储,若yes,则使用LZF算法进行压缩
4.rdbchecksum:存储快照后,使用CRC64算法检验数据
5.dbfilename:默认保存的文件名
6.dir:保存路径

设置密码/操作有密码权限的redis
config set requirepass password
auth password

config get dir

  1. maxClients 10000:默认可连接的最大客户端数量
  2. maxmemory:最大的内存
  3. maxmemory-policy:最大内存策略
    可选值:
    volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放
    allkeys-lru:从数据集中(包括设置和未设置过期时间的),选择最近醉酒未使用的数据释放
    volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放
    allkeys-random:从数据集中(包括设置和未设置过期时间的),随机选择一个数据进行释放
    volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放
    noeviction:不删除任何数据(redis还会根据引用计算器进行释放),若内存不够时,直接返回错误
    LRU算法:
    最近最久未使用算法,当内存容量不足时,为了保证程序的运行,这时就不得不淘汰内存中的一些对象,释放这些对象占用的空间,LRU算法就提供了一种策略,选择最近一段时间内,最久未使用的对象将其淘汰。
  4. maxmemory-samples:设置样本的数量,进行测试。redis会默认检查这么多个key并选择其中的LRU的那个。

1.appendonly:默认为no,yes开启aof的持久化
2.appendfilename:默认保存的文件名
3.appendfsync:储存方式(策略)
  always:数据持久化,每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好。
  everysec:默认设置,异步操作,每秒记录,如果一秒内宕机,有数据丢失
  no:不记录
4.no-appendfsync-on-rewrite:重写时是允许appendfsync,默认no,保证数据安全性
5.auto-aof-rewrite-percentage:当前aof文件比上次重写的增长比例大小,默认一倍
6.auto-aof-rewrite-min-size:最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.


4.redis持久化(Redis Persistence)

1.在指定时间间隔内,将内存中的数据集写入本地磁盘
2.redis单独创建(fork)一个子进程进行持久化,会先写入到一个临时文件,待持久化结束后,再替换原来的源持久化文件。
3.恢复Snapshot快照,将数据集从磁盘读回内存
4.rdb保存的是dump.rdb文件
5.当redis执行关闭shutdown或flushall时,会迅速截断,生成dump.rdb文件,但是由于内存已经清空,所以保存的dump.rdb为空文件。
6.可以使用save命令自动备份。
7.如何恢复:将备份文件移动到redis安装目录并启动服务即可,config get dir 获取目录

1.以日志的形式记录每个写操作,将redis执行过的所有写指令记录下来,只许追加文件但不可以改写文件,redis启动之初会读取文件重构数据。即根据日志文件的内容将写指令全部执行一遍以完成数据恢复工作。
2.aof保存的是appendonly.aof
3.异常恢复:redis-check-aof --fix进行修复,之后重启
4.rewrite:aof会采取文件追加,文件会越来越大,避免出现如此,新增重写机制,当aof文件大小超过设计阈值,redis会启用aof文件内容压缩,只保留可恢复数据的最小值指令集,可以使用命令bgrewriteaof
5.redis会记录上次重写时aof大小,默认配置是当aof文件是上次重写后大小的一倍且文件大于64M时触发
6.aof运行效率慢于rdb;aof村粗配置灵活

1.rdb持久化方式是指定的时间间隔对你的数据快照存储
2.aof持久化是记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始数据,aof命令以redis协议追加保存每次系的操作到文件末尾。redis还能对aof文件进行后台重写,使aof文件不至于体积过大。
3.只做缓存使用:若仅当数据在服务器运行的时候存在,可以不使用任何持久化方式。


5.redis事务

一次执行多个命令,一个事务中所有的命令都会序列化,按顺序串行的执行而不被其他命令插入。

一个队列中,一次性、顺序性、排他性的执行一系列命令。

1.diacard:取消事务,放弃执行事务块内的所有命令。
2.exec:执行所有事务块内的命令。
3.multi:标志一个事务的开始。
4.unwatch:取消watch命令对所有key的监视。
5.watch:监视一个(或多个)key,若执行事务前,key值被其他命令所改动,事务被打断
  乐观锁:锁每条记录,为每条记录添加版本号,当只有修改数据冲突时,才需要重新去服务器拿被修改最新版本数据重新修改。
  悲观锁:在数据被使用的时候,不允许其他人再使用。直至锁解除。
  CAS:比较和替换,基于乐观锁锁的操作
watch指令,在事务提交时,若key值已经被改变,整个事务队列不会被执行。
通过watch命令在事务执行之前监控多个keys,若在watch之后有任何key发生变化,exec命令执行事务都会被放弃,同时返回nullmuliti-bulk应答事务执行失败。

1.监控:以watch keys 监控事务上锁,keys为即将执行的操作的数据
2.开启:以milti开始一个事务
3.入队:将多个命令入队事务中,接到命令后不会立即执行,而是放入等待执行的事务队列中。
4.执行:由exec命令触发事务

不保证原子性,支持部分事务。

6.redis消息订阅

进程间的一种通信模式:发送者(pub)发送消息,订阅者(sub)接受消息.

7.redis的复制机制(master/stave)

即是主从复制,主机更新后根据配置和策略,自动同步到备份的master/slaver机制,master以写为主,slave以读为主。

主从复制,容灾恢复

1.配置从库不配置主库
2.从库配置:slaveof 主库IP 主库端口
3.每次与master断开之后,都需要重新连接,除非配置redis.conf
4.修改配置文件
 拷贝多个配置文件redis.conf
 info replication:查看配置
 slaveof no one:当前数据库停止与其他数据库的同步,转成主数据库

一主二仆:
1.主机可写,从机不可写,只读(读写分离)。
2.主机挂掉,从机待命
3.主机恢复,从机照旧
4.从机挂掉,需要重连主机
薪火相传:
主机接从机,从机后继续连接从机
反客为主:
主机挂掉,使用命令slaveof no one,变从机为主机(从机后接有从机)

1.slave启动成功连接到master后,会发送一个sync命令。
2.master接到命令后启动后台的存盘进程,同时手机所有接收到的用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到slave,以便完成一次完全同步。
3.全量复制:当slave服务在接受到数据库文件数据后,将其存盘并加载到内存中。
4.增量复制:master继续将新的所有手机到的修改命令依次传给slave,完成同步。
5.但只要重新连接master,一次完全同步(全量复制)将自动执行。

在后台监控主机是否故障,如果故障了根据投票数自动将从库转换成主库。

1.调整结构为一主二仆
2.自定义的/myredis目录下新建文件:sentinel.conf,名字不能错
3.配置哨兵,在sentinel.conf文件中添加:
 ①:sentinel moniter 被监控主机名(自定义) 主机IP 端口号 1
 ②:数字1表示当主机挂掉后,salve投票,看谁的票数多,谁接替主机。
4.启动哨兵:redis-sentinel /usr/local/myredis/sentinel.conf(全路径地址)
5.当主机A挂掉,从机中选出从机B为主机B,当原主机A再次启动后,哨兵将其加为主机B的从机。

6.一组sentinel能同时监控多个master

1.复制延迟:由于所有的写操作都在master上,然后同步到slave,所以从master同步到slave机器有一定延迟,当系统很繁忙的时候,延迟更严重。

上一篇下一篇

猜你喜欢

热点阅读