Redis

1.Redis安装

官网下载安装包后上传至linux中的/opt目录,并使用tar -zxvf redis-xxx.tar.gz进行解压
之后进入解压后目录,运行make命令,完成后执行make install命令
中间出现错误可能是未安装gcc
redis默认安装在/usr/local/bin目录下

1.1.前台启动(不推荐)

使用命令redis-server

1.2.后台启动

使用cp redis.conf /etc/redis.conf命令将安装目录/opt/redis-xxx下的redis.conf复制到/etc文件夹下
修改配置文件,在浏览状态下使用/关键字的方式进行查找,将daemonize no改为daemonize yes
使用redis-server /etc/redis.conf启动redis
使用ps -ef|grep redis查看启动状态

使用redis-cli连接redis

1.3.关闭

(1)方式一:在redis-cli命令行中输入shutdown命令
(2)方式二:通过在ps -ef|grep redis查询出进程号,并使用kill命令关闭:kill -9 进程号

2.redis相关知识

默认提供16个数据库,类似于数组,下标从0开始,初始默认使用0号库
使用select <dbid>切换数据库,如select 8
统一密码管理,所有库同样密码
dbsize可以查看当前数据库的key的数量
flushdb清空当前库
flushall通杀全部库

2.1.redis键

keys *查看当前库所有键
exists key判断某个key是否存在
type key查看key是什么类型
del key删除指定key的数据
unlink key根据key选择非阻塞删除(仅将keys从keyspace元数据中删除,真正的删除会在后续进行异步操作)
expire key 10为给定的key设置过期时间(10秒)
ttl key查看key还有多少秒过期,-1表示永不过期,-2表示已过期

3.常用数据类型

3.1.String类型

String是Redis最基本的类型,可以理解成和Memcached一模一样的类型,一个key对应一个value
String类型是二进制安全的,意味着Redis的string可以包含任何数据,比如jpg图片或者序列化的对象
String类型是Redis最基本的数据类型,一个Redis字符串value最多可以是512M

4.redis配置

(1)配置文件中bind 127.0.0.1要注释掉,同时关闭保护模式,否则只能本机连接redis


(2)tcp-backlog值为未完成TCP三次握手队列与已完成TCP三次握手队列之和,在高并发情况下,需要一个高backlog值来避免慢客户端连接问题
(3)timeout为0(单位为秒)指客户端与服务端的连接永不超时,即不会自动断开,此属性表示连接空闲多久会断开
(4)tcp-keepalive检测心跳,定时检测客户端是否宕机,为0表示关闭检测

5.redis事务

redis事务是一个单独的隔离操作,事务中所有的命令都会序列化、按顺序的执行,事务在执行的过程中,不会被其他客户端发送的命令请求所打断
redis事务的主要作用就是串联多个命令防止别的命令插队

5.1.三个基本命令:

(1)Multi
(2)Exec
(3)Discard
输入Multi命令开始,输入的命令都会一次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行
组队的过程中可以通过Discard放弃组队

5.2.事务的错误处理

如果组队中某个命令出现报告错误,则执行时整个的所有队列均会被取消
如果执行阶段某个命令出现错误,则只有报错的命令不会被执行,而其他的命令都会成功

5.3.事务的冲突

(1)悲观锁
每次拿数据时都会上锁,致使其他人需要拿数据时都会block直到拿到锁,传统关系型数据库就用到许多这种锁机制,如行锁、表锁等,读锁、写锁等,都是在做操作之前先上锁
此种方式效率低
(2)乐观锁
添加版本号字段,在更新数据时判断在此期间是否有人更新此数据,可以使用版本号机制,乐观锁适用于多读的应用类型,这样可以提高吞吐量,Redis就是用这种check-and-set机制实现事务的

5.4.Watch与Unwatch

在执行Multi之前,先执行watch key1 [key2],可以监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将会被打断
Unwatch可用于取消命令对所有key的监视,如果在执行watch之后,exec或者discard命令被执行,则不需要再执行unwatch

5.5.Redis事务三特性

(1)单独的隔离操作
事务中所有命令都会序列化、按顺序执行,事务在执行过程中,不会被其他客户端发送的请求所打断
(2)没有隔离级别的概念
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行
(3)不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
(3)不保证原子性

posted @ 2021-08-21 19:40  kanaliya  阅读(30)  评论(0)    收藏  举报