redis


nosql (not only sql)非关系型数据库(需要多多练习使用)

Nosql数据库种类较多,但是都有一个特点是去点关系型数据库的关系特性。

互联网的

三高:高并发、高扩展、高负载

3V:海量(Volume)、多样(Variety)、实时(Velocity)

验证或查看redis命令:

ps -ef|grep redis

netstat -antp | grep redis

redis的配置文件中设定了数据库的个数,默认是16个(0-16-1个)

select 切换数据库

DBsize查看当前数据库的key的数量

linux下启动redis:

进入到redis安装目录(我的路径):cd /usr/local/redis/bin/

将会看到有很多相关的redis文件,启动并访问redis服务:

./redis-server redis.conf

./redis-cli -p 6379

redis的通用命令:

keys *

exists key的名字,判断某个key是否存在

move key db 当前库被移除

expire key 秒值 给当点的key设置过期时间

ttl key 查看还有多少秒过期 -1表示永不过期 -2表示已经过期

type key 查看你的key是什么类型

dbsize 数据库的大小

注:一般不会使用redis的长命令

例如:keys,flushall,flushdb,slow lua script,mutil/exec,operate big value

redis的五大数据类型

redis对象包括:数据类型、内部编码

redis的键Key 内部的编码
String raw、int、embstr
hash hashtable、ziplist
list linkedlist、ziplist
set hashtable、insert
zset skiplist、ziplist

1.redis的String 字符串:string是redis最基本的类型,一个key对应一个value,最大的value最多可以是512M。可以存图片或者序列化的对象(常用命令)

set/get/del/append/strlen

Incr/decr/incrby/decrby

getrange/setrange:getrange key start end;setrange key start end

setex(set with expire)键秒值/setnx(set if not exist)

mset/mget/msetnx(mget或mset是批次处理,1次mget时间= 网络时间+n次的命令时间)时间复杂度为O(N)

getset(先get再set)

append 在次机床叠加字符串

2.redis的Hash哈希:是一个键值对的集合,适用于存储对象(k,v模式,v是一个键值对,常用命令)

hset/hget/hmset/hmget/hgetall/hdel 基本的添加与查询

hlen 查询长度

hexist key 在key里面的某个值的key

hkeys/hvals

hincrby/hincrbyfloat

hsetnx 如果存在不插入,不存在插入

3.redis的List列表:是一个简单的字符串列表

lpush/rpush/lrange

lpop/rpop

lindex:按照索引下标获取元素

llen :查看集合长度

lrem key 删除N个value

ltrim key 开始index 结束index:截取指定范围的值后在赋值给key

rpoplpush 源列表 目的列表

lset key index value

linsert key before/after 值1 值2

4.redis的Set集合:是一个无序无重复的集合(单值多value,常用命令)

sadd/smembers/sismember

scard:获取集合里面的元素个数

srem key value :删除集合中元素

srandmember key 某个整数

spop key :随机出栈

smove key1 key2 在key1里某个值 作用是将key1中的某个值赋给key2

数学集合类:差集:sdiff 交集:sinter 并集:sunion

5.redis的Zset(Sorted set:有序集合):有序的集合,不允许有重复的成员,每个元素都会有一个关联的double类型的分数,根据分数进行从小到大的排序

  1. zadd/zrange

注:zrange常与withscores联合使用

  1. zrangebyscore key 开始score 结束score

