Redis

Redis

默认16个库,类似数组下标从0开始,初始默认使用0号库。

使用命令select 来切换数据库。例如:select 8

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

flushdb 清空当前库

flushshall 通杀全部库

Redis常用命令

  • key*查看当前库所有key(匹配:key*****1)
  • exists key 判断某个key是否存在
  • type key 查看你的key是什么类型
  • del key 删除指定的key数据
  • unlink key 根据value选择非阻塞删除
  • 仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
  • expire key 10 10秒钟:为给定的key设置过期时间
  • ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已经过期
  • select 命令切换数据库
  • dbsize查看当前数据库的key的数量
  • flushdb清空当前库
  • flushall通杀全部库

Redis常用数据类型

String

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是52M。

List

单键多值

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

Set

Set对外提供的功能和list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,有不希望出现重复数据时,set是一个很好的选择,并且提供了判断某个成员是否在一个set集合内的重要接口,这个也是list锁不能提供的。

Redis的Set是String类型的无序集合。它底层其实是一个value为null的hash表,所以添加、删除,查找的复杂度都是O(1)。

hash

Zset

Redis的发布订阅

复制代码
subscribe channel1

publish channel1 hello

Java整合Redis的客户端工具

Java操作Redis客户端的工具一共有3种,分别是Jedis,Lettuce,Redission。

Redis事务和锁

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他的客户端送来的命令请求所打断。

Redis事务的主要作用就是串联多个命令防止别的命令插队。

Multi、Exec、discard

从输入Multi命令开始,输入的命令都会一次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。

组队的过程中可以通过discard来放弃组队。

事务冲突(悲观锁和乐观锁)

悲观锁

悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁

乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis 就是利用这种 check-and-set机制实现事务的。

watch key [key...]

Redis事务三特性

单独的隔离操作

事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求打断。

没有隔离级别的概念

队列中的命令没有提交之前都不会被实际执行,因为事务提交前任何命令都不会被实际地执行。

不保证原子性

事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚。

Redis持久化

RDB

在指定的时间间隔内将内存中的数据集快照写入磁盘。

AOF

Redis主从复制

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。

  • 读写分离,性能扩展
  • 容灾快速恢复

哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

ster/slaver机制,Master以写为主,Slave以读为主。

  • 读写分离,性能扩展
  • 容灾快速恢复

哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

相关推荐
小夏卷编程1 小时前
jeecg boot 路由缓存失效问题
vue.js·缓存
TDengine (老段)1 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
萧曵 丶2 小时前
事务ACID特性详解
数据库·事务·acid
kejiayuan2 小时前
CTE更易懂的SQL风格
数据库·sql
kaico20182 小时前
MySQL的索引
数据库·mysql
清水白石0083 小时前
解构异步编程的两种哲学:从 asyncio 到 Trio,理解 Nursery 的魔力
运维·服务器·数据库·python
资生算法程序员_畅想家_剑魔3 小时前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
冰冰菜的扣jio3 小时前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
PyHaVolask3 小时前
SQL注入漏洞原理
数据库·sql
ptc学习者4 小时前
黑格尔时代后崩解的辩证法
数据库