Redis安装说明
基于Linux服务器安装,本文以Centos7安装
Redis官方网站:Redis官网
1.单机安装Redis
1.1.安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl
1.2. 上传安装包并解压
将下载好的Redis安装包上传至虚拟机的任意目录中,例如我放在了/usr/local/src中:
解压缩:
- 进入安装包上传目录进行解压缩:
tar -zxvf redis-7.0.8.tar.gz
- 解压成功后进入redis安装目录
cd redis-7.0.8/
- 运行编译命令;
make && make install
默认安装路径实在/usr/local/bin
目录下:
该目录下以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
- redis-cli:是redis提供的命令行客户端
- redis-server:是redis的服务端启动脚本
- redis-sentinel:是redis的哨兵启动脚本
1.3. 启动
redis启动方式有很多种,例如:
- 默认启动
- 指定配置启动
- 开机自启
1.3.1默认启动
安装完成后,在任意目录输入启动redis:
redis-server
如图:
这种启动属于前台启动
,会阻塞整个窗口,窗口关闭或按下CTRL+C
则Redis停止。不推荐使用。
1.3.2 指定配置启动
如果要让Redis后台
启动,则必须修改Redis的配置文件,就在解压缩的的目录下/usr/local/src/redis
下的redis.conf。
先将这个文件进行备份:
cp redis.conf redis.conf.bck
然后修改redis.conf配置文件:
vi redis.conf
# 允许访问的地址,默认是127.0.0.1,会导致只能本地访问。修改为0.0.0.0则可以在任意ip访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问Redis必须输入密码:
requirepass 123456
Redis的其他常见配置:
# 监听端口
port 6379
# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志,持久化等文件会保存在这个目录
dir .
# 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"
启动Redis:
# 进入redis安装目录
cd /usr/local/src/redis
# 启动
redis-server redis.conf
# 检查redis是否运行
ps -ef | grep redis
停止服务:
#利用redis-cli来执行shutdown命令
redis-cli -u 密码 shutdown
1.3.3 开机自启
我们也可以通过配置来实现开机自启。
首先,新建一个系统服务文件:
vi /etc/systemd/system/redis.service
内容如下:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
# 注意这一行改成你自己的配置
ExecStart=/usr/local/bin/src/redis-server /usr/local/src/redis-7.0.8/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后重载系统服务:
systemctl daemon-reload
现在就可以启动redis了
# 启动redis
systemctl start redis
# 查看redis状态
systemctl status redis
# 停止redis
systemctl stop redis
# 重启redis
systemctl restart redis
# 开机自启
systemctl enable redis
Redis基本操作:
数据库操作
Redis默认有16个库,编号为0-15,且默认访问0号库
select 数据库编号 | 选择指定数据库 |
---|---|
dbsize | 获取当前数据库键值对数量 |
flushdb | 清空当前数据库 |
flushall | 清空所有数据库 |
save | 将数据保存至磁盘 |
bgsave | 将数据同步保存至磁盘(后台:Background) |
lastsave | 获取最后一次成功保存的unix时间 |
通用数据操作
操作范围为当前数据库
keys 格式 | 查看符合指定格式的key,*为通配符 |
---|---|
exists kry1[key2] | 查看是否存在一至多个指定的key |
type key | 按key查看value的数据类型 |
del key1[key2] | 按key删除一至多个键值对 |
rename key1 key2 | 重命名key1,如果key2已存在,其值会被覆盖 |
---|---|
renamenx key1 key2 | key2不存在时重命名key1 |
move key 数据库编号 | 按key将一个键值对移动到指定数据库 |
---|---|
copy key1 key2 | 将key1的值拷贝给key2 |
字符串(String)
基本操作:
set key value | 添加/修改一个键值对 |
---|---|
get key | 按key获取value |
mset key1 value1 [key2 value2…] | 添加/修改一至多个键值对 |
mget key1 [key2…] | 按key获取一至多个value |
append key value | 在原有value后追加内容 |
---|---|
strlen key | 查看字符串长度 |
getrange key startindex endindex | 获取范围是[startindex,endindex]的字串 index从0开始,-n表示倒数第n个字符 |
set key value nx sentnx key value | 仅在key不存在时,添加一个键值对 |
---|---|
set key value xx | 仅在key已存在时,修改一个键值对 |
set key value get getset key value | 修改一个键值对并返回原值,原值不存在则返回nil |
msetnx key1 value1 [key2 value2 …] | 批量版setnx |
如果字符串的内容是整数:
incr key | 按key创建值为1的value,或使value增长(increase)1 |
---|---|
incrby key 数值 | 按key使value增长(increase)给定的数值 |
decr key | 按key是value减小(decrease)1 |
decrby key 数值 | 按key是value减小(decrease)给定的数值 |
临时键值对:
生存时间time to live,缩写为ttl,指键值对距离被删除的剩余秒数
如果重新set,生存时间将被重置
以下操作支持各种数据类型
expire key 秒数 | 设定一个生存时间 |
---|---|
ttl key | 查看生存时间的剩余秒数 key不存在则返回-2,永久键值对则返回-1 |
pexpire key 毫秒数 | 毫秒版expire |
pttl key | 毫秒版ttl |
persist key | 持久化(取消生存时间) |
以下操作仅支持字符串
set key value ex 秒数 setex key 秒数 value | set+expire |
---|---|
set key value px 毫秒数 psetex key 毫秒数 value | set+pexpire |
set key value exat unix秒 | 设置一个unix秒的过期时刻 |
set key value pxat unix毫秒 | 设置一个unix毫秒的过期时刻 |
set key value keepttl | set时不重置ttl |
散列表(哈希表/Hash):
key-field-value,键-字段-值
基本操作:
hset key field1 value1 [field2 value2 …] 老版本hset为单个字段和值,多个为hmset | 添加/修改一个键与一至多对字段和值 |
---|---|
hget key field | 按key和field获取一对value |
hmget key field1 [field2 …] | 按key和field获取一至多对value |
hgetall key | 按key获取field获取全部的field-value |
hdel key field1 [field2 … ] | 删除一至多对field-value |
hsetnx key field value | 仅在field不存在时添加一对field-value |
---|
hkeys key | 查看一个散列表中所有的field |
---|---|
hvals key | 查看一个散列表中所有的value |
hlen key | 统计一个散列表中有多少对field-value |
hexists key field | 查看一个field是否存在 |
hstrlen key field | 按key和field查看value的长度 |
---|
如果value字符串的内容是数值:
hincrby key field 整数值 | 按key和field使value增长给定的值 |
---|---|
hincrbyfloat key field 小数值 | 按key和field使value增长给定的值 |
列表(List/列队):
key-value0-value1-…,键-有序的值列队
基本操作:
rpush key value0 [value1 …] | 在列表右侧推入1至多个值 |
---|---|
lpush key […value1] value0 | 在列表左侧推入1至多个值 |
rpop key [数量] | 从列表右侧弹出(指定数量的)值 全部弹出后,可以也会被删除 |
lpop key [数量] | 从列表左侧弹出(指定数量的)值 全部弹出后,可以也会被删除 |
rpushx key value0 [value1 …] | 仅当列表存在时,在列表右侧推入1至多个值 |
---|---|
lpushx key […value1] value0 | 仅当列表存在时,在列表左侧推入1至多个值 |
lset key *index value | 修改指定位置的值 |
---|---|
linsert key before/after 定位value value | 在定位value前/后插入一个值 |
lindex key *index | 按照索引查值 |
lrange key *startindex *endindex | 查看指定范围的值 |
llen key | 按照key查看队列长度 |
lrem key 数量 value | 删除指定值 数量为正代表从左侧开始删除,数量为负代表从右侧开始删除 |
ltrim key *startindex *endindex | 将列表修剪到给定范围 |
索引从0开始,-n表示倒数第几个
集合(Set):
key-stringX,stringY…,键-无序的不重复的成员
基本操作:
sadd key stringx [stringY …] | 添加1至多个成员 |
---|---|
srem key stringX [stringY …] | 删除1至多个成员 |
scard key | 返回成员数量 集合基数cardinality |
sismember key string | 查看是否存在指定成员 |
smismember key stringx [stringY …] | 批量查看是否存在指定成员 |
smembers key | 查看集合中所有成员 |
srandmember key[数量] | 随机查看指定数量的成员 |
spop key [数量] | 随机取出指定数量的成员 |
smove key1 key2 string | 将指定成员从集合1移至集合2 |
---|---|
sinter key1 [key2 …] | 查看给定集合的交集 |
sinterstore newkey key1 [key2 …] | 存储给定集合的交集 |
sunion key1 [key2 …] | 查看给定集合的并集 |
sunionstore newkey key1 [key2 …] | 存储给定集合的并集 |
sdiff key1 [key2…] | 查看给定集合的差集 |
sdiffstore newkey key1 [key2 …] | 存储给定集合的差集 |
有序集合(ZSet):
key-score1:stringX,score2:stringY…
键-按分数排序的不重复成员
基本操作:
zadd key [nx/xx][gt/lt][ch][incr] score1 string× [score2 stringY…] | 添加1至多个成员 NX︰仅当成员不存在时添加成员 XX:仅当成员存在时修改成员 LT(less than):仅当分数低于原有分数时才更新分数 GT(greater than):仅当分数高于原有分数时才更新分数 NX不可以与LT/GT同时使用 CH(changed)︰返回变更的成员数量*默认返回新增的成员数量 incr:累加分数 *选择incr时,只能操作一个分数-成员对 |
---|---|
zrem key stringX [stringY …] | 删除1至多个成员 |
zcount key minScore maxScore | 返回指定分数区间内的成员数量支持开区间:分数前加"(" 支持无穷大: “-inf"负无穷大,”+inf"正无穷大 |
zscore key string | 查看成员分数 成员不存在时返回nil |
zmscore key stringX [stringY …] | 批量查看成员分数 成员不存在时返回nil |
zcard key | 查看成员数量 |
zincrby key数值string | 将指定成员的分数增加给定数值 |
---|
区间操作:
zrange key start end [byscore/bylex] [rev][limit偏移量查看数量][withscores] | 查看指定分数区间内的成员 BYSCORE:按分数升序排序 BYSCORE支持开区间:分数前加"(“ BYSCORE支持无穷大:”-inf"“负无穷大,”+inf"“正无穷大 BYLEX(lexicographical)︰(分数相同时)按成员字符排序 BYLEX指定的时字符串区间,且需要指定开闭:“”[string"表示闭区间,“(string"表示开区间 BYLEX支持选取到开始或结束:”_“表示开始,”+"表示结束 REV(reverse)︰反转 LIMIT:用于指定查看范围,仅在开启BYSCORE/BYLEX时可用 WITHSCORES:带分数 |
---|---|
*zrevrange key start end [withscores] | 不再推荐,等效于zrange key start end rev [withscores] |
zrangestore newkey key start end [byscore/bylex][rev] [limit偏移量查看数量] | 存储指定分数区间内的成员 参考zrange key start end [byscore/bylex][rev] [limit偏移量查看数量] |
zlexcount key startString endString | 查看指定字符串区间内的成员数量 参考zrange key startString endString bylex删除指定字符串区间内的成员 |
---|---|
zremrangebylex key startString endString | 删除指定字符串区间内的成员 参考zrange key startString endString bylex |
zremrangebyscore key minScore maxScore | 删除指定分数区间内的成员 参考zrange key minScorcre maxScore byscore |
---|
zrank key string | 查看成员升序排名 从第0名开始 |
---|---|
zrevrank key string | 查看成员降序排名 从第0名开始 |
zremrangebyrank key startRank endRank | 删除指定排名区间内的成员 从第O名开始,-n表示倒数第n名 |
遍历:
遍历整个数据库:
scan游标[match 格式][count游标][type指定类型] | 遍历一定数量的key 游标:开始遍历的位置,从0开始, scan命令将返回遍历结束位置,如果返回0,说明已经遍历到了最后一个 match:指定key的格式,*为通配符 count:指定遍历结束的游标,默认为10 type:指定遍历的类型 |
---|
特定键值对的遍历:
hscan key游标[match格式][count游标] | 遍历指定散列表中的字段与值 |
---|---|
sscan key游标[match 格式][count 游标] | 遍历指定集合中的成员 |
zscan key游标[match格式][count游标] | 遍历指定有序集合中的成员与分数 |
事务
基本操作:
multi | 开启⼀个事务 |
---|---|
exec | 执⾏事务 执⾏前发现错误将⽆法执⾏ 执⾏中发现错误只能跳过错误的⼀步 |
discard | 回滚事务 |
监视:
watch key1 [key2 …] | 按key开始监视键值对 需要在事务开启前开启 如果被监视的键值对在事务exec之前被事务之外的操作改动,事务将被discard |
---|---|
unwatch | 停⽌监视 exec或discard会⾃动调⽤unwatch |