Redis,非关系型数据库(键值Key-Value),目前在DB-Engines Ranking排名第八,是系统必备的中间件。Redis 作为内存数据库,其一大优势就是快。然后支持多种数据结构,支持单线程、多路复用、LUA 脚本、持久化、事务和主从复制。国内外好多互联网公司都在用Redis ,会使用Redis也成为了技术人员必备的技能。
非关系型数据库,NoSQL,主要分为以下几类:
-
键值数据库:主要代表是Redis
-
文档型数据库:主要代表是MongoDB
-
列式数据库:主要代表是Hbase、Cassandra
-
图数据库:主要代表是InfoGrid
对于非关系型数据库,本推文将带你学习键值数据库Redis。看完本推文后将掌握对Redis的初步使用。
目录
一、Redis安装流程
首先先来把Redis安装起来。
1)在Windows上的安装
Redis官方没有Windows版本的,但在Github上有。可以在Github上搜索了下载安装。
2)在Linux上的安装
首先要安装GCC编译器,gcc gcc-c++。(Redis是C语言开发的)
然后如果是Pacman,可以直接安装;如果是APT的,软件源有的话可以直接安装;如果是YUM的,软件源有的话如Centos8也可以直接安装。
# 主要代表是ArchLinux
pacman -S redis
# 主要代表是Ubuntu
apt-get install redis-server
# 主要代表是Centos8
yum install redis
如果软件源里没有,不能直接安装,则可通过源码编辑安装。
现在官网是5.0的版本(版本号第二位为奇数,为非稳定版本;第二为偶数,为稳定版本),从官网下载,解压编译进行安装。安装步骤如下:
# 官网下载
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
# 解压
tar -xzf redis-5.0.5.tar.gz -C /opt
# 进入redis目录
cd redis-5.0.5
# 编译redis.conf
vim redis.conf
# make编译,如果make有错误可make distclean后重新make编译
make
至此,完成以上步骤没有报错后,即可使用Redis了。安装完后别忘了设置Redis开机自启动。
3)容器上使用
如果是容器上使用的话,具体步骤如下:
# 拉取镜像
docker pull redis
# 运行容器
docker run --name redisLearn -d -p 6379:6379 redis
4)编译redis.conf
redis.conf大概的配置情况参考如下:
1 # Redis configuration file example.
2 #
3 # Note that in order to read the configuration file, Redis must be
......
69 bind 127.0.0.1 #绑定主机IP,默认值为127.0.0.1
......
88 protected-mode no #保护模式
......
92 port 6379 #端口号
......
113 timeout 0 #客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
......
130 tcp-keepalive 300 #定时向client发送tcp_ack包来探测client是否存活
......
136 daemonize yes #指定redis是否要用守护线程的方式启动。设置成yes时,开启守护进程模式,redis会一直在后台运行,除非手动kill该进程。设置成no时,断开连接会使redis进程退出
......
158 pidfile /var/run/redis_6379.pid #pid默认写到/var/run/redis_6379.pid,可指定文件目录
......
170 # output for logging but daemonize, logs will be sent to /dev/null
171 logfile "" #定日志文件的位置
......
218 save 900 1 #在15分钟内,如果1个key变化,就执行RDB
219 save 300 10 #在5分钟内,如果10个key变化,就执行RDB
220 save 60 10000 #在60秒内,如果1万个key变化,就执行RDB
......
235 stop-writes-on-bgsave-error yes #后台备份进程出错时,主进程是否停止写入
......
241 rdbcompression yes #是否压缩,如果压缩可以节约空间,会影响备份和恢复的性能
......
249 # tell the loading code to skip the check.
250 rdbchecksum yes #是否校验rdb文件
251
252 # The filename where to dump the DB
253 dbfilename dump.rdb #设置 dump 的文件位置
......
507 # requirepass foobared
508 requirepass "654321" #设置密码为654321
......
如果有没安装Redis的话,可以使用Redis在线测试网址进行学习 Try Redis。
二、Redis基本使用
在Redis安装完毕后,可以进行快捷方式设置。
ln -s /opt/redis-5.0.5/src/redis-server /bin/redis-server
ln -s /opt/redis-5.0.5/src/redis-cli /bin/redis-cli
其次Redis的命令脚本如下所示:
执行的命令 | 作用 |
---|---|
redis-server | 启动redis |
redis-cli | redis命令行客户端 |
redis-benchmark | 基准测试工具 |
redis-check-aof | AOF持久化文件检测和修复工具 |
redis-check-dump | RDB持久化文件检测和修复工具 |
redis-sentinel | 启动哨兵 |
redis-trib | cluster集群构建工具 |
1)性能压力测试
使用redis-benchmark命令进行压力测试,具体命令如下:
# 对服务器性能进行监测,并发连接100个,请求10000个
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000
# 测试存取大小为100字节的数据包的性能
redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100
# 只测试set操作的性能
redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 100000 -q
# 只测试某些数值存取的性能
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -q script load "redis.call('set','foo','bar')"
2)Redis启动
Redis安装完毕后,使用redis-server命令启动服务器端。
然后使用redis-cli启动服务器端。如果有密码使用redis-cli -h 127.0.0.1 -p 6379 -a 654321(例如密码为654321)命令进行启动。
如果是容器上的,使用docker exec -it redisLearn redis-cli进行服务器端启动。
一个Redis实例,自带了16个命名空间互相隔离的数据库,可用redis-cli -n 11(比如进入11)交互。
3)基本数据结构
Redis有五种数据类型,也可以说有六种。分别为:String、Hash、List、Set、Sorted Set(Zset)、HyperLogLog。
对于数据类型就不一一展开说了,但叙述下几个知识点:
-
不应该在不清楚有多少key时使用keys *
-
String是二进制安全的,可包含任何数据,最大能存512M
-
一个Hash可对应多个String
-
set命令可以新值覆盖旧值,如果不想覆盖可用set key value NX
-
如果添加值有空格,使用双引号。set key "a b c"
-
列表里元素可重复,集合里元素不可重复,也没有顺序
-
集合中添加、查找、删除复杂度为O(1)
-
如果集合里数据量极大,慎用smembers命令
-
ZSet每个元素都会关联一个double类型的分数,元素唯一分数可重复
4)事务操作
Redis开启事务使用multi命令,提交事务使用exec命令。举例如下:
127.0.0.1:6379> set count 1000
OK
127.0.0.1:6379> get ticket
"2"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby count 100
QUEUED
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> exec
1) (integer) 900
2) (integer) 1
127.0.0.1:6379> get ticket
"1"
127.0.0.1:6379> get count
"900"
一个事务中的命令要么全部执行,要么全部都不执行。
三、Redis的Python、Java连接
Python操作Redis使用第三方库“redis-py”,Java操作Redis可用Jedis、Redisson和redisTemplate。
1)使用Python连接操作
首先要安装库,pip3 install redis。之后代码示例如下:
import redis
client = redis.Redis(host='127.0.0.1')
client.set('user:001','张三',nx=True)
userName = client.get('user:001')
print(f'001的用户名为:{userName.decode()}')
2)使用Java连接操作
以Jedis为例,借助Maven把Jedis下载下来,pom.xml配置如下:
<dependencies>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
之后代码示例如下:
public class redisLearn {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("user:001", "张三");
System.out.println("001的用户名为" + jedis.get("stu:001"));
jedis.close();
}
}
看完以上内容,多实际操作可掌握Redis的初步使用。对于Redis的学习还可参考如下网站:
-
Redis 官网
-
CRUG网站 官网中文版
-
http://redisdoc.com/ 命令参考