当前位置: 首页 > news >正文

Bingo学习--redis

1.NoSQL数据库简介

1.nosql数据库概念
nosql = not only sql, 不仅仅是sql, 泛指非关系型数据库, nosql不依赖业务逻辑方式存储, 而以简单的key-value模式存储, 因为大大的增加了数据库的扩展能力
	并不遵循sql标准
	不支持acid
	远超于sql的性能
2.nosql应用场景
	对数据高并发的读写
	海量数据的读写
	对数据高可扩展性的
3.nosql不适用场景
	需要事物支持
	基于sql的结构化查询存储, 处理复杂的关系, 需要及时查询
	(用不着sql或者用了sql也不行的情况, 请考虑用nosql)
4.Memcached
	很早出现的nosql数据库
	数据都存在内存中, 一般不持久化
	支持简单的key-value模式, 支持模式单一(只支持字符串)
	一般是作为缓存数据库辅助持久化的数据库库
5.Redis
	几乎覆盖了Memcached的绝大部分功能
	数据都存在内存中, 支持持久化, 主要用作数据备份恢复
	出了支持简单的key-value模式, 还支持多种数据库结构的存储, 比如list, set, hash, zset等
	一般是作为缓存数据库辅助持久化的数据库
6.MongoDB
	高性能, 开源, 模式自由(schema free)的文档型数据库
	数据都在内存中, 如果内存不足, 把不常用的数据保存到硬盘
	虽然是key-value模式, 但是对value(尤其是json)提供了丰富的查询功能
	支持二进制数据及大型对象
	可以根据数据的特点代替RDBMS(关系型数据库管理系统), 成为独立的数据库, 或者配合RDBMS, 存储特定的数据

2.Redis6概述和安装

Redis是一个开源的key-value存储系统
Redis支持多种数据结构存储, string-字符串, list-链表, set-集合, zset-有序集合, hash-哈希类型
Redis的数据类型都支持 push/pop, add/remove 及取交集并集和差集, 以及更丰富的操作, 而且这些操作都是原子性的
Redis支持各种不同方式的排序
Redis为了保证效率, 数据都是缓存在内存中
Redis会周期性的把更新的数写入磁盘或者把修改操作写入追加的记录文件
Redis实现了master-slave(主从)同步

1.配合关系型数据库做高速缓存
	高频次、热门访问的数据, 降低数据库IO
	分布式架构, 做session共享
2.centos安装redis
	1)下载地址: https://redis.io
	2)上传redis安装包到linux
	3)安装C语言编译环境
		yum install centos-release-scl scl-utils-build
		yum install -y devtoolset-8-toolchain
		scl enable devtoolset-8 bash
		PS: 上面3个命令依次执行, 或者直接安装gcc: yum install -y gcc
		
		测试gcc版本: gcc --version
		gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
		Copyright (C) 2015 Free Software Foundation, Inc.
		This is free software; see the source for copying conditions.  There is NO
		warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
	4)解压
		tar -zxvf redis-6.2.7.tar.gz
	5)编译为C文件
		cd redis-6.2.7
		make
	6)安装
		make install
	7)查看默认安装目录
		cd /usr/local/bin/
		ll
		
		-rwxr-xr-x. 1 root root 4830112 Sep  3 19:57 redis-benchmark
		lrwxrwxrwx. 1 root root      12 Sep  3 19:57 redis-check-aof -> redis-server
		lrwxrwxrwx. 1 root root      12 Sep  3 19:57 redis-check-rdb -> redis-server
		-rwxr-xr-x. 1 root root 5004224 Sep  3 19:57 redis-cli
		lrwxrwxrwx. 1 root root      12 Sep  3 19:57 redis-sentinel -> redis-server
		-rwxr-xr-x. 1 root root 9535952 Sep  3 19:57 redis-server

		redis-benchmark: 性能测试工具
		redis-check-aof: 修复有问题的AOF文件
		redis-check-dump: 修复有问题的dump.rdb文件
		redis-sentinel: redis集群使用
		redis-server: redis服务启动命令
		redis-cli: redis客户端, 操作入口
	8)启动redis-前台启动
		redis-server
	9)启动redis-后台启动
		修改redis.conf文件 /usr/local/src/redis/redis-6.2.7/redis.conf
		cp redis.conf /usr/local/etc/ #复制配置文件到另一个目录
		vim /usr/local/etc/redis.conf 修改为 daemonize yes #允许后台启动
		redis-server /usr/local/etc/redis.conf #根据配置文件启动
		
		查看redis运行情况
		[root@localhost redis-6.2.7]# ps -ef | grep redis
		root       6620      1  0 20:22 ?        00:00:00 redis-server 127.0.0.1:6379
		root       6632   1921  0 20:23 pts/0    00:00:00 grep --color=auto redis
	10)通过客户端链接redis
		[root@localhost redis-6.2.7]# redis-cli
		127.0.0.1:6379> 
		
		#查看联通状态
		127.0.0.1:6379> ping
		PONG
	
		#关闭--通过客户端
		127.0.0.1:6379> shutdown
		not connected> 

		关闭--通过杀死redis进程
		[root@localhost redis-6.2.7]# ps -ef|grep redis
		root       6678      1  0 20:29 ?        00:00:00 redis-server 127.0.0.1:6379
		root       6686   1921  0 20:29 pts/0    00:00:00 grep --color=auto redis
		[root@localhost redis-6.2.7]# kill -9 6678

