随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务的I/O压力,来解决系统性能上的瓶颈。
数据库的发展大致分为5个阶段。
Redis是一个C语言开发的、高性能的、开源的、键值对存储数据的nosql数据库。
快速存取。
点赞、秒杀、直播平台的在线好友列表、商品排行榜和单点登录等场景。 这些应用在短时间内都有大量的数据交互,都要求数据库有极高的效率。
可以根据需要查看。
主要包括Ubuntu、Kali和Windows的安装。
# 安装
sudo apt-get install redis-server
# 查看帮助命令
redis-server --help
# 编辑Redis配置文件
sudo vim /etc/redis/redis.conf
# 将daemonize no改为 daemonize yes保存退出
# 启动
redis-server
# 打开服务
sudo service redis start
# 关闭服务
sudo service redis stop
# 下载
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
# 解压
tar xzf redis-5.0.8.tar.gz
# 切换目录
cd redis-5.0.8
# 安装
make
Redis服务端开启:
src/redis-server
显示:
7088:C 21 Mar 2020 16:39:13.749 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7088:C 21 Mar 2020 16:39:13.749 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=7088, just started
7088:C 21 Mar 2020 16:39:13.749 # Warning: no config file specified, using the default config. In order to specify a config file use src/redis-server /path/to/redis.conf
7088:M 21 Mar 2020 16:39:13.749 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.8 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 7088
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
7088:M 21 Mar 2020 16:39:13.750 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
7088:M 21 Mar 2020 16:39:13.750 # Server initialized
7088:M 21 Mar 2020 16:39:13.750 # 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.
7088:M 21 Mar 2020 16:39:13.750 # 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.
7088:M 21 Mar 2020 16:39:13.750 * DB loaded from disk: 0.000 seconds
7088:M 21 Mar 2020 16:39:13.750 * Ready to accept connections
服务端开启成功,出现堵塞,可以再开一个终端使用客户端连接:
redis-cli
显示并测试:
127.0.0.1:6379> set name corley
OK
127.0.0.1:6379> get name
"corley"
127.0.0.1:6379>
可以在配置文件中进行设置取消堵塞:
执行vim redis.conf
命令打开配置文件,找到daemoize no处将no改为yes,保存退出,用命令src/redis-server redis.conf
即可开启服务,不会堵塞,显示:
7127:C 21 Mar 2020 16:48:39.111 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7127:C 21 Mar 2020 16:48:39.111 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=7127, just started
7127:C 21 Mar 2020 16:48:39.111 # Configuration loaded
先点击https://download.csdn.net/download/CUFEECR/12260885下载后解压。
在Windows中不需要下载安装包安装,可以直接点击解压后的文件夹中的应用程序进行交互(双击redis-server.exe启动redis服务器,双击redis-cli.exe打开redis客户端),或者在命令行中操作:
命令行切换到redis路径下,命令行输入redis-server
即可开启服务,再打开一个命令行输入redis-cli
即连接到服务端,可以进行操作,同时还可将redis目录加入环境变量,更方便操作,操作如下:
此时再重新打开一个命令行,不需要切换路径,直接输入redis-sever
即可打开redis服务。
但是通过上述方式打开redis服务是临时的,一旦redis-server退出服务即关闭,可以执行redis-server --service-start
永久开启服务,此时可以在Windows系统服务中看到Redis正在运行,如下:
还可以通过redis-server --service-stop
关闭服务。
Linux中配置文件路径为 /etc/redis/redis.conf,Windows中配置文件即为Redis目录下的redis.windows-service.conf和redis.windows.conf。配置文件中有一些关键的参数说明:
当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。 daemonize no 设置数据库的数目,Redis已默认创建16个数据库,不需要再自己创建,编号0-15 databases 16 根据给定的时间间隔和写入次数将数据保存到磁盘 下面的例子的意思是: 900 秒内如果至少有 1 个 key 的值变化,则保存 300秒内如果至少有 10 个 key 的值变化,则保存 60 秒内如果至少有 10000 个 key 的值变化,则保存 save 900 1 save 300 10 save 60 10000 监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。 port 6379 Redis默认只允许本地连接,不允许其他机器连接 bind 127.0.0.1 主从数据库配置 slaveof <masterip> <masterport>
daemonize的进一步说明:
daemonize是守护线程,默认为no,启动redis服务端后堵塞,修改为yes后再用命令src/redis-server redis.conf
启动,不会发生堵塞
Kali中后台启动redis可以用命令ps -aux | grep redis
,停止服务用kill 8975
更多配置文件说明可点击https://www.cnblogs.com/kreo/p/4423362.html查看。
string是redis最基本的类型,一个key对应一个value,示意如下:
string可以包含任何数据,最大不能超过512M。
set ---- 设置值 get ---- 获取值 mset ---- 设置多个值 mget ---- 获取多个值 append ---- 添加字段 del ---- 删除 strlen ---- 返回字符串长度
127.0.0.1:6379> set name corley
OK
127.0.0.1:6379> get name
"corley"
# 重复设置会覆盖
127.0.0.1:6379> mset name corley1 age 18 sex 1
OK
127.0.0.1:6379> mget name age sex
1) "corley1"
2) "18"
3) "1"
# 返回的整数表示值的长度
127.0.0.1:6379> append name 2
(integer) 8
127.0.0.1:6379> get name
"corley12"
127.0.0.1:6379> del sex
(integer) 1
127.0.0.1:6379> strlen age
(integer) 2
# 设置过期时间
127.0.0.1:6379> expire name 3
(integer) 1
127.0.0.1:6379> get name
"corley12"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get name
(nil)
# 如果有name则3秒后过期,则否先创建name再3秒后过期
127.0.0.1:6379> setex name 3 corley
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
incr ---- 增加 decr ---- 减少 incrby ----- 指定增加多少 decrby ----- 指定减少多少
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> incr num
(integer) 4
127.0.0.1:6379> incr num
(integer) 5
127.0.0.1:6379> decr num
(integer) 4
127.0.0.1:6379> decr num
(integer) 3
127.0.0.1:6379> incrby num 3
(integer) 6
127.0.0.1:6379> decrby num 2
(integer) 4
127.0.0.1:6379>
decr
和decrby
命令可以使数减少到负数。
getrange ---- 获取指定区间范围内的值,类似between…and setrange ---- 从第几位开始替换,下脚本从零开始
0 -1
表示全部
127.0.0.1:6379> set name Corley
OK
127.0.0.1:6379> getrange name 0 2
"Cor"
127.0.0.1:6379> setrange name 4 a
(integer) 6
127.0.0.1:6379> get name
"Corlay"
127.0.0.1:6379> setrange name 4 ang
(integer) 7
127.0.0.1:6379> get name
"Corlang"
127.0.0.1:6379> getrange name 0 -1
"Corlang"
127.0.0.1:6379>
List是单值多value类型。 List(列表)是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。 List的底层实际是链表。
lpush/rpush/lrange ---- 从左加入元素/从右加入元素/获取指定长度 lpush list01 1 2 3 4 5 ---- 倒序排列 rpush list02 1 2 3 4 5 ---- 正序排列 lrange list01 0 -1 ---- 获取list01中的所有值
127.0.0.1:6379> lpush l1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> rpush l2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379>
lpop ---- 移除最左的元素 rpop ---- 移除最右的元素
127.0.0.1:6379> lpop l1
"5"
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> rpop l1
"1"
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379>
按照索引下标获得元素(从左到右)。
127.0.0.1:6379> lrange l1 0 2
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lindex l1 1
"3"
127.0.0.1:6379>
获取列表长度。
127.0.0.1:6379> llen l1
(integer) 3
127.0.0.1:6379> llen l2
(integer) 5
127.0.0.1:6379>
删除多个相同值。
lrem list01 2 1 在list01中删除2个1
127.0.0.1:6379> lpush l3 1 3 2 2 3 4 5
(integer) 7
127.0.0.1:6379> lrange l3 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "2"
6) "3"
7) "1"
127.0.0.1:6379> lrem l3 1 3
(integer) 1
127.0.0.1:6379> lrange l3 0 -1
1) "5"
2) "4"
3) "2"
4) "2"
5) "3"
6) "1"
127.0.0.1:6379> lrem l3 2 2
(integer) 2
127.0.0.1:6379> lrange l3 0 -1
1) "5"
2) "4"
3) "3"
4) "1"
127.0.0.1:6379>
截取指定范围的值后再赋值给key。
ltrim list01 0 2 截取list01从0到2的数据在赋值给list01
127.0.0.1:6379> lpush l4 1 2 3 4
(integer) 4
127.0.0.1:6379> ltrim l4 0 2
OK
127.0.0.1:6379> lrange l4 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379>
rpoplpush list1 list2 将list1中最后一个压入list2中第一位
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpoplpush l1 l2
"2"
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
127.0.0.1:6379> lrange l2 0 -1
1) "2"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
127.0.0.1:6379>
lset list01 0 x 将list01中第1位换成x
127.0.0.1:6379> lset l1 1 5
OK
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "5"
127.0.0.1:6379>
linsert list01 before x y 在x之前加字段y
127.0.0.1:6379> lrange l4 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> linsert l4 before 6 7
(integer) -1
127.0.0.1:6379> linsert l4 before 3 7
(integer) 4
127.0.0.1:6379> linsert l4 after 2 5
(integer) 5
127.0.0.1:6379> lrange l4 0 -1
1) "4"
2) "7"
3) "3"
4) "2"
5) "5"
127.0.0.1:6379>