Redis
前言
Redis官网:https://redis.io
Redis是一款非关系型数据库(NOSQL, not only sql),Redis存储的数据是在内存
中的
特点:可以快速读取到数据,因为存储的数据是在内存中的。Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件
- 基于内存存储,读写性能高
- 适合存储热点数据(热点商品、资讯、新闻),一般数据一般变化频率比较低,或者是高并发请求数据
使用Redis能做什么
- 数据缓存
- 消息队列
- 注册中心
- 发布订阅
下载与安装
下载
Redis安装包分为windows版和Linux版,例如我下载的是Linux的4.0.0
版本,文件名为redis-4.0.0.tar.gz
- Windows版下载地址:https://github.com/microsoftarchive/redis/releases
- Linux版下载地址: https://download.redis.io/releases/
将安装包,使用FinlShell或其他客户端,上传到Linux的根目录下的/soft
目录
安装
- 解压安装包
解压安装包到/usr/local
目录,解压后,会生成一个redis-4.0.0
目录,后续将在这个目录进行编译和安装
# 切换到soft目录
cd /soft
# 解压安装包
tar -zxvf redis-4.0.0.tar.gz -C /usr/local
- 安装gcc编译器
由于Redis依赖gcc,所以需要先安装gcc
yum install gcc-c++
- 编译和安装
切换目录到/usr/local/redis-4.0.0
,执行编译和安装
# 切换目录
cd /usr/local/redis-4.0.0
# 编译和安装
make && make install
安装完毕,src
目录就会出现2个命令,redis-server
和redis-cli
,分别是启动Redis服务和进入Redis客户端命令行
配置Redis
配置Redis后台启动
将/usr/local/redis-4.0.0
目录下的redis.conf
配置文件,拷贝到src
文件下
# 进入src目录
cd src
# 将上层目录的redis.conf拷贝到当前目录
cp ../redis.conf .
# 或
cp /usr/local/redis-4.0.0/redis.conf .
修改src
目录下,redis.conf
文件,修改daemonize
的值为yes,默认为no,就是前台启动(霸屏启动,无法进行其他操作)
# 编辑配置文件
vim redis.conf
# 编辑文件 将 daemonize no 修改为 daemonize yes
daemonize yes
- 重新启动Redis
redis-server
命令后,跟上配置文件的地址,就会以该配置文件进行启动
./redis-server redis.conf
- 查看端口占用
使用如下命令,就可以查看端口占用情况,能看到6379被Redis占用,就为启动成功
netstat -ntlp
配置Redis密码
- Redis默认是没有密码的,如果需要配置密码,则需要修改
redis.conf
配置文件,添加一个配置
# root为设置的密码,自行修改
requirepass root
- 设置密码后,Redis客户端就需要使用密码进行登录
# -h host 设置访问的服务器ip地址,如果本机不用写
# -p port 设置访问端口,redis服务器的端口6379,如果端口没有改过,这个参数可以不用设置
# -a 如果服务器设置了密码访问,就需要指定这个参数
./redis-cli -h 127.0.0.1 -p 端口号 -a 密码
配置Redis允许远程访问
- 默认Redis只允许本机访问,如果需要远程访问,也是需要修改
redis.conf
配置文件。搜索bind关键字,在bind 127.0.0.1
后,空格,添加上当前linux的ip地址
# 编辑配置文件
vim redis.conf
# 编辑内容,将 "bind 127.0.0.1" 修改为 "bind 127.0.0.1 当前Linux的ip地址"
bind 127.0.0.1 192.168.208.128
- 重启Redis服务,让配置生效
# 发送关闭redis服务器命令,如果redis服务没有启动这步可以忽略
./redis-cli shutdown
# 再次启动服务器
./redis-server redis.conf
- 防火墙开放6379端口
# 开放端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# 重载防火墙
firewall-cmd --reload
# 查看开放的防火墙端口列表
firewall-cmd --list-ports
Redis数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型
- 字符串 string:普通字符串,常用
- 哈希 hash:适合存储对象
- 列表 list:按照插入顺序排序,可以有重复元素
- 集合 set:无序集合,没有重复元素
- 有序集合 sorted set / zset:集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
Redis常用命令
更多命令可以参考
字符串string操作命令
注意:每个value限制了512MB
大小
-
SET key value
设置指定key的值 -
GET key
获取指定key的值 -
SETEX key seconds value
设置指定key的值,并将 key 的过期时间设为 seconds 秒 -
SETNX key value
只有在 key 不存在时设置 key 的值 -
del key1 key2
删除指定的key数据 -
ttl key
返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位- 返回值为>=0 代表剩余存活时间
- 返回值为 -2 代表过期已删除
- 返回值为 -1 代表没有过期时间,永远存活
哈希hash操作命令
Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象
注意:hash里面包含的键值对个数有限制,限制42亿以内
-
HSET key field value
将哈希表 key 中的字段 field 的值设为 value -
HGET key field
获取存储在哈希表中指定字段的值 -
HDEL key field
删除存储在哈希表中的指定字段 -
HKEYS key
获取哈希表中所有字段 -
HVALS key
获取哈希表中所有值 -
HGETALL key
获取在哈希表中指定 key 的所有字段和值
列表list操作命令
Redis 列表是简单的字符串列表,按照插入顺序排序,类似于java中的linkedList(双向链表),value的个数限制42亿个以内
应用场景:队列(数据,根据插入顺序排序),堆栈的实现(先进先出、先进后出)。这里排序不是实时的,而是插入后顺序就固定了。
例如:过去时的排行榜,昨日金曲排行榜
-
LPUSH key value1 [value2]
Left, 将一个或多个值插入到列表头部(左部), rpush是从尾部插入 -
LRANGE key start stop
获取列表指定范围内的元素 -
RPOP key
移除并获取列表最后一个元素 lpop从左侧头部删除一个元素 -
LLEN key
获取列表长度 -
BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素,如果列表没有元素,就会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位为秒
集合set操作命令
Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中==不能出现重复的数据==,常用命令:
-
SADD key member1 [member2]
向集合添加一个或多个成员 -
SMEMBERS key
返回集合中的所有成员 -
SCARD key
获取集合的成员数 -
SINTER key1 [key2]
返回给定所有集合的交集 -
SUNION key1 [key2]
返回所有给定集合的并集 -
SDIFF key1 [key2]
返回给定所有集合的差集, 含义是key1有哪个元素在key2中不存在 -
SREM key member1 [member2]
移除集合中一个或多个成员
有序集合sorted set操作命令
Redis sorted set 有序集合是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score)
Redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复
-
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的 分数 -
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合中指定区间内升序排序的成员,zrevrange为降序查询 -
ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment -
ZREM key member [member ...]
移除有序集合中的一个或多个成员
通用命令
Redis中的通用命令,主要是针对key进行操作的相关命令:
-
KEYS pattern
查找所有符合给定模式( pattern)的 key-
*
代表任意0~多个字符 -
?
代表任意1个字符
-
-
EXISTS key
检查给定 key 是否存在 -
TYPE key
返回 key 所储存的值的类型 -
TTL key
返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位- 返回值为
>=0
代表剩余存活时间 - 返回值为
-2
代表过期已删除 - 返回值为
-1
代表没有过期时间,永远存活
- 返回值为
-
DEL key
该命令用于在 key 存在是删除 key -
select 数字
,切换数据库操作的命令,Redis服务器上一共有16个数据库db0,db1,...db15, 如果不指定默认操作数据在db0的数据库上(数字范围:0~15)