3.常用五大数据类型(操作命令查看地址: http://www.redis.cn/commands.html)

1.redis知识相关介绍
	1)端口6379从何而来, Alessia Merz(女演员), Merz拼音九键位置是6379
	2)默认16个数据库, 下标从0开始, 初始默认使用0号数据库
		使用 select <dbid> 来切换数据库, 例如: select 8
		127.0.0.1:6379> select 15
		OK
	3)统一密码管理, 所有库同样密码
	4)查看当前库key的数量
		127.0.0.1:6379[15]> dbsize
		(integer) 0
	5)清空库
		flushdb: 清空当前库
		flushall: 清空所有库
	6)Redis使用单线程+多路IO复用技术
		多路复用的指使用一个线程来检查多个文件描述的就绪状态, 如果有一个文件描述就绪则返回, 否则阻塞直到超时
		得到就绪状态后进行真正的操作可以在一个线程里执行, 也可以启动线程执行(比如线程池)
		举例: 黄牛买票: 1,2,3人找黄牛买票去不同的地方, 黄牛问火车站售票员, 这三个行程是否邮票, 有则通知对应人员去窗口购票, 没有则购票人等消息
		多路复用: 黄牛一个人去窗口, 一个人问了三张车票信息
2.Redis键(key)
	1)keys * 查看当前数据库所有key (匹配: keys *1)
	2)exists key 判断某个key是否存在, 存在返回1, 不存在返回0
	3)type key 查看key是什么类型
	4)del key 删除指定key的数据
	5)unlink key 根据value选择非阻塞删除
		仅将keys从keyspace元数据中删除, 真正的删除会在后续异步操作
	6)expire key 10 10秒钟: 为key设置过期时间
	7)ttl key 查看还有多少秒过期, -1 永不过期, -2 已过期
3.String类型
	1)简介
		String是redis最基本的类型
		string类型是二进制安全的, 意味着redis的string可以包含任何数据, 如jpg图片或者序列化对象
		一个redis字符串value最大值是512M
	2)常用命令
		set <key> <value>
		set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
		EX seconds : key的超时秒数
		PX milliseconds : key的超时毫秒数, 与EX互斥
		NX : 当数据库中key不存在时添加
		XX : 当数据库中key存在时添加, 与XX互斥

		get <key> 查询key对应的值
		append <key> <value> 将给定的value追加到原值末尾
		strlen <key> 获取key对应value的长度
		setnx <key> <value> 只有在key不存在时设置key对应的值
		incr <key> 
			将key对应的数字值增1
			只能对数字值操作, 如果为空, 新增值为1
			127.0.0.1:6379> incr k2 #k2不存在
			(integer) 1
			127.0.0.1:6379> get k2
			"1"
		decr <key>
			将key对应的数字值减1
			只能对数字值操作, 如果为空, 新增值为-1
		incrby / decrby <key> <步长> 将key对应的数字值增加 / 减去指定步长
			incrby / decrby 操作保持原子性(redis中特有的名词)
			原子性: 不会被线程调度机制所打断的操作
		mset <key1> <value1> <key2> <value2>... 同时设置一个或多个值
		mget <key1> <key2> <key3>... 同时取多个key对应的值
		msetnx <key1> <value1> <key2> <value2>... 同时设置一个或多个值, 当且仅当所有给定的key都不存在时执行成功
		getrange <key> <startIndex> <endIndex> 获取key对应的字符串进行截取
		setrange <key> <index> <value> 获取key对应的字符串, 替换指定下标字符串为对应值
		setex <key> <seconds> <value> 保存数据时设置过期时间
		getset <key> <value> 设置新值的同时获取旧值
	3)数据结构
		String的数据结构为简单动态字符串(Simple Dynamic String, 缩写SDS), 是可以修改的字符串, 内部结构实现上类似于java的ArrayList, 采用与分配冗余空间的方式来减少内存的频繁分配
		当字符串长度小于1M时, 扩容都是加倍现有空间, 如果超过1M, 扩容时只会多扩1M空间, 字符串最大占用空间为512M

4.Redis6配置文件详解

5.Redis6的发布和订阅

6.Redis6新数据类型

7.Jedis操作Redis6

8.Redis6与SpringBoot整合

9.Redis6的事物操作

10.Redis持久化之RDB

11.Redis6持久化之AOF

12.Redis6的主从复制

13.Redis6集群

14.Redis6应用问题解决

15.Redis6新功能

相关文章:

  • Vue学习第19天——vue脚手架配置代理
  • day13学习总结
  • K8s基础知识总结及常用基本关键命令
  • 内创业革命
  • 【番外篇】如何制作慕斯蛋糕
  • ps2022 - add text
  • 刷题记录:NC208813求逆序数
  • 遗传算法GA求解连续函数问题
  • React(11)-全局共享通信Context
  • 搞脑筋的日历积木
  • Samba+ldap认证
  • 第一章 赛前准备工作
  • 周末学习总结(LIO标定+kitti数据集的使用+evo工具的使用+开源数据集+ssh的使用)
  • 计算机组成原理_Cache与主存的映射方式
  • 2002/9/3
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Leetcode】104. 二叉树的最大深度
  • javascript面向对象之创建对象
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SpingCloudBus整合RabbitMQ
  • springMvc学习笔记(2)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 安装python包到指定虚拟环境
  • 力扣(LeetCode)965
  • 免费小说阅读小程序
  • 排序算法学习笔记
  • 前嗅ForeSpider采集配置界面介绍
  • 思维导图—你不知道的JavaScript中卷
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序--------语音识别(前端自己也能玩)
  • 怎样选择前端框架
  • 1.Ext JS 建立web开发工程
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 组复制官方翻译九、Group Replication Technical Details
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Panda3d 碰撞检测系统介绍
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #传输# #传输数据判断#
  • $L^p$ 调和函数恒为零
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (六)c52学习之旅-独立按键
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (新)网络工程师考点串讲与真题详解
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转载)虚函数剖析
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net Memory Profiler的使用举例
  • .net 程序发生了一个不可捕获的异常
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道