Redis学习笔记

93 阅读4分钟

Redis简介

  • 单线程高性能,所有运算都是内存级别(纳秒)的运算。Redis读的数度是110000次/s,写的数度是81000次/s。(类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1))

  • 支持丰富的数据结构存储

  • Redis的所有操作都是原子性,多个操作也支持原子性

Linux安装Redis

安装步骤:

#安装gcc
yum install gcc
#在/usr/local文件夹下新建redis文件夹,把下载好的redis-5.0.8.tar.gz放在redis下,并解压
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
tar xzf redis-5.0.2.tar.gzcd redis-5.0.8
#进入到解压好的redis-5.0.8目录下,进行编译与安装
make & make install
#启动并指定配置文件
src/redis-server redis. conf (注意要使用后台启动,所以修改redis .conf里的daemonize改为yes)
#验证启动是否成功
ps -ef | grep redis
#进入redis客户端
/usr/local/redis/redis-5.0.8/src/redis-cli

Redis基础结构

Redis有5种基础数据结构,String(字符串常用)、List(列表)、Set(集合)、Hash(哈希常用)、Zset(有序集合)

(key-value内存数据库)

Hash(字典) 相对于String,它查询快、定位快。 缺点:存储消耗要高于String 如果需要很多次拿对象中单个属性就用Hash,否则用String存储(json串存储)

使用redis原子操作做分布式锁

incr的使用

>incr lock
>1

假设有三个客户端对lock进行incr操作,先去拿的会拿到1,那么我们就认为谁拿到1谁就拿到了这把锁,拿到锁等执行方法结束后,执行一下**decr lock** 就会把lock还原,也就是释放掉这把锁,这样当三个客户端全部执行完毕后,lock变回0,其他客户端可以继续使用

Setnx的使用

Setnx
setnx (key) (value) 

如果当前key不存在就set,命令行返回1,存在就不set,命令行返回0在分布式锁中的应用,如果有多个客户端都要执行这个操作,那么谁拿到1就认为谁拿到这把锁,方法执行完毕后通过del释放锁

Redis高级命令

  • keys : 全量遍历key,列出满足正则表达式规则的key

  • scan : 渐进式遍历key 例

执行后会返回

  • 1.当前扫描到key的游标

  • 2.从游标为0的一千条数据中以key99开头的key

I/O多路复用

redis利用epoll实现I/O多路复用,将连接信息和事件串行化,交给事件分派器,时间分派器再交给处理器,所以在同一事件redis只会有一个命令在执行

持久化三种方式

当内存中有很多数据,万一redis忽然宕机那么数据就没了,所以需要用到持久化 当前4.0之前用到的是RDB、AOF两种模式 4.0之后是用到的是混合持久化

1.RDB(快照)

redis默认用的是这种模式,它二进制的存储格式 相关配置在redis.config-snapshotting下配置

save 900 1 --900秒内有一次变动就会自动备份,一下类似
save 300 10
save 60 10000

优点:恢复数据快

缺点: 可能存在丢失数据的情况,如果说save设置每60内如果有一万次改动就自动备份,这时当改动到9999次的时候,忽然宕机,那么这一批数据就可能会丢失

2.AOF

把命令(set操作,数据修改等)写到aof文件中,get这类读取命令不会进行备份,存磁盘,性能高 设置AOF持久化,redis.conf-appendonly 设为yes

优点:速度快、丢失数据的几率较低,每秒备份一次

缺点:如果aof文件特别大的时候,redis重启会特别慢,需要把命令都重新执行一遍

3.混合持久化

开启混合持久化

#aof-use-rdb-preamble yes (no改为yes)

混合持久化是基于AOF持久化的基础上,备份会生成一个包含RDB和AOF两种格式的AOF文件,也就是混合持久化结合了两种持久化模式 当后台进行备份时,会把备份开始之前的数据做一个快照,保存在RDB格式这一块,在备份开始之后再写入进来的命令,会追加在混合持久化文件的AOF格式部分

优点:即减少了RDB模式丢数据的可能,也缩短了当AOF文件过大时redis的重启时间

第一次写,编辑器还用不习惯 再接再厉!!