一、Redis的概述
Redis是一个开源的key-value存储系统。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted
set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,Redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
并且在此基础上实现了master-slave(主从)同步
二、Redis的安装
安装版本 6.2.1 for Linux([font color=red>redis-6.2.1.tar.gz[/font>)
2.1 安装准备工作
安装C语言的编译环境
yum install gcc
# 测试是否安装成功
gcc --version
2.2 下载redis-6.2.1.tar.gz放/opt目录
2.3 解压命令:tar -zxvf redis-6.2.1.tar.gz
2.4 解压完成后进入目录:cd redis-6.2.1
2.5 在redis-6.2.1目录下再次执行make命令(只是编译好)
2.6 如果没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件
2.7 解决方案:运行make distclean
2.8 在redis-6.2.1目录下再次执行make命令(只是编译好)![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061220063047.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2MTExMQ==,size_16,color_FFFFFF,t_70)
2.9.跳过make test 继续执行: make install
2.2.1 安装目录默认在 [font color=red>/usr/local/bin[/font>
查看默认安装目录:
redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:Redis集群使用
redis-server:Redis服务器启动命令
redis-cli:客户端,操作入口
2.2.2 redis启动
2.2.2.1 备份redis.conf
拷贝一份redis.conf到其他目录
cp /opt/redis-6.2.1/redis.conf /myredis
2.2.2.2 后台启动设置daemonize no改成yes
2.2.2.3 redis启动
redis-server /myredis/redis.conf
# 查看redis是否启动
ps -ef | grep redis
2.2.2.4 用客户端访问:redis-cli
2.2.2.5 redis关闭
单实例关闭:redis-cli shutdown
使用 kill -9 进程号 (直接杀死进程)
三、常用五大数据类型
3.1.Redis键(key)
keys * 查看当前库所有key (匹配:keys *1)
exists key 判断某个key是否存在
type key 查看你的key是什么类型
del key 删除指定的key数据
unlink key 根据value选择非阻塞删除 仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
expire key 10 10秒钟:为给定的key设置过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
select 命令切换数据库
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 通杀全部库
3.2.Redis字符串(String)
set [key][value] 添加键值对 *NX:当数据库中key不存在时,可以将key-value添加数据库 *XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥 *EX:key的超时秒数 *PX:key的超时毫秒数,与EX互斥
get [key]查询对应键值
append [key][value]将给定的[value] 追加到原值的末尾
strlen [key]获得值的长度
setnx [key][value]只有在 key 不存在时 设置 key 的值
incr [key] 将 key 中储存的数字值增1 只能对数字值操作,如果为空,新增值为1
decr [key] 将 key中储存的数字值减1 只能对数字值操作,如果为空,新增值为-1
incrby / decrby [key][步长>将 key中储存的数字值增减。自定义步长
mset [key1][value1][key2][value2] … 同时设置一个或多个 key-value对
mget [key1] [key2] [key3] … 同时获取一个或多个 value
msetnx [key1][value1][key2][value2] … 同时设置一个或多个 key-value 对,当且仅当所有给定key 都不存在。
[font color=red>原子性,有一个失败则都失败
getrange [key] [起始位置>[结束位置> 获得值的范围,类似java中的substring,前包,后包
setrange [key] [起始位置>[value] 用[value] 覆写[key] 所储存的字符串值,从[起始位置>开始(索引从0开始)。
setex [key] [过期时间>[value] 设置键值的同时,设置过期时间,单位秒。
getset [key] [value] 以新换旧,设置了新值同时获得旧值
3.3.Redis列表(List)
- lpush/rpush [key][value1][value2][value3] … 从左边/右边插入一个或多个值。
- lpop/rpop [key]从左边/右边吐出一个值。值在键在,值光键亡。
- rpoplpush [key1][key2] 从[key1]列表右边吐出一个值,插到[key2]列表左边。
- lrange [key][start][stop] 按照索引下标获得元素(从左到右)
- lrange mylist 0 -1 0左边第一个,-1右边第一个,(0-1表示获取所有)
- lindex [key][index]按照索引下标获得元素(从左到右)
- llen [key]获得列表长度
- linsert [key] before [value][newvalue]在[value]的后面插入[newvalue]插入值
- lrem [key][n][value]从左边删除n个value(从左到右)
- lset[key][index][value]将列表key下标为index的值替换成value
3.4.Redis集合(Set)
sadd [key][value1][value2] … 将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers [key]取出该集合的所有值。
sismember [key][value]判断集合[key]是否为含有该[value]值,有1,没有0
scard[key]返回该集合的元素个数。
srem [key][value1][value2] … 删除集合中的某个元素。
spop [key]随机从该集合中吐出一个值。
srandmember [key][n]随机从该集合中取出n个值。不会从集合中删除 。
smove [source][destination]value把集合中一个值从一个集合移动到另一个集合
sinter [key1][key2]返回两个集合的交集元素。
sunion [key1][key2]返回两个集合的并集元素。
sdiff [key1][key2]返回两个集合的差集元素(key1中的,不包含key2中的)
3.5.Redis哈希(Hash)
- hset [key][field][value] 给[key]集合中的 [field]键赋值[value]
- hget [key1][field] 从[key1]集合[field]取出 value
- hmset [key1][field1][value1][field2][value2]… 批量设置hash的值
- hexists[key1][field] 查看哈希表 key 中,给定域 field 是否存在。
- hkeys [key] 列出该hash集合的所有field
- hvals [key] 列出该hash集合的所有value
- hincrby [key][field][increment]为哈希表 key 中的域 field 的值加上增量 1 -1
- hsetnx [key][field][value]将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在
3.6.Redis有序集合Zset(sorted set)
zadd [key][score1][value1][score2][value2]… 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zrange [key][start][stop] [WITHSCORES] 返回有序集 key中,下标在[start][stop]之间的元素 带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key minmax [withscores] [limit offset count] 返回有序集 key 中,所有 score 值介于min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score
值递增(从小到大)次序排列。zrevrangebyscore key maxmin [withscores] [limit offset count] 同上,改为从大到小排列。
zincrby [key][increment][value] 为元素的score加上增量
zrem [key][value] 删除该集合下,指定值的元素
zcount [key][min][max] 统计该集合,分数区间内的元素个数
zrank [key][value] 返回该值在集合中的排名,从0开始。