认识Redis
1、简介
Redis是由Salvatore Sanfilippo 开发的一种基于键值对(key-value)的夸平台的NoSql数据库,由string、hash、list、set、zset、Bitmaps、HyperLogLog、GEO等多种数据结构和算法组成的,可以满足很多的应用场景。
2、Redis特性
(1)读写速度快
Redis把所有的数据都存储到内存中,是redis读写速度快的最主要的因素,同时redis采用了单线程的架构设计,避免了多线程竞争产生的问题。
(2)基于键值对的数据结构服务器
Redis主要提供的常用数据类型有:字符串、哈希、列表、集合、有序集合,并在字符串的基础上,发展出了位图(Bitmaps)和HyperLogLog两种数据结构,在最新版本中加入了GEO(地理信息定位)的功能
(3)丰富的功能
- 1)提供键过期功能,用来实现缓存
- 2)提供发布订阅功能,用来实现消息系统
- 3)支持Lua脚本,可以利用Lua创造出新的redis命令
- 4)提供简单的事务功能
- 5)提供流水线(pipeline)功能,能够将一批命令一次传输,减少网络开销
(4)简单稳定
Redis简单体现在三个方面:源码少、使用单线程模型、无需依赖操作系统中的类库。
虽然Redis简单,但是十分稳定,基本很少出现因为Redis自身bug导致服务宕掉的情况。
3、使用场景
Redis典型的应用场景大概可分为一下几个方面:
(1)缓存
Redis提供了键值过期的时间设置,并且提供了灵活控制最大内存和内存溢出后的淘汰策略。合理的使用缓存功能不仅可以加快数据的访问速度,而且能够有效的降低后端数据源的压力。
(2)排行榜
绝大部分网站都存在排行榜,Redis提供了列表和有序集合的数据结构,合理的利用这些数据结构,可以很方便的构建各种排行榜功能。
(3)计数器
计数器功能在网站用十分重要,例如网站的浏览数等,为了保证数据的实时性,每一次浏览都要做加1操作,如果并发量很大的话,对于关系型数据库的性能会是很大挑战。Redis天然的支持计数功能,而且性能同样不错,可以作为计数器的一个非常好的解决方案。
(4)消息队列
消息队列具有业务解耦、非实时业务错峰运行的特性。Redis提供了发布订阅功能和阻塞队列功能,虽然没有专业的消息队列强大,但是对于一般的消息队列功能基本可以满足。
4、安装、启动和停止
4.1 安装
Redis对于比较典型的Linux操作系统(例如CentOS、Redhat、Ubuntu、Debian等)都有很好的兼容。通常有两种安装Redis的方法,第一种是通过各个操作系统的软件管理软件进行安装,例如centos的yum管理工具和Ubuntu的apt。另一种是通过redisn的源码进行安装。redis安装很简单,以centos中安装为例,以下为安装步骤:
(1)安装gcc依赖。
由于redis是使用c语言开发,所以安装之前必须先确认是否安装gcc,如果没有安装,执行一下命令安装:
yum install -y gcc
(2)下载并解压安装包
[root@localhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz[root@localhost local]# tar -zxvf redis-5.0.3.tar.gz
(3)切换到redis解压目录,并执行编译
[root@localhost local]# cd redis-5.0.3[root@localhost redis-5.0.3]# make
(4)执行安装
## PREFIX可以不设置,默认安装到/usr/local/bin,这样可以再任意目录下执行Redis命令[root@localhost redis-5.0.3]# make install PREFIX=/usr/local/redis
(5)查看Redis安装版本
## 安装成功后,查看redis版本,确认redis是否安装成功。redis-cli -v
4.2 启动
Redis安装成功后,在src和/usr/local/bin的目录下多了几个以redis开头的可执行文件,称为Redis shell。这些可执行文件用来完成redis的启动、停止、检测和修复redis的持久化文件,并且可以检测Redis的性能。具体的shell作用如下:
可执行文件 | 作用 |
---|---|
redis-server | 启动redis |
redis-cli | redis命令行客户端 |
redis-benchmark | Redis基准测试工具 |
redis-check-aof | Redis AOF持久化文件检测和修复工具 |
redis-check-rdb | Redis RDB持久化文件检测和修复工具 |
redis-sentinel | 启动redis sentinel |
在这里只对redis-server和redis-cli进行介绍。
(1)启动redis
有三种方式启动Redis,分别是:默认配置、运行配置、配置文件启动
1)默认配置
使用Redis的默认配置启动Redis,如下:
[root@localhost bin]# redis-server10780:C 14 Feb 2022 15:18:11.618 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo10780:C 14 Feb 2022 15:18:11.618 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=10780, just started10780:C 14 Feb 2022 15:18:11.618 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf10780:M 14 Feb 2022 15:18:11.619 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 5.0.14 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' ,.-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 10780 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'|| `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'|| `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-'`-._ _.-' `-.__.-' 10780:M 14 Feb 2022 15:18:11.620 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.10780:M 14 Feb 2022 15:18:11.620 # Server initialized10780:M 14 Feb 2022 15:18:11.620 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.10780:M 14 Feb 2022 15:18:11.620 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.10780:M 14 Feb 2022 15:18:11.620 * Ready to accept connections
直接使用redis-server启动Redis后,控制台会打印出一些日志,通过日志可以了解到Redis的基本信息:
- 当前版本为:5.0.14
- Redis默认启动端口为6379
直接启动Redis的方式不能使用在生产环境中,因为无法对Redis的配置进行自定义。
2)运行启动
运行启动时,需要在redis-server后面加上需要修改的配置。例如:
## 修改Redis的默认启动端口,命令如下:redis-server --port 6380
虽然这种方式能够修改配置,但是无法把配置信息保存到配置文件中,所以也不建议使用。
3)配置文件启动(建议使用)
在Redis的安装目录中,有一个redis.conf的文件,这是redis的默认的配置文件,可以在该文件的基础上修改使用。
该方式的启动命令为:
redis-server redis.conf
通过这种方式启动Redis,提供了更大的灵活性,所以大部分生产环境都是使用这种方式。
4.3停止
Redis提供了shutdown命令用来停止Redis服务,命令如下:
[root@localhost redis-5.0.14]# redis-cli shutdown# 客户端发出shutdown命令10793:M 14 Feb 2022 15:33:55.796 # User requested shutdown...# 保存rdb持久化文件10793:M 14 Feb 2022 15:33:55.796 * Saving the final RDB snapshot before exiting.# 将RDB文件保存到磁盘上10793:M 14 Feb 2022 15:33:55.801 * DB saved on disk# 关闭Redis10793:M 14 Feb 2022 15:33:55.801 # Redis is now ready to exit, bye bye...[1]+ Done redis-server
该停止方式是redis推荐的一种关闭方式,除了这种方式外,还可以通过kill进程的方式关闭Redis,不过不要使用kill -9 强制杀死Redis服务,这样不会进行持久化操作,并且会造成缓冲区等资源无法优雅关闭。
shutdown命令还有一个参数,用于控制是否在redis关闭之前,生成持久化文件:
redis-cli shutdown nosave|save
4.4 远程连接
# 把Redis安装包下的redis.conf复制到/usr/local/bin/文件夹下,修改配置文件,实现远程连接。cp {package path}/redis.conf /usr/local/bin/
需要修改的项:
# 注释掉bind 127.0.0.1#bind 127.0.0.1# 修改protected-mode,把yes改为no#protected-mode yesprotected-mode no
修改完成后,使用配置文件启动redis
redis-server redis.conf & # & 代表redis后台运行
5、全局命令
(1)全局命令
- 查看所有键
keys *
- 键总数
dbsize
dbsize命令在计算键总数时,不会遍历所有的键,而是直接读取内置的键总数变量。keys命令会遍历所有的键,所以如果redis保存了大量的键时,应该禁用keys命令。
- 检查键是否存在
exists key
- 删除键
del key [key ...]
- del 是一个通用命令,无论是什么数据结构类型,del命令都可以将其删除。
- 其返回结果为成功删除键的个数,假设删除一个不存在的键,其返回结果为0。
- del命令支持删除多个键。
- 键过期
expire key seconds
Redis支持对键添加过期时间,当超过过期时间的时候,会自动删除对应的键。
注:ttl 命令会返回键的剩余过期时间,返回值对应三种情况:
大于等于0的整数:键剩余过期时间
-1:没有对键设置过期时间
-2: 键不存在
- 键的数据结构类型
type key
type命令用于查询键对应的数据结构类型,如果键不存在,则返回none。