注:zrangebyscore key 开始scorre 结束score (withscore 或者‘(’表示不包含或者limit返回限制)

例子1:zrangescore zset01 60 (90 表示zset集合中分数大于等于60小于90的元素的键值对的键值

例子2:zrangescore zset01 60 (90 withscores 表示zset集合中分数大于等于60小于90的元素整个键值对

例子3:zrangescore zset01 60 (90 limit 2 2 表示zset集合中分数大于等于60小于90的元素键值从2位置查两个

  1. zcard/zcount key score区间/zrank key values值,作用是获取下标值/zscore key 对应值,获得分数
  2. zrevrank key values 作用是逆序获取下标值
  3. zrevrange
  4. zrevrangebyscore key

redis命令大全

redis的配置文件redis.conf:

Unitsd单位:对于大小写不敏感,GB gb 都一样。

INCLUDES包含:标准的模板,可以包含其他的配置文件,使用include进行引入

GENERAL:TCP-backlog=511(默认),其是一个连接队列。还包含redis日志,四个日志级别:debug、verbose、notice、waring

SNAPSHOTTING快照:

SECURITY安全:

自己配置密码:config set requirepass “123456”

登录时需验证:auth 123456

LIMITS限制:Maxclients、Maxmemory、Maxmemory-policy、Maxmemory-samples(默认5个样例)

Maxmemory-policy缓存过期机制:

volatile-lru:使用LRU(最近最少使用淘汰)算法移除key,只针对于过期时间的键

allkeys-lru:使用LRU(最近最少使用淘汰)算法移除key

volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键

allkeys-random:移除随机的key

volatile-ttl:移除那些TTL(设置存活时间)值最小的key,即就是将要过期的key

noeviction:不进行移除,针对写操作(永不过期)

APPEND ONLY MODE追加

Redis中的功能:

慢查询、pipeline、发布订阅、Bitmap、HyperLogLog、GEO

  • 1.慢查询:(慢查询默认配置:slowlog-max-len = 128和slowlog-log-slower-than = 10000)

​ 客户端请求的生命周期:客户端发送命令;排队;执行命令;返回结果。第三阶段慢执行称为慢查询,客户端超时可能不是慢查询的原因。

动态配置:config set slowlog-max-len = 1000

slowlog get[n]:获取慢查询队列

slowlog len :获取慢查询队列长度

slowlog reset:清空慢查询队列

slowlog-max-len默认10毫秒,通常设置1ms

slowlog-log-slower-than队列长度大多设置在1000

  • pipeline流水线:多次操作可以分批进行操作,例如10000次可以分为100*100

  • 发布订阅(客户端与客户端之间的消息,类似于生产者消费者)

public channel mrssage 发布消息

subscribe channel 订阅频道

psubscribe [pattern] 订阅模式

  • Bitmap(位图)

setbit key offset value 给位图指定索引设置值

getbit key offset 获取位图指定索引的值

bitcount key [start end] 获取指定范围的值

bittop op destkey key [key…]

  • HyperLogLog(极小控件数据统计)

pfadd key element [emelent]

pfcount key [key]

  • GEO(redis3.2的功能)存储两个地理的经纬度,用于计算两地距离

geoadd key 精度 维度 标识

geopod key 标识 [标识]

geodist key 标识1 标识2

georadius key 精度 维度 选项

Redis持久化:

1.RDB(Rdies DataBase):在指定时间间隔内将数据集快照写入磁盘,Snapshot快照,恢复时将快照读到内存。Redis会单独创建一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束,再用该临时文件替换上次持久化好的文件,整个过程中主进程不进行IO操作,这样确保了极高的性能。对于需要进行大规模数据的恢复,且对于数据恢复的完整性不敏感,那么RDB方式比AOF方式更加高效。(时间复杂度O(N))

Fork的作用是复制一个与当前进程一样的进程,新进程的所有数据数值都和原进程一致。

Rdb保存的是dump.rdb文件:

命令save 秒值 改动次数 (同步)

bgsave (异步)

自动生成该文件

经常将配置文件中的save命令关掉,手动进行save

dbfilename dump-${port}.rdb

如何触发Rdb快照:将备份的dump.rdb拷贝到redis启动的目录下进行启动

2.AOF(Append Only File):以日志的形式来记录每个写文件,是将redis执行的所有写过程指令记录下来(读不记录),只允许追加文件但不可以改文件,redis启动之初会读取改文件重新构建数据,即redis将所有写指令从前到后执行一次恢复数据。

Aof保存的是appendonly.aof(如果开启aof默认加载改文件进行开启redis):文件出现错误时,启动redis失败,可以使用命令进行自动修复,将不符合的语法进行剔除。

redis-check-aof –fix appendonly.aof

Rewrite:Aof采用文件追加方式,文件会越来越大,为了避免此情况,新增加重写机制,当aof文件大小超过所设定的阈值时,Redis就会启动Aof文件内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof。

重写(rewrite)原理:增长过大时,将fork出新的进程,将文件重写,遍历新进程内存中数据,每条记录有一条Set语句,重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写一个新的aof文件,与数据库快照类似。

重写触发机制:Redis会记录上次重写时的aof大小,默认配置是当aof文件大小是上次rewrite后大小的一倍且文件大小等于64M

aof默认是时刻进行记录,保证数据完整,缺点是相同数据集的数据而言aof文件远大于rdb文件,恢复速度慢于rdb,Aof运行效率要慢于rdb。每秒同步策略效率较好,不同步效率与rdb相同。

数据持久化选择:

RDB持久化方式能够在指定时间间隔对数据进行快照存储;AOF持久化方式记录每次对服务器写的操作,当服务器重启的是时候会重新执行这些恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾

redis只做缓存时,可以不用持久化

同时开启两种持久化,redis优先加载aof来恢复原始数据,rdb用作后备用途,每15分钟进行一次备份即可(保留规则:save 900 1)

Redis事务:一组命令的集合,一起成功一起失败。一个事务中的所有命令被序列化,按顺序地串行执行而不会被其他命令插入,不允许加塞。

事务作用:一个队列中,一次性、顺序性、排他性的执行一系列命令

事务开启命令:MULTI 使用调用事务命令:EXEC

取消事务命令:DISCARD 取消watch命令对所有key的监视:UNWATCH

监视一个或多个key命令,事务执行前数据被改则事务被打断:WATCH

Redis对于事务是部分支持

执行事务、放弃事务、

全体连坐(事务中的某一条指令不可加入队列中,导致整个指令队列全部错误)、

冤头债主(事务中的某一条指令有错误,但是能够加入队列,只有执行的时才会出错)、watch监控(悲观锁/乐观锁/CAS:check and set)

悲观锁:认为每次数据访问时一定会被别人修改,所以每次拿取数据时锁定整个表,别人想要操作数据时进入阻塞直到拿到锁,例如:关系型数据库中的行锁、表锁、读锁、写锁

乐观锁:认为每次拿取数据时,别人不会修改数据,相当于列锁,添加一个版本列

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

订阅频道(channel):SUBSCRIBE c1 c2 c3

消息发布:PUBLISH c1 消息

订阅多个,通配符:PSUBSCRIBE new*

Redis的复制(Master/Slaver):即主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主(读写分离、容灾恢复)

从库配置:slaveof 主库ip 主库端口

主机挂掉,从库上升为主库:slaveof no one

从库配置操作,拷贝多个redis.conf文件;开启daemonize yes;pid文件名字;指定端口;log文件名字;dump.rdb名字

一主两仆:一个主机两个丛机,使用slaveof指向主机,只允许主机写数据,主机down掉,丛机等待主机复原,丛机down掉需要重新与主机建立连接,可以在配置文件中写就不需要每次手动连接

主从复制原理,Slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的修改数据集的命令,在后台进程执行完毕之后,master将传送整个数据文件slave

全量复制:slave服务接收到数据库文件数据后将其存盘并加载到内存中

增量复制:Master继续将新的所有收集到的修改数据的命令依次传递给slave,完成同步,每次重新连接需要做依次全量复制

常用的模式是哨兵模式(Sentinel)步骤:

针对于主从复制的体系,主机挂机的情况下,从丛机中进行投票进行选举一个新的主机,步骤:

自定义配置文件,与redis.conf文件相同的路径建立一个sentinel.conf文件

配置哨兵:sentinel monitor 被监控数据库名字 (自己起一个名字) 127.0.0.1 6379 1

配置文件中的数字1表示主机挂掉后,票数多的成为新的主机

启动哨兵:Redis-sentonel sentinel.conf

redis配置实例:

功能包括:(http://gethub.com/sohutv/cachecloud)

1.一键启动Redis。(Standalone、Sentinel、Cluster)

2.机器、应用、实例监控和报警

3.客户端:透明使用、性能上报

4.可视化运维:配置、扩容、Failover、机器/应用/实例上下线。

redis配置参数:

daemonize:是否是守护进程(no|yes)

port:端口设置

logfile:日志文件

dir:redis工作目录


文章作者: it星
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 it星 !
 上一篇
标题党--it星 标题党--it星
it星
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hex
下一篇 
neo4j学习 neo4j学习
neo4j下载与安装(windows环境下)neo4j官网 注:官网下载neo4j相当的慢。 国内下载地址 1.neo4j简单介绍其是基于java语言编写的图形数据库。图是一组节点和连接这些节点的关系,图数据库也被称作图形数据库管理系统(G
2020-03-25
  目录