Redis笔记---介绍及使用

一、Redis介绍

    1:NOSQL和SQL简介

            1)Redis是一款高性能的NOSQL数据库;

            2)NODSQL最初指不使用SQL标准的数据库,现在泛指所有的非关系型数据库;

            3)NOSQL和SQL数据库是相辅相成的,不存在相互替换的可能

            4)NOSQL数据库都符合CAP定理

                (C---强一致性,   A----高可用性,  P---高分区容错性,只能满足其二, 无法同时满足)

    2:Redis

            1)特点:

                        ①短小精悍-----核心代码不超过2w行,总版本代码不超过5w行;

                                                性能强劲,每秒百万级读写。

                        ②服务端是单线程,多路IO复用:

                                                 单线程----服务器同时只能处理一条命令;

                                                 多路IO复用----

                        ③使用c语言编写

                        ④在内存中工作的数据库

二、安装

在Linux中凡是C语言编写的软件,必须先编译后安装。

        1:编译----

                          ①在Makefile文件所在目录,执行make命令

                                make----编译,在编译C语言写的软件时,需要gcc-c++库

                                安装gcc-c++:yum -y install gcc-c++

        2:安装----

                          ③ cd str, 执行make命令:make install(安装)  

                            安装的文件存放在/usr/local/bin中

                          ④bin目录常用命令

 

bin目录常用命令

Redis-benchmark

压力测试。标准是每秒80000次写操作,110000次读操作 (服务启动起来后执行,类似安兔兔跑分)

Redis-check-aof

修复有问题的AOF文件

Redis-check-dump

修复有问题的dump.rdb文件

Redis-sentinel

启动哨兵,集群使用

redis-server

启动服务器

redis-cli

启动客户端

                                 ⑤启动服务器--------redis-server XXX.conf   (将配置文件备份保留)

                                      修改配置文件改为守护进程模式,在后台运行---daemonize yes

                                       后台启动后查看服务-----netstat -anp | grep 6379 

                                 ⑥客户端登录-------

命令

说明

举例

备注

redis-cli

启动客户端

redis-cli –p 端口号

连接指定的端口号

直接执行的话,默认端口号就是6379;

ping

测试联通

 

回复pong代表联通

exit

退出客户端

 

 

redis-cli shutdown

停止服务器

redis-cli -h 127.0.0.1 -p 6379 shutdown

停止指定ip指定端口号的服务器

redis是通过客户端发送停止服务器的命令

    

三:使用

        1:启动和停止服务

                服务端:

                            启动:redis-server 配置文件;

                            停止:ctrl+c:强行停止

                                        通过客户端shutdown命令停止

                客户端:

                            启动:redis-cli -h 服务器的主机名 -p 端口号

                                      redis-cli :默认连接localhost:6379  

                            退出:quit; exit;

五、常用的五大基本数据类型

        数据:

            Redis中的数据以键值对(key-value)为基本存储方式,

            其中key都是字符串,这里探讨数据类型都是探讨value的类型。

                key()-value[string,hash,list,set,zset(sorted set)]

 

 

key

value

string

字符串

list

可以重复的集合

set

不可以重复的集合

hash

类似于Map

zset(sorted  set)

带分数的set

1:String操作-----

                String类型时Redis中的最基本的类型,它是key对应的一个单一值。

                二进制安全,不必担心由于编译等问题导致二进制数据变化,所以Redis的String 可以包含任何数据,比如jpg图像,或序列化的对象

                Redis中的一个字符串的最大容量是512M

SET  key  value

添加键值对

GET  key

查询指定key的值

APPEND  key  value

将给定的value追加到原值的末尾

STRLEN  key

获取值的长度

SETNX  key  value

只有在 key 不存在时设置 key 的值

INCR  key

指定key的值自增1,只对数字有效

DECR  key

指定key的值自减1,只对数字有效

INCRBY  key  num

自增num

DECRBY  key  num

自减num 

MSET  key1 value1 key2 value2…

同时设置多个key-value对

MGET  key1 key2

同时获取一个或多个value

MSETNX key1 value1 key2 value2

当key不存在时,设置多个key-value对

GETRANGE  key起始索引 结束索引

获取指定范围的值,都是闭区间

SETRANGE  key起始索引 value

从起始位置开始覆写指定的值

GETSET  key  value

以新换旧,同时获取旧值

SETEX  key  过期时间  value

设置键值的同时,设置过期时间,单位秒

