在当今的互联网时代,数据的快速存取和处理变得至关重要。Redis,作为一种高性能的键值存储系统,已经成为许多开发者和企业的首选。本文将简要介绍Redis的基本概念、工作原理以及其在实际应用中的一些典型用例。
一、简介
1)概念
Redis(Remote Dictionary Server)是一个开源的 NoSQL 数据库,它是基于内存的,因此读写速度快,适合用作缓存。它以其卓越的性能和丰富的数据结构支持而闻名,包括字符串、哈希、列表、集合、有序集合等。NoSQL 即 Not-Only SQL,指的是不仅仅使用 SQL 语言作为数据库查询语言的数据库管理系统。
2)常见的 NoSQL 数据库
- KV键值对类型:Redis
- 列式存储:Hbase
- 文档类型存储:MongoDB
- 图形化存储:Neo4J
二、Redis的特点
- 高性能:Redis能够处理大量的并发请求,读写速度极快,因为它的数据存储在内存中。
- 持久化:虽然Redis是内存数据库,但它提供了持久化选项,可以将内存中的数据保存到磁盘上,以防系统故障。
- 原子性:Redis的所有操作都是原子性的,这意味着多个操作可以组合在一起作为一个单独的原子操作执行。
- 丰富的数据类型:Redis支持多种数据类型,这使得它能够轻松处理各种复杂的数据结构。
- 可扩展性:Redis支持主从复制和哨兵系统,可以轻松实现数据的分布式存储和高可用性。
三、Redis工作原理
Redis采用事件驱动的架构,单线程处理所有客户端请求。它通过事件循环监听文件事件(客户端连接、命令请求)、时间事件(过期键清理)和定时器事件(客户端超时请求)。
四、Redis 安装
redis官方只给了linux版本的下载,并没有windows,网络上流传的windows版本是微软团队写的。
1)安装
1、上传并解压
tar -zxvf redis-5.0.4.tar.gz -C /opt/installs/
2、安装GCC环境
yum安装需要网络环境,必须能够联网才行
yum -y install gcc-c++
3、编译我们的redis源代码
cd /opt/installs/redis-5.0.4
进行 make 在 src目录下
4、进行安装(可以选择) make install
默认安装到了 /usr/local/bin 目录下
redis-server 启动redis的服务器
redis-cli 启动redis客户端
说明一下:因为执行程序已经在 /usr/local/bin目录下了,所有不需要配置环境变量环境变量就是path路径,path路径直接决定了一个命令是否可以找到。
2)修改配置文件
启动redis
启动服务器: redis-server 这个启动是明着启动
启动客户端: redis-cli 连接服务器的客户端,用于编写命令的
退出:
redis-cli 退出 quit
redis-server 退出 如果是明着启动,ctrl + Credis服务可以在后台运行。
修改配置文件:
redis.conf
将这个配置文件复制到 /usr/local/bin 下面
cp /opt/installs/redis-5.0.4/redis.conf /usr/local/bin/启动的时候,指定conf 一起启动
redis-server /usr/local/bin/redis.conf
修改redis.conf 就直接使用 /usr/local/bin/redis.conf 即可
这里修改为你自己的虚拟机IP地址
查看redis进程:
ps -ef|grep redis
关闭redis的后台进行:
1、直接kill kill -9 进程号
2、redis-cli -h 192.168.32.129 shutdown
假如你在redis.conf 下指定了 bind 这个参数,在关闭的时候,需要添加 -h IP地址,如果使用的是默认的 bind 127.0.0.1
直接使用 redis-cli shutdown
因为在redis.conf 下配置了bind IP 所以,连接的时候需要带上 IP地址
这里修改为你自己的虚拟机IP地址
redis-cli -h 192.168.52.129
3)设置密码(根据需要)
redis是可以设置密码的:
/usr/local/bin/redis.conf
假如有密码,连接的时候需要如下命令:
redis-cli -h 192.168.10.101 -p 6379 -a 123456
如果关闭需要使用如下命令:
redis-cli -h 192.168.10.101 -p 6379 -a 123456 shutdown
五、Redis 基本使用
1)连接 Redis
使用 datagrip 连接 redis:
2)操作数据库
Redis 默认有 16 个数据库,可以通过 select
命令切换数据库。
3)基本命令
先说一下key 这个命令的用法:
keys * | 查看当前库的所有键 |
exists <key> | 判断某个键是否存在 |
type <key> | 查看键的类型 |
del <key> | 删除某个键 |
expire <key><seconds> | 为键值设置过期时间,单位秒 |
ttl <key> | 查看还有多久过期,-1表示永不过期,-2表示已过期 |
dbsize | 查看当前数据库中key的数量 |
flushdb | 清空当前库 |
flushall | 通杀全部库 |
六、Redis 数据类型
1)String —— 字符串类型
字符串类型的value值,可以占用512M的空间,所以可以存储很多的数据。
get <key> | 查询对应键值 |
set <key><value> | 添加键值对 |
append <key><value> | 将给定的<value>追加到原值的末尾 |
strlen <key> | 获取值的长度 |
setnx <key><value> | 只有在key 不存在时设置key的值,SET if Not eXists |
incr <key> | 将key中存储的数字值增1只能对数字值操作,如果为空,新增值为1 |
decr <key> | 将key中存储的数字值减1只能对数字之操作,如果为空,新增值为-1 |
incrby /decrby <key> 步长 | 将key中存储的数字值增减,自定义步长 |
mset <key1><value1><key2><value2> | 同时设置一个或多个key-value对 |
mget <key1><key2><key3> | 同时获取一个或多个value |
msetnx <key1><value1><key2><value2> | 同时设置一个或多个key-value对,当且仅当所有给定的key都不存在 |
getrange <key> <起始位置> <结束位置> | 获得值的范围,类似java中的substring |
setrange <key> <起始位置> <value> | 用<value>覆盖<key>所存储的字符串值,从<起始位置>开始 |
setex <key> <过期时间> <value> | 设置键值的同时,设置过去时间,单位秒 |
getset <key><value> | 以新换旧,设置了新值的同时获取旧值 |
2) List —— 散列类型
有序的(插入的时候有序),底层是一个双向链表
3) Set —— 列表类型
Set的特点是无序不重复的
sadd <key><value1><value2> .... | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 |
smembers <key> | 取出该集合的所有值。 |
sismember <key><value> | 判断集合<key>是否为含有该<value>值,有返回1,没有返回0 |
scard <key> | 返回该集合的元素个数。 |
srem <key><value1><value2> .... | 删除集合中的某个元素。 |
spop <key> | 随机从该集合中吐出一个值。 |
srandmember <key><n> | 随机从该集合中取出n个值。不会从集合中删除 |
sinter <key1><key2> | 返回两个集合的交集元素。 |
sunion <key1><key2> | 返回两个集合的并集元素。 |
sdiff <key1><key2> | 返回两个集合的差集元素。 |
4) Hash —— 集合类型
Redis hash 是一个键值对集合
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hset <key><field><value> | 给<key>集合中的 <field>键赋值<value> |
hget <key1><field> | 从<key1>集合<field> 取出 value |
hmset <key1><field1><value1><field2><value2>... | 批量设置hash的值 |
hexists key <field> | 查看哈希表 key 中,给定域 field 是否存在。 |
hkeys <key> | 列出该hash集合的所有field |
hvals <key> | 列出该hash集合的所有value |
hincrby <key><field><increment> | 为哈希表 key 中的域 field 的值加上增量 increment |
hsetnx <key><field><value> | 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 |
5) Zset(Sorted Set)—— 有序集合类型
zrange <key><start><stop> [WITHSCORES] | 返回有序集 key 中,下标在<start><stop>之间的元素带WITHSCORES,可以让分数一起和值返回到结果集。 |
zrangebyscore key min max withscores | 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 |
zrevrangebyscore key max min withscores | 同上,改为从大到小排列。 |
zincrby <key><increment><value> | 为元素的score加上增量 |
zrem <key><value> | 删除该集合下,指定值的元素 |
zadd <key><score1><value1><score2><value2>... | 将一个或多个 member 元素及其 score 值加入到有序集 key 当中 |
zcount <key><min><max> | 统计该集合,分数区间内的元素个数 |
zrank <key><value> | 返回该值在集合中的排名,从0开始。 |
五大基本数据类型,实战过程中String最实用。
七、资源链接
- Redis 下载链接:https://download.redis.io/releases/
- 通过网盘分享的文件:redis-5.0.4.tar.gz 提取码: dze4
- Redis 中文学习网站:Redis中文网
通过这篇文章,我们初步了解了 Redis 的基本概念、安装方法和基本操作,以及它的数据类型和一些常用命令。Redis 作为一个功能强大的 NoSQL 数据库,非常适合用作缓存系统,提高应用性能。