redis可执行文件说明
- redis-server redis服务器
- redis-cli redis命令客户端
- redis-benchmark redis性能压测工具
- redis-check-dump RDB文件检查工具
- redis-check-aof AOF文件检查工具
- redis-sentinel 高可用安装部署
redis三种启动方式
1.直接启动
redis-server
加上‘&’号使redis以后台程序方式运行
redis-server & redis-server --port 6380
-- 修改启动端口号
2.配置文件启动
可以为redis服务启动指定配置文件,例如配置为/etc/redis/6379.conf
redis-server /etc/redis/6379.conf
#如果更改了端口,使用redis-cli客户端连接时,也需要指定端口,例如:
redis-cli -p 6380
3.使用redis启动脚本设置开机自启动、通过指定配置文件启动。
启动脚本 redis_init_script 位于位于Redis的 /utils/ 目录下,redis_init_script脚本代码如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
#redis服务器监听的端口
REDISPORT=6379
#服务端所处位置
EXEC=/usr/local/bin/redis-server
#客户端位置
CLIEXEC=/usr/local/bin/redis-cli
#redis的PID文件位置,需要修改
PIDFILE=/var/run/redis_${REDISPORT}.pid
#redis的配置文件位置,需将${REDISPORT}修改为文件名
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
根据启动脚本,将修改好的配置文件复制到指定目录下,用root用户进行操作:
mkdir /etc/rediscp redis.conf /etc/redis/6379.conf
将启动脚本复制到/etc/init.d目录下,本例将启动脚本命名为redisd(通常都以d结尾表示是后台自启动服务)。
cp redis_init_script /etc/init.d/redisd
设置为开机自启动,直接配置开启自启动 chkconfig redisd on 发现错误: service redisd does not support chkconfig
解决办法,在启动脚本开头添加如下注释来修改运行级别:
#!/bin/sh
# chkconfig: 2345 90 10
再设置即可
#设置为开机自启动服务器
chkconfig redisd on
#打开服务
service redisd start
#关闭服务
service redisd stop
启动验证
1. ps -ef | grep redis
2.netstat -antpl|grep redis
3.redis-cli -h ip -p port ping
Redis的常用配置
redis.conf是redis的配置文件
说明
(1)【databases】:MySQL中不同的数据库(其实就是逻辑空间)都有一个名字,redis则不同;在redis中,是使用编号的,第一个redis数据库编号是0,第二个redis数据库编号是1……【databases】就用于设置redis中数据库的总数是多少;比如【databases 255】表示最多可以设置255个redis数据库;
(2)【dir】:redis的持久化文件,即数据文件保存在哪里
(3)【requirepass】:redis的安全机制;
通用命令
说明
Redis通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令,比如删除键、对键进行改名、判断键是否存在等。
如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看
1、del 命令
del 命令用来 删除指定的一个或多个 key
删除一个 key
删除多个 key
2、exists 命令
exists 命令用来 查询 key 是否存在
3、expire 命令
expire 命令用来 设置 key 的过期秒数
与 expire 命令相关的命令有三个,分别是:
- expireat 命令用来 设置一个 UNIX 时间戳的过期时间,这个命令就不举例了
- pexpire 命令用来 设置 key 的有效时间以毫秒为单位
- pexpireat 命令用来 设置 key 的到期 UNIX 时间戳以毫秒为单位
4、keys 命令
keys 命令用来 查找所有匹配给定的模式的键
在 Redis 中是支持模糊查询的,它有 3 个通配符,分别是:*、 ? 和 []
- *:通配任意多个字符
- ?:通配单个字符
- []:通配括号内的某 1 个字符
**上面介绍了关于 * 的用法,下面来简单的看一下 ? 和 [] 的用法
[] 的用法如下:**
? 的用法如下:
5、persist 命令
persist 命令用来 移除 key 的过期时间
6、ttl 命令
ttl 命令用来 获取 key 的有效时间(单位:秒)
上面的命令是,我们用 expire 对一个 key 设置一个过期时间,然后使用 ttl 观察它的剩余时间 ttl 一个 key,如果返回 -1,则说明该 key 不会过期
ttl 一个 key,如果返回 -2,则说明没有指定的 key
与 ttl 相关的命令是 pttl 命令,它用来 获取 key 的有效毫秒数
7、randomkey 命令
randomkey 命令用来 返回一个随机的key
8、rename 命令
rename 命令用来 将一个 key 重命名
与 rename 相关的命令是 renamenx,它的作用是 重命名一个 key,新的 key 必须是不存在的 key
9、type 命令
type 命令用来 获取 key 的存储类型
可以看到返回的类型当中有 string、list、set、zset 和 hash 等类型。
10、dbsize 命令
返回当前数据库中 key 的数量
redis 数据结构
- String:字符串类型
- List:列表类型
- Set:无序集合类型
- ZSet:有序集合类型
- Hash:哈希表类型
redis单线程为什么执行速度这么快
1.纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快;
2.单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
3.采用了非阻塞I/O多路复用机制
4.灵活多样的数据结构 redis内部使用一个redisObject对象来表示所有的key和value。redisObject主要的信息包括数据类型、编码方式、数据指针、虚拟内存等。它包含String,Hash,List,Set,Sorted Set五种数据类型,针对不同的场景使用对应的数据类型,减少内存使用的同时,节省网络流量传输。