String字符串类型的使用:
set name v1 设置值
keys * 查看所有key
get name v1 获得值
type name key的类型
append v1 loveyou 追加字符串
exists v1 键是否存在
append name hello 如果追加的键不存在,则直接新建一个key
set views 0
incr views 执行加1 (自增1)
decr views 执行减1 (自减1)
incrby views 10 执行自增加10
decr by views 10 执行自减加10
getrange view 0 1 获得键的字符串范围
setrange view 0 xx 替换指定位置开始的字符串
setex(set with expire)设置过期时间
setex key3 30 "hellolo" 设置key3键30秒过期时间 值是hellolo
setnx(set if not exist)不存在的设置,不存在的话设置为后面的值,存在则不进行覆盖(分布式锁中会常常使用)
127.0.0.1:6379> setnx name "mysql"
(integer) 0
127.0.0.1:6379> get name
"hello"
List的基本用法
set集合的基本使用:
Hash(哈希数据类型)基本使用:
Zset有序集合:
其他基本操作可以参照文档进行使用!
事务 :
要么同时成功,要么同时失败,原子性!
redis单条命令保存具有原子性,但是事务不保证原子性!
redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序进行执行! 一次性、顺序行、排他性!执行一系列的命令!
redis事务中无隔离级别的概念!
所有的命令在事务中,并没有被直接执行,只有发起执行命令的时候才会被执行!Exec
------ 队列 set set set 执行 -----
redis的事务:
开启事务(multi)
命令入队(写命令)
执行事务(exec)
127.0.0.1:6379> multi #开启事务
OK
127.0.0.1:6379> set k1 v1 #命令入队
QUEUED
127.0.0.1:6379> set k2 v2 #命令入队
QUEUED
127.0.0.1:6379> set k3 v3 #命令入队
QUEUED
127.0.0.1:6379> exec #执行事务
1) OK
2) OK
3) OK--------------------------------------------------------------------------------------------------------------------
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> discard #取消事务
OK
127.0.0.1:6379> get k4 #事务队列中的命令都没有被执行
(nil)
编译型异常(代码有问题,或者命令错误),事务中的所有命令都不会被执行!
运行时异常(1除以0),事务队列中存在语法错误,执行命令时,其他命令是可以被正常执行,错误命令会抛出异常!
监控:watch
悲观锁:
* 认为什么时候都会出问题,无所做什么都要加锁
乐观锁:
* 很乐观,认为什么时候都不会出问题,所以不会上锁,更新数据的时候去判断一下,在此期间是否有人修改过数据,
* 获取version
* 更新的时候比较version
1、如果发现事务执行失败,需要先解锁,2、获取最新的值,再次监视,3、对比监视的值是否发生了变化,如果没有发生变化,可以执行成功,如果变了就执行失败
jedis的使用:
1、导包
2、连接
3、操作
此为原生的api,最终仍然需要整合到SpringBoot
SpringBoot整合redis:
主要是导包及查看自动配置类及配置文件
对redisTemplate进行自己的序列
Redis配置文件详解:
Redis的持久化:
1、RDB持久化
2、AOF的持久化
主从复制:
1、如果只是在命令行中设置主从机的话,只是临时生效,主机断开之后,从机可以直接连接,但是从机断了之后,不在重新连接,并且是个主机,需要重新进行设置,但是在配置文件中就会永久性的生效
2、从机如果断开之后又重新连接上了主机,会进行数据复制,即进行一次性的全量复制,随后开启增量复制!
哨兵模式(sentinel):
这是简单的哨兵模式配置,也是核心配置!