目录
前言
一、Redis简介
1.详细介绍:
2.优点
3.应用场景
二、Redis安装和配置
1.Linux安装redis
2.Windows安装redis
三、Redis常用命令
在现代化的互联网服务中,高效、可靠的缓存技术是非常重要的一环。Redis作为一个开源的内存数据存储,已经被广泛应用于缓存、消息队列、计数器和排行榜等场景中。本文将为大家介绍Redis的基本概念、安装和常用命令,希望对您有所帮助。
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它通常被用作数据库、缓存和消息代理。Redis以其卓越的性能和灵活性而闻名,并且支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。
内存存储:Redis主要将数据存储在内存中,这使得它具有非常高的读写性能。通过将数据存储在内存中,Redis能够快速返回数据,从而提供低延迟的响应时间。此外,Redis还支持将数据异步地持久化到磁盘上,以防止系统故障时的数据丢失。
数据结构:Redis支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合。这些数据结构使得Redis可以处理各种不同类型的数据,并提供了一系列的操作命令来对数据进行增删改查。例如,可以使用字符串数据结构来存储键值对,使用列表数据结构来实现队列和栈等。
高级功能:Redis提供了一些高级功能,使其更加适用于不同的应用场景。其中包括发布/订阅机制,它允许客户端订阅特定的频道,并在有消息发布到频道时接收通知。此外,Redis还支持事务和管道功能,使得可以对多个命令进行原子性操作和批量操作。
原子性操作:Redis支持原子性操作,这意味着Redis的命令要么全部执行成功,要么全部失败,不存在部分成功的情况。这确保了数据的一致性和可靠性,并且可以避免并发操作导致的数据冲突。
高可用性:Redis提供了一些机制来提高系统的可用性。其中包括主从复制机制,通过将主节点的数据复制到多个从节点上,实现数据的冗余备份和读写分离。当主节点故障时,从节点可以自动切换为主节点,确保系统的连续性和可用性。
扩展性:Redis具有良好的可扩展性,可以通过搭建集群来处理大规模的数据和请求负载。Redis集群将数据分片存储在多个节点上,并通过哈希槽的方式进行数据分发和负载均衡,从而实现水平扩展。
高性能:由于Redis主要将数据存储在内存中,它能够提供非常快速的读写操作,具有低延迟和高吞吐量。此外,Redis还通过使用异步持久化和内存快照等机制来确保数据的持久性和安全性。
多种数据结构支持:Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。这使得Redis适用于处理各种类型的数据,从简单的键值对存储到复杂的数据结构操作。
原子性操作:Redis的命令是原子性的,要么全部执行成功,要么全部失败。这确保了数据一致性和可靠性,避免了并发操作导致的数据冲突。
高可用性:Redis通过主从复制机制实现了数据的冗余备份和读写分离,当主节点故障时,可以自动切换到从节点,确保系统的连续性和可用性。
扩展性:Redis可以通过搭建集群来进行水平扩展,将数据分片存储在多个节点上,并通过哈希槽的方式进行数据分发和负载均衡,以处理大规模的数据存储和请求负载。
缓存 Redis最常见的应用场景就是缓存。将经常查询且变化不频繁的数据缓存在Redis中,可以大大提高访问速度和系统性能。例如,网站的热门文章、商品搜索结果、用户信息等都可以缓存在Redis中。
消息队列 Redis的发布/订阅机制可以方便地实现消息队列功能。在消息发布者将消息发布到Redis频道上后,所有订阅该频道的客户端都能够收到该消息,从而实现了消息队列的功能。Redis还支持多种类型的消息订阅模式,比如发布/订阅、点对点通信、分布式锁等。
计数器 通过Redis的incr/decr命令,可以实现对某个key的计数功能。该功能可以被广泛应用于网站的PV/UV统计、订单数、点赞数、访问量等计数需求场景中。
分布式锁 Redis可以通过setnx命令实现分布式锁的功能,即多个线程或者进程可以互斥地访问同一个资源。在分布式系统中,Redis的分布式锁机制可以保证在不同的节点上访问同一资源的互斥性。
地理位置查询 Redis支持地理位置坐标的存储和查询,这使得开发者可以方便地实现基于地理位置的应用。例如,附近的人、附近的店铺、城市交通状况等都可以通过Redis的地理位置查询功能实现。
会话缓存 在分布式系统中,为了保证用户在多个节点上的会话状态一致性,需要使用会话缓存。Redis提供了高性能的会话缓存功能,可以将用户的会话状态缓存在Redis中,从而实现分布式系统的会话管理。
数据存储 除了以上应用场景外,Redis还可以作为轻量级的数据库使用。虽然Redis不支持关系型数据存储,但是对于一些简单的数据结构,如散列表、集合等,Redis的性能十分出色。因此,在一些小型应用或者需要快速迭代的项目中,Redis也可以作为数据存储使用。
Redis官网下载路径Download | RedisRedisYou can download the last Redis source files here. For additional options, see the Redis downloads section below.Stable (7.2)Redis 7.2 …https://redis.io/download/
上传redis.tar.gz文件到虚拟机,并进行解压
tar -zxvf redis-5.0.0.tar.gz
安装gcc
yum install gcc
编译redis
make && make install
检测安装情况
make install
修改redis.conf文件
vim redis.conf
将文件内容:daemonize no 改为 daemonize yes
启动redis
./src/redis-server redis.conf
redis启动测试
端口测试:
lsof -i:6379
是否能够连接本地客户端测试:
./src/redis-cli
结束进程
kill -9 xxxx (PID)
修改密码及外部连接
以上为无密码链接,为了安全需要设置密码,并且配置外部链接访问。
修改redis.conf指令:
vim redis.conf
注释bind 127.0.0.1
修改requirepass 123456
开放Redis端口号
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
重新连接
./src/redis-server redis.conf
安装客户端工具 RedisDesktopManager 连接测试
连接成功就可看到左侧列表的服务器默认的数据库
下载windows版redis后进行解压
编写文件把以下代码放进去更改后缀为bat文件
cd Redis-x64-3.2.100 #进入解压文件
redis-server redis.windows.conf #安装
运行该文件出现如图表示安装成功
修改 redis.windows.conf 文件
操作如上:Linux版第9步 --> 修改密码及外部连接
连接测试
Redis字符串(String)
# set key //保存 set name zs set age 12 set sex nan # get key //获取 get name # type key //查看类型 type age //string 说明type返回的是键值对存储类型,而不是值存储类型 # keys *或keys key //查看所有或者指定的key keys * # SETEX KEY_NAME TIMEOUT VALUE // 给键值对设置过期时间 setex zs 60 live # ttl key // 获取键值对剩余的存活时间 ttl zs
Redis哈希(Hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
# hset key field1 value1 [field2 value2] #同时将多个field-value设置到哈希表key中 hset user name zs age 12 sex nv # hget key field #获取指定的字段值 hget user age # hdel key field #删除指定的字段值 hdel user age # hgetall key #查询指定key的所有字段 hgetall user # hexists key field #查询指定key中的字段是否存在 hexists user name # hlen key #获取指定key中的长度 hlen user
Redis列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
# lpush key value1 value2 value3 #将一个或多个值插入到列表头部 lpush en a b c d e f g # llen key #获取列表的长度 llen en # lindex key index #根据索引获取列表中的元素 lindex en 1 #返回f,说明下标从0开始,同时先进后出 # lrange key start sop #查看指定范围内的元素 lrange en 1 3 #返回fed,说明下标从0开始,同时先进后出
Redis集合(Set) Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
# sadd key value1 [value2] #向集合添加一个或多个元素 sadd hobby lanqiu zuqiu bingpangqiu zhuoqiu # scard key #获取集合中的元素数量 scard hobby # exists key #是否存在 exists hobby