超详细的Redis数据库入门教程,还有redis实践电子书分享
mhr18 2024-11-02 12:00 22 浏览 0 评论
Redis简介
要想了解redis就需要知道什么是非关系型数据库NoSQL(not only sql)?
sql数据库适合用于关系特别复杂的数据查询场景,nosql反之;sql对事务的支持非常完善,而nosql基本不支持事务,两者在不断地取长补短,呈现融合趋势。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色
特性和优势
应用场景
redis安装与配置
以ubuntu为例:
# 下载
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
# 解压
tar xzf redis-4.0.9.tar.gz
# 移动,放到usr/local?录下
sudo mv ./redis-4.0.9 /usr/local/redis/
# 进?redis?录
cd /usr/local/redis/
# 生成
sudo make
# 测试,这段运?时间会较?
sudo make test
# 安装,将redis的命令安装到/usr/local/bin/?录
sudo make install
# 安装完成后,我们进入目录/usr/local/bin中查看
cd /usr/local/bin
ls -all
redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof AOF文件修复工具
redis-check-rdb RDB文件检索工具
# 配置?件,移动到/etc/?录下
sudo cp /usr/local/redis/redis.conf /etc/redis/
核心配置选项
简单命令
# 查看帮助?档
redis-ser查看redis服务器进程ver --help
#
数据操作
redis是key-value的数据结构,每条数据都是?个键值对
键的类型是字符串
注意:键不能重复
值的类型分为五种:字符串string、哈希hash、列表list、集合set、有序集合zset
# string类型
增、改
如果设置的键不存在则为添加,如果设置的键已经存在则修改
set name itcast 设置键为name值为itcast的数据
setex aa 3 aa 设置键为aa值为aa过期时间为3秒的数据
mset a1 python a2 java a3 c 设置键为a1值为python、键为a2值为java、键为a3值为c
append a1 haha 向键为a1中追加值haha
获取
get name 获取键name的值
mget a1 a2 a3 获取键a1、a2、a3的值
# 键命令
查找键,参数?持正则表达式
keys * 查看所有键
exists a1 判断键是否存在,如果存在返回1,不存在返回0
type key 查看键对应的value的类型
del key1 key2 … 删除键及对应的值
expire key seconds 设置过期时间,以秒为单位
ttl key 查看有效时间,以秒为单位
# hash类型
增加、修改
hset user name itheima 设置键?user的属性name为itheima
hmset u2 name itcast age 11 设置键u2的属性name为itcast、属性age为11
获取
hkeys u2 获取键u2的所有属性
hvals key 获取所有属性的值
hget u2 name 获取键u2属性name的值
hmget u2 name age 获取键u2属性name、age的值
删除
hdel u2 age 删除键u2的属性age
# list类型
增加
lpush a1 a b c 从键为a1的列表左侧加?数据a 、 b 、c
rpush a1 0 1 从键为a1的列表右侧加?数据0、1
linsert a1 before b 3 在键为a1的列表中元素b前加?3
获取
lrange a1 0 -1 获取键为a1的列表所有元素
lset a 1 z 修改键为a的列表中下标为1的元素值为z
删除
lrem a2 -2 b 从a2列表右侧开始删除2个b
ltrim key 0,4 截取
# set类型
? ?序集合
? 元素为string类型
? 元素具有唯?性,不重复
? 说明:对于集合没有修改操作
增加
sadd a3 zhangsan sili wangwu 向键a3的集合中添加元素zhangsan、lisi、wangwu
获取
smembers a3 获取键a3的集合中所有元素
删除
srem a3 wangwu 删除键a3的集合中元素wangwu
# zset类型
有序集合
每个元素都会关联?个double类型的score,表示权重,通过权重将元素从?到?排序
增加
向键a4的集合中添加元素lisi、wangwu、zhaoliu、zhangsan,权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
获取
zrange a4 0 -1 获取键a4的集合中所有元素
zrangebyscore a4 5 6 获取键a4的集合中权限值在5和6之间的成员
zscore a4 zhangsan 获取键a4的集合中元素zhangsan的权重
删除
zrem a4 zhangsan 删除集合a4中元素zhangsan
zremrangebyscore a4 5 6 删除集合a4中权限在5、6之间的元素
其他特性及高级用法
事务
提供了基本的事务支持,可以允许一组指令操作按照原子性(不被打断的情况下)执行,
但是并没有提供回滚操作的支持,而且一组指令中如果有指令执行出错,也不会终止事务的执行,事务会继续执行下去,把后续的指令都执行完。
- multi 开启事务
- exec 执行事务
watch指令 监视
一般会结合着redis事务的 multi 、exec一起使用
首先可以使用watch 让redis帮助我们监视某些redis数据的变化,然后再创建事务,当要开始执行事务的时候,如果由watch监视的变量(数据)发生了变化,则redis事务的任何指令都不会被执行,事务直接停止,如果watch监视的变量(数据)没有发生变化,则redis事务会执行到底(不被打断)。
持久化
redis可以将数据写入到磁盘中,redis支持持久化
- RDB 快照持久化 默认开启
- 将内存中的redis的所有数据,写入磁盘文件
- redis会创建子进程来执行
- 执行的时机:
- 定期持久化 (自动)
save 900 1 # 900秒内进行过1次写操作
save 300 10 # 300秒内进行过10次写操作
save 60 10000 # 60秒内进行过10000次写操作
修改redis配置文件 可以调整 /etc/redis/xxxx.conf
- BGSAVE (手动)SAVE
- SHUTDOWN (手动) 关闭
- 缺点:需要将内存中的所有redis数据全部写入到磁盘,性能有开销影响,不会太快 优点:相比AOF 而言 持久化的磁盘文件 要小很多
- AOF 追加文件方式持久化 默认不开启的 如果开启 appendonly yes
- 将执行过的redis 写操作 记录到磁盘文件中
- 执行的时机:
# appendfsync always # 每执行一个写操作,就立即记录到磁盘中
appendfsync everysec # 每秒写入一次磁盘
# appendfsync no # redis本身不再保证每个操作或每秒中都能立即写入磁盘,而是有操作系统决定把缓存的写操作何时写入磁盘
- redis指令执行时间的数量级 : 1秒钟可以执行10000+的指令
- 优点: 持久化记录的执行效率相比RDB 稍高,缺点: 持久化产生的磁盘文件很大(因为记录了所有的操作)
- RDB 可以和AOF同时使用
Redis 复制集
redis 主从同步, 起到了数据备份的作用
- 可以在运行的redis中 执行slaveof指令
- 可以在配置文件中 执行redis从属于另外哪台机器
可以使用info Replication 查看机器的主从角色
一般slave机器 (备份机) 是不支持写操作的
在redis的主从同步 复制集机器中 一般不会在进行读写分离了
redis复制集 只能一主 多从
哨兵 sentinel
是redis官方提供的 用于管理主从机器 (复制集) 集群,可以方便的进行redis服务器监视、自动故障转移等操作
哨兵实际上就是一个单独运行的进程 redis-sentinel ,这个程序已经随着redis服务的安装一起安装好了,只需要运行即可。
作用:
- Monitoring 监视 帮助我们判断哪些redis服务程序已经死掉,哪些还在存活
- 用网络通讯完成 定期的发送网路包(心跳包) 比如每1s发送一次 心跳机制
- Notification 通知
- Automatic failover 自动故障转移 (核心)
- 在master死掉的时候,选出一个新master,并且将其他slave都slaveof这个新master
- Configuration provider 配置提供
总结: 一般只要使用了redis的复制集,就会一起配合使用哨兵,来完成高可用
使用方式:
redis-sentinel? /etc/redis/xxx.conf
# 配置文件
bind 127.0.0.1 ? # 哨兵运行的ip
port 26380 ? # 哨兵运行的端口
daemonize yes? # 是否以后台的守护进程方式运行
logfile /var/log/redis-sentinel.log
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# 说明
sentinel monitor mymaster 127.0.0.1 6380 2
* mymaster -> 我们给让哨兵监视的这个redis复制集集群起的名字,以master为主
* 2 表示是有几台以上的哨兵程序判断 redis服务死掉,才进行故障转移
- 哨兵程序至少要运行三个以上
- 要求哨兵程序尽量分散,分散到不同的机器里,不要一窝端
- 哨兵为了完成故障转移,会自动修改redis的配置文件,所以仅仅依靠redis配置文件判断机器的主从角色,并不是很方便, 可以使用info Replication 查看机器的主从角色
其中redis还有许多相关命令,具体可以参考官方文档doc.redisfans.com,还有更多的内容包括redis主从和集群的配置,还有redis实战,都可以从下面这本资料中学习到,超级好用。列举一些截图:
作者简介:Python菜鸟工程师,将在接下来的一段时间内与大家分享一些与Python相关的知识点。如若文中出现问题,各位大佬多多指点,互相学习。喜欢的关注一个吧!谢谢!
相关推荐
- 如何检查 Linux 服务器是物理服务器还是虚拟服务器?
-
在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...
- 第四节 Windows 系统 Docker 安装全指南
-
一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...
- C++ std:shared_ptr自定义allocator引入内存池
-
当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...
- Activiti 8.0.0 发布,业务流程管理与工作流系统
-
Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...
- MyBatis动态SQL的5种高级玩法,90%的人只用过3种
-
MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...
- Springboot数据访问(整合Mybatis Plus)
-
Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...
- 盘点金州勇士在奥克兰13年的13大球星 满满的全是...
-
见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...
- Mybatis入门看这一篇就够了(mybatis快速入门)
-
什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...
- Springboot数据访问(整合druid数据源)
-
Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...
- Linux 中的 "/etc/profile.d" 目录有什么作用 ?
-
什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...
- 企业数据库安全管理规范(企业数据库安全管理规范最新版)
-
1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...
- Oracle 伪列!这些隐藏用法你都知道吗?
-
在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...
- Oracle 高效处理数据的隐藏神器:临时表妙用
-
各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...
- Oracle 数据库查询:多表查询(oracle多表关联查询)
-
一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...
- 一文掌握怎么利用Shell+Python实现多数据源的异地备份程序
-
简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 如何检查 Linux 服务器是物理服务器还是虚拟服务器?
- 第四节 Windows 系统 Docker 安装全指南
- C++ std:shared_ptr自定义allocator引入内存池
- Activiti 8.0.0 发布,业务流程管理与工作流系统
- MyBatis动态SQL的5种高级玩法,90%的人只用过3种
- Springboot数据访问(整合Mybatis Plus)
- 盘点金州勇士在奥克兰13年的13大球星 满满的全是...
- Mybatis入门看这一篇就够了(mybatis快速入门)
- Springboot数据访问(整合druid数据源)
- Linux 中的 "/etc/profile.d" 目录有什么作用 ?
- 标签列表
-
- oracle位图索引 (74)
- oracle基目录 (50)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (53)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)