2:list操作

               在Redis中list是双向链表可以从两侧插入

                常见操作-----

                                    遍历:从左往右取值

                                    删除:弹栈---POP;

                                    添加:压栈---PUSE;

                Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

LPUSH/RPUSH key value1 value2…

从左边/右边压入一个或多个值

头尾效率高,中间效率低

LPOP/RPOP key

从左边/右边弹出一个值

值在键在,值光键亡

弹出=返回+删除

LRANGE key start stop

查看指定区间的元素

正着数:0,1,2,3,...

倒着数:-1,-2,-3,...

LINDEX key index

按照索引下标获取元素(从左到右)

LLEN key

获取列表长度

LINSERT key BEFORE|AFTER value newvalue

在指定value的前后插入newvalue

LREM key n value

从左边删除n个value

LSET key index value

把指定索引位置的元素替换为另一个值

LTRIM key start stop

仅保留指定区间的数据

RPOPLPUSH key1 key2

从key1右边弹出一个值,左侧压入到key2

3:set操作

                set是无序的,且是不可重复的

SADD key member [member ...]

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

SMEMBERS key

取出该集合的所有值

SISMEMBER key value

判断集合是否为含有该值,有返回1,没有返回0

SCARD key

返回集合中元素的数量

SREM key member [member ...]

从集合中删除元素

SPOP key [count]

从集合中随机弹出count个数量的元素,count不指定就弹出1个

SRANDMEMBER key [count]

从集合中随机返回count个数量的元素,count不指定就返回1个

SINTER key [key ...]

将指定的集合进行“交集”操作

SINTERSTORE dest key [key ...]

取交集,另存为一个set

SUNION key [key ...]

将指定的集合执行“并集”操作

SUNIONSTORE dest key [key ...]

取并集,另存为set

SDIFF key [key ...]

将指定的集合执行“差集”操作

SDIFFSTORE dest key [key ...]

取差集,另存为set

  4:hash操作

Hash数据类型的键值对中的值是“单列”的,不支持进一步的层次结构

key

field:value

"k01":"v01"

"k02":"v02"

"k03":"v03"

"k04":"v04"

"k05":"v05"

"k06":"v06"

"k07":"v07"

从前端到后台的对应关系

1)JSON

            stu:{"stu_id":10,"stu_name":"tom","stu_age":30}

2)java

public class Student {
private Integer stuId;//10
private String stuName;//"tom"
private Integer stuAge;//30
...
}

Student stu=new Student()’
stu.setStuId=10;
stu.setStuName=”tom”;
stu.setStuAge=30;

3)Redis Hash

key

value(hash)

stu

stu_id

10

stu_name

tom

stu_age

30

常规操作

HSET key field value

为key中的field赋值value

HMSET key field value [field value ...]

为指定key批量设置field-value

HSETNX key field value

当指定key的field不存在时,设置其value

HGETALL key

获取指定key的所有信息(field和value)

HKEYS key

获取指定key的所有field

HVALS key

获取指定key的所有value

HLEN key

指定key的field个数

HGET key field

从key中根据field取出value

HMGET key field [field ...]

为指定key获取多个filed的值

HEXISTS key field

指定key是否有field

HINCRBY key field increment

为指定key的field加上增量increment

5:zset操作

      zset是一种特殊的set,在保存value的时候,为每个value多保存了一个score信息,根据该信息,进行排序。

      这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了

ZADD key  [score member ...]

添加

ZSCORE key member

返回指定值的分数

ZRANGE key start stop [WITHSCORES]

返回指定区间的值,可选择是否一起返回scores

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

在分数的指定区间内返回数据,从小到大排列

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

在分数的指定区间内返回数据,从大到小排列

ZCARD key

返回集合中所有的元素的数量

ZCOUNT key min max

统计分数区间内的元素个数

ZREM key member

删除该集合下,指定值的元素

ZRANK key member

返回该值在集合中的排名,从0开始

ZINCRBY key increment value

为元素的score加上增量

六、Redis基本操作

  1:数据库连接操作:

命令

说明

举例

备注

select

切换数据库

select 1:切换到1号库

开启redis服务后,一共有16(0-15)个库,默认在0号库

flushdb

清空当前库

 

 

dbsize

查看数据库数据个数

 

 

flushall

通杀全部库

 

 

  2:key的操作

            Redis中的数据以键值对(key-value)为基本存储方式,其中key都是字符串

表达式

描述

KEYS  pattern

查询符合指定表达式的所有key,支持*,?等

