数据库
SQL(关系型数据库):关系型数据库就是指二维表格模型,是一种将表示数据的结构化数据和相应的数据之间的对应关系存储在计算机内部的数据库:常见的关系型数据库包括MySQL、Oracle、SQLServer、SQLite、MongoDB等
NoSql(非关系型数据库):非关系型数据库是指不同于关系型数据库的数据库管理系统,它们不采用关系型数据库的文件形式存储数据,而是采用数据对象(如表、记录、文档等)的方式存储数据:常见的非关系型数据库包括NoSql、MongoDB、Redis、HBase、Neo4j、db4o、BaseX等
非关系型数据库和关系型数据库的最大区别在于数据的存储方式。关系型数据库采用的是表格形式进行数据存储,而非关系型数据库则将数据以键值对、文档、图形甚至是列族的形式进行存储。这使得非关系型数据库更加适合存储大量非结构化数据,如文本、日志和机器生成的数据。同时,非关系型数据库比关系型数据库更容易扩展和备份,但在某些方面如数据一致性和事务处理方面可能不如关系型数据库强大
Nosql
Nosql是一个非关系型的数据库,它是一种不同于关系型数据库的数据库管理系统,主要特点是数据存储和查询方式的灵活性和多样性。Nosql的主要应用场景包括非关系型数据存储、列式数据存储和列式数据查询等
MongoDB
MongoDB 采用了分布式文档存储的方式,将数据存储在多个服务器上,并通过分布式索引技术实现高效的查询和索引操作。MongoDB 支持多种数据类型,如 JSON、BSON(一种类 JSON 的数据格式)、Document、Array、Object、Boolean 等,支持复杂的数据结构和查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能;MongoDB 是一个功能强大、易于使用的分布式文档存储数据库,广泛应用于各种场景,如 Web 应用、数据仓库、机器学习
Redis
Redis是一个高性能的内存数据库,支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。它可以用于缓存、键值存储、消息队列、分布式锁、分布式计算等场景。Redis支持客户端和服务器端,可以在多种平台上运行,如Node.js、Python、Java、C++、C等
Redis的演变历程可以分为以下几个阶段:
- 诞生阶段(1993年-2009年):Redis最初是作为一个内存数据库开发的,为了解决网站访问量和磁盘数据库规则的读写模式不再满足的问题。在这个阶段,Redis确定了其简单高效强一致性的"单线程"模式,所有的版本迭代都是围绕不断优化"单线程"的效率,使其不断接近内存读写速度极限的过程
- 集群阶段(2009年-2012年):随着硬件更新迭代的速度越来越快,Redis在性能上遇到了瓶颈。Antirez为了解决这个问题,决定推出集群版Redis,但由于分布式、一致性上的问题,草草收场,该版本Redis被弃用
- 持久化阶段(2012年-):为了解决Redis在持久化方面的问题,Redis社区推出了Lua脚本,使得Redis可以在多种平台上运行,包括Node.js、Python、Java、C++、C等
- 扩展阶段(2015年-):Redis社区不断扩展其功能和特性,如支持分布式锁、持久化、集群等。最近的版本还增加了对C#的支持,以及使用LuaJIT编译Lua代码的能力
- 现代化阶段(2019年至今):Redis社区一直在不断地更新和改进Redis,以适应不断变化的互联网应用需求。最近的版本还加入了对Spanner集群的支持,使得Redis在高并发场景下的性能得到了进一步提升
总之,Redis的演变历程反映了其在不同阶段所面临的问题和解决方案,也体现了Redis社区在不断创新和发展的过程中所取得的成就
Windows安装Redis
- Redis官网下载解压指定目录即可
- 运行服务(redis-cli.exe)和客户端(redis-server.exe)即可
Linux安装Redis
- Redis官网下载tar包
- 使用xftp将tar包传到Linux中(程序一般放在/opt目录中)
[root@localhost opt]# ls redis-7.0.11.tar.gz rh [root@localhost opt]#
- 解压
[root@localhost opt]# tar -zxvf redis-7.0.11.tar.gz [root@localhost opt]# ls redis-7.0.11 redis-7.0.11.tar.gz rh
- 进入解压文件夹,安装 GCC C++ 编译器,自动化编译程序
[root@localhost redis-7.0.11]# yum install gcc-c++ [root@localhost redis-7.0.11]# make [root@localhost redis-7.0.11]# make install [root@localhost redis-7.0.11]# g++ --version
- redies默认安装路径
/usr/local/bin
[root@localhost redis-7.0.11]# cd /usr/local/bin [root@localhost bin]# ls redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server [root@localhost bin]#
- 将redies.config文件拷贝到安装路径
[root@localhost bin]# cp /opt/redis-7.0.11/redis.conf /usr/local/bin/wei/ [root@localhost bin]# ls redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server wei [root@localhost bin]# cd wei/ [root@localhost wei]# ls redis.conf
- vim进入redies.config修改如下:(修改Redis默认后台启动)
daemonize yes
- 通过指定的配置文件启动Redis服务器
[root@localhost bin]# redis-server wei/redis.conf
- 启动Redis客户端
[root@localhost bin]# redis-cli -p 6379 127.0.0.1:6379> ping PONG 127.0.0.1:6379>
- 退出
127.0.0.1:6379> shutdown not connected> exit [root@localhost bin]#
Redis-benchmark
Redis-benchmark 是 Redis 自带的性能测试工具,可以用来测试 Redis 服务器的性能。它可以模拟多个客户端同时向 Redis 服务器发送命令,并统计服务器的响应时间、吞吐量等指标
- 本机端口6379测试100个并发连接数,每个连接100000条请求
redis-benchmark -h localhost -p 6379 -n 100000
基本操作
select x | 切换数据库 |
dbsize | 查看数据库 |
flushdb | 清空当前库 |
keys | 查看所有数据库的key |
flushall | 清空全部数据库 |
exists name | 判断name是否存在 |
expire name 10 | 设置name过期时间 |
ttl name | 查看name过期时间 |
type name | 查看name数据类型 |
Redis五大数据类型
- String类型:最基本的数据类型,可以存储字符串、整数或者浮点数
- List类型:链表结构,可以存储一系列有序的字符串
- Set类型:无序的字符串集合,集合中的元素都是唯一的
- Hash类型:键值对的无序散列表,适合存储对象
- Zset(Sorted Set)类型:有序的字符串集合,每个元素都会关联一个分数,可以按照分数进行排序
String
- set key value:设置 key 的值为 value
- get key:获取 key 的值
- incr key:将 key 的值自增 1
- decr key:将 key 的值自减 1
- setex key seconds value:设置 key 的值为 value,并设置过期时间为 seconds 秒
- mset key1 value1 key2 value2 …:同时设置多个 key 的值
List
- lpush key value1 value2 …:将 value1、value2 等值依次插入到 key 对应的列表的最左边
- rpush key value1 value2 …:将 value1、value2 等值依次插入到 key 对应的列表的最右边
- lpop key:从 key 对应的列表的最左边删除一个元素,并返回该元素的值
- rpop key:从 key 对应的列表的最右边删除一个元素,并返回该元素的值
- lrange key start stop:获取 key 对应的列表中从 start 到 stop 的所有元素
- llen key:获取 key 对应的列表的长度
Set
- sadd key member1 member2 …:将 member1、member2 等值依次插入到 key 对应的集合中
- srem key member1 member2 …:从 key 对应的集合中删除 member1、member2 等值
- smembers key:获取 key 对应的集合中的所有成员
- sinter key1 key2 …:获取 key1、key2 等集合的交集
- sunion key1 key2 …:获取 key1、key2 等集合的并集
Hash
- hset key field value:将 key 对应的哈希表中的 field 字段的值设为 value
- hget key field:获取 key 对应的哈希表中的 field 字段的值
- hdel key field1 field2 …:删除 key 对应的哈希表中的 field1、field2 等字段
- hkeys key:获取 key 对应的哈希表中的所有字段
- hvals key:获取 key 对应的哈希表中的所有值
Zset(Sorted Set)
- zadd key score1 member1 score2 member2 …:将 member1、member2 等值依次插入到 key 对应的有序集合中,并设置它们的 score 值
- zrange key start stop:获取 key 对应的有序集合中从 start 到 stop 的所有成员
- zrem key member1 member2 …:从 key 对应的有序集合中删除 member1、member2 等成员
- zcount key min max:获取 key 对应的有序集合中 score 值在 min 和 max 之间的成员个数
- zcard key:获取 key 对应的有序集合的成员个数
Redis三大特殊数据类型
- Bitmaps:位图数据类型可以用于高效地存储一组布尔值或者状态,比如用于存储用户的在线状态或者统计某个事件发生的次数等。Redis的位图类型支持多种位操作,比如AND、OR、NOT、XOR等,方便地进行位运算
- HyperLogLog:HyperLogLog是一种基数算法,用于估计一个集合中不重复元素的个数。它的算法复杂度是O(1),占用的内存空间也非常小,比较适合用于处理大规模的数据集合。Redis的HyperLogLog类型支持多种操作,比如添加元素、合并多个HyperLogLog
- Geospatial:Geospatial是一种地理位置数据类型,用于存储和查询地理位置信息。Redis的Geospatial类型支持多种操作,比如添加地理位置、查询指定坐标范围内的位置、计算两个位置之间的距离
Geospatial
Geospatial
(地理空间)在 Redis 中是一种数据类型,主要用于存储地理位置信息。它是一个基于有序集合的数据类型,每个元素都对应一个经纬度坐标和一个成员名称,可以通过经纬度坐标对元素进行排序
geoadd
geoadd:添加地理位置信息,经度纬度坐标和标识符
GEOADD cities 116.40 39.90 "Beijing" 121.47 31.23 "Shanghai" 113.27 23.13 "Guangzhou"
GEOADD key longitude latitude member [longitude latitude member ...]
key
:需要添加地理位置信息的 Redis keylongitude
:成员的经度坐标latitude
:成员的纬度坐标member
:成员的名称或标识符
geopos
geopos命令:获取指定城市的经度和纬度:
GEOPOS cities "Beijing"
geodist
geodist:查询给定位置范围内的地理位置成员。该命令会根据给定的经纬度坐标以及半径距离,在指定的 Redis key 中查找满足条件的地理位置成员,并返回符合条件的成员信息
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
key
:需要查询地理位置信息的 Redis key;longitude
:查询的中心点经度坐标;latitude
:查询的中心点纬度坐标;radius
:查询的半径范围;m|km|ft|mi
:半径的单位,可以是米、千米、英尺或英里;WITHCOORD
:返回结果中包含被查询成员的经纬度坐标;WITHDIST
:返回结果中包含被查询成员与查询中心点之间的距离;WITHHASH
:返回结果中包含被查询成员的 geohash 值;COUNT count
:返回结果的数量,可以用于限制查询结果的数量;ASC|DESC
:结果按照距离从近到远(ASC)或从远到近(DESC)排序;STORE key
:将查询结果保存到指定的 Redis key 中;STOREDIST key
:将查询结果及其与查询中心点之间的距离保存到指定的 Redis key 中
georadius
georadius:是 Redis 的一个 geospatial 命令,用于查找一个给定经纬度中心点指定半径范围内的元素
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
key
:待查询的 geospatial keylongitude
:中心点的经度latitude
:中心点的纬度radius
:查询半径,可以是以米、千米、英尺或英里为单位的数值m|km|ft|mi
:单位参数,表示查询半径的单位,分别为米、千米、英尺或英里WITHCOORD
:可选参数,指定返回结果中包含匹配元素的经纬度信息WITHDIST
:可选参数,指定返回结果中包含匹配元素与中心点之间的距离信息WITHHASH
:可选参数,指定返回结果中包含匹配元素的 geohash 值COUNT count
:可选参数,指定返回结果的数量,用于限制返回元素的个数ASC|DESC
:可选参数,指定排序顺序,可选的值为升序 (ASC
) 或降序 (DESC
),默认为升序STORE key
:可选参数,指定将查询结果保存到指定的 Redis key 中STOREDIST key
:可选参数,指定将查询结果保存到指定的 Redis key 中,并在结果中包含匹配元素与中心点之间的距离信息
georadiusbymember
georadiusbymember:用于查询指定成员周围的其他成员,它的命令格式与
GEORADIUS
类似,只不过将中心点改为了指定的成员
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
key
:geospatial key 的名称member
:geospatial key 中已有的成员名称,作为中心点进行查询radius
:查询距离中心点的距离范围,可以是整数或浮点数m|km|ft|mi
:距离单位,可以是米(m)、千米(km)、英尺(ft)或英里(mi)WITHCOORD
:返回查询结果中每个元素的经纬度信息,可选参数WITHDIST
:返回查询结果中每个元素与中心点的距离信息,可选参数WITHHASH
:返回查询结果中每个元素的 geohash 值,可选参数COUNT count
:限制查询结果的数量,count 表示限制数量的值ASC|DESC
:排序方式,可以是升序(ASC)或降序(DESC),默认是升序STORE key
:将查询结果保存到指定的 key 中STOREDIST key
:将查询结果保存到指定的 key 中,并且保存每个元素与中心点的距离信息
geohash
geohash:将经纬度坐标编码成字符串的方式,用于将二维的经纬度信息映射到一维的字符串上,方便在字符串上进行搜索和排序
GEOHASH key member [member ...]
key
:geospatial key 的名称。member
:geospatial key 中已有的成员名称,可以是多个
HyperLogLog
HyperLogLog
是一种基数(cardinality)算法,用于快速统计一个数据集合中不同元素的数量。它的原理是利用随机哈希函数将数据集合中的元素映射到一个固定长度的二进制字符串中,并利用这些字符串中前缀中 0 的数量来近似估计数据集合中元素的个数
PFADD key element [element …] | 向指定 key 的 HyperLogLog 中添加一个或多个元素 |
PFCOUNT key [key …] | 统计指定 key 的 HyperLogLog 中不同元素的数量,返回一个近似值 |
PFMERGE destkey sourcekey [sourcekey …] | 将多个 HyperLogLog 合并为一个,并保存到指定的 destkey 中 |
Bitmaps
Bitmaps
(位图)是一种在计算机中表示二进制信息的数据结构,由一系列二进制位组成,每个二进制位只能是 0 或 1。在 Redis 中,Bitmaps
也是一种数据类型,可以用来存储和处理二进制数据
SETBIT key offset value | 设置指定 key 的指定偏移量 offset 的值为 value(0 或 1) |
GETBIT key offset | 获取指定 key 的指定偏移量 offset 的值(0 或 1) |
BITCOUNT key [start end] | 计算指定 key 中值为 1 的二进制位的数量;可选参数 start 和 end 表示计算范围的起始和结束偏移量,默认计算整个字符串 |
BITOP operation destkey key [key …] | 对多个 key 值进行逻辑运算(AND/OR/XOR/NOT),并将结果保存到 destkey |
🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——
点赞
👍收藏
⭐️评论
📝