TYPE   key

查看key对应值的类型

EXISTS  key

指定的key是否存在,0代表不存在,1代表存在

DEL  key

删除指定key

RANDOMKEY

在现有的KEY中随机返回一个

EXPIRE  key  seconds

为键值设置过期时间,单位是秒,过期后key会被redis移除

TTL key

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

RENAME  key  newkey

重命名一个key,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖

RENAMENX  key  newkey

只有在NEWKEY不存在时能够执行成功,否则失败

 

七、持久化

            Redis主要是工作在内存中。内存本身就不是一个持久化设备,断电后数据会清空。所以Redis在工作过程中,如果发生了意外停电事故,如何尽可能减少数据丢失。

Redis笔记---介绍及使用_第1张图片

    1:ROB简介

        1)RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

工作机制:每隔一段时间,就把内存中的数据保存到硬盘上的指定文件中。

        2)RDB是默认开启的!

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

        3)RDB的缺点是最后一次持久化后的数据可能丢失

   2:ROB常用属性配置

属性

含义

备注

save

保存策略

 

dbfilename

RDB快照文件名

 

dir

RDB快照保存的目录

必须是一个目录,不能是文件名。最好改为固定目录。默认为./代表执行redis-server命令时的当前目录!

stop-writes-on-bgsave-error

是否在备份出错时,继续接受写操作

如果用户开启了RDB快照功能,那么在redis持久化数据到磁盘时如果出现失败,默认情况下,redis会停止接受所有的写请求

rdbcompression

对于存储到磁盘中的快照,可以设置是否进行压缩存储。

如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,

    可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

rdbchecksum

是否进行数据校验

在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,

 如果希望获取到最大的性能提升,可以关闭此功能。

2:ROB数据丢失情况

        两次保存的时间间隔内,服务器宕机,或者发生断电问题

 

3:ROB的触发

    ①基于自动保存的策略;

    ②执行save,或者bgsave命令!执行时,是阻塞状态.

    ③执行flushall命令,也会产生dump.db,单但是是空的,

    ④执行shutdown命令时,也会主动地备份数据;

 

4:ROB的优缺点

        Redis笔记---介绍及使用_第2张图片

2:AOF

    1:简介

        1)AOF是以日志的形式来记录每一个操作,将每一次对数据进行新建、修改的命令保存到指定文件中。Redis重新启动时读取这个文件,重新执行新建、修改数据的指令恢复数据。

        2)默认不开启,需手动开启

        3)AOF文件的保存路径,同RDB的路径一致

        4)AOF保存的命令只会是对数据进行修改的数据,即写操作!!

        5)当RDB和AOF存储的数据不一致时,按照AOF恢复,用为AOF是RDB的补充。备份周期更短,也就更可靠。

    2:AOF保存策略

appendfsync     always

每次产生一条心的修改数据的命令都会执行保存操作;效率低但是安全。

appendfsync     everysec                  推荐(默认)

每秒执行一次保存操作,如果在未保存当前秒内操作发生断电,仍然会导致一部分数据丢失(那一秒内的数据)

appendfsync     no

从不保存。将数据交给操作系统来处理,更快但不安全

    3:AOF常用属性

属性

含义

备注

appendonly

是否开启AOF功能

默认是关闭的

appendfilename

AOF文件名称

 

appendfsync

AOF保存策略

官方建议everysec

no-appendfsync-on-rewrite

在重写时,是否执行保存策略

执行重写,可以节省AOF文件的体积;而且在恢复的时候效率也更高。

auto-aof-rewrite-percentage

重写的触发条件

当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写

auto-aof-rewrite-min-size

设置允许重写的最小aof文件大小

避免了达到约定百分比但尺寸仍然很小的情况还要重写

aof-load-truncated

截断设置

如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load

 

4:AOF文件的修复

    如果AOF文件中出现了残余命令,会导致服务器无法启动,此时会借助redis-check-aof工具修复。

    命令:reids-check-aof   --fix  文件

5:AOF的优缺点

     

优点:

  1.     备份机制更加稳健,丢失数据概率更低

  2.     可读的日志文本,通过操作AOF文件,可以处理误操作。

 

 

缺点:

  1.     比起RDB占用更多的磁盘空间

  2.     恢复备份速度慢

  3.     如果每次读写都同步的话,有一定的性能压力

  4.     存在个别的bug,造成不可恢复。

 

你可能感兴趣的:(笔记,Redis数据库,Redis,笔记)