数据库redis作业
redis9种数据类型的基本操作
redis持久化:分别启用rdb和aof,并查看是否有对应文件生成
作业1:redis9种数据类型的基本操作
1、key操作
key *
#查询所有的key
keys *
exists 参数
#参数:key
#判断该key是否存在,存在返回1,不存在返回0
exists key
#参数也可以是多个key,返回的的是存在key的数量
exists key1 key2
type 参数
#参数:key
#查看该key的类型
type key
del 参数
#参数:key
#删除指定key数据
del key
#参数可以是多个key,作批量删除
del key1 key2
expire 参数 time
#参数:key
#time:秒数
#设置指定key经过10秒后过期
expire key 10
ttl 参数
#参数:key
#查看指定key的过期时间,-1表示永不过期,-2表示已过期
ttl key
move 参数1 参数2
#参数1:key
#参数2:dbindex[0-15]
#移动指定key到4号库
move key 4
select 参数
#参数:dbindex[0-15]
#切换到4号库
select 4
dbsize
#查看当前库key的数量
dbsize
flushdb
#清空当前库
flushdb
flushall
#清空所有库
flushall
2、String类型
String类型是Redis最基础和常见的数据类型,用于存储一个字符串。在Redis中,可以对String类型的值进行各种操作,如set、get、incr、append等,同时支持字符串的位操作。String类型通常用于缓存数据、计数器、分布式锁等场景。
get 参数
#查看键的值
get key
SET参数
#设置键,值
set key value
set 设置
格式:set 参数1 参数2 [参数3] [参数4] [参数5]
参数1:key名称
参数2:value
参数3:NX | XX
参数4:GET
参数5:EX seconds | PX milliseconds |
EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL
设置k1的value为hello:
set k1 hello
如果k2存在直接返回nil,如果k2不存在,设置k2的value为hello:
set k2 hello NX
如果k3不存在直接返回nil,如果k3存在,设置k3的value为"hello":
set k3 hello XX
先返回k4原来的value再将k4的value修改为hello,如果k4不存在返回值为nil:
set k4 hello get
设置k5的value为hello,并在10秒后过期:
set k5 hello ex 10
设置k6的value为hello,并在500毫秒后过期:
set k6 hello px 500
设置k7的value为hello,并在到达时间戳1783219280秒过期:
set k7 hello exat 1783219280
设置k8的value为hello,并在到达时间戳1783219461238毫秒过期:
set k8 hello exat 1783219461238
设置k9的value为hello,并保留k9原先设定的过期时间:
set k9 hello keepttl
GETSET查询后设置
格式:getset 参数1 参数2
参数1:key名称
参数2:内容
先返回k1原来的value,再将value设置为hello
getset k1 hello
SETEX 过期值设置
格式:setex 参数1 参数2 参数3
参数1:key名称
参数2:秒
参数3:内容
设置k1的值为hello并在10秒后过期
setex k1 10 hello
SETNX 冲突设置
格式:setnx 参数1 参数2
参数1:key名称
参数2:内容
如果k1不存在,设置k1的值为hello
setnx k1 hello
MGET 批量查询
格式:mget 参数1
参数1:key列表
获取k1、k2的value
mget k1 k2
MSET 批量设置
格式:MSET 参数1
参数1:键值对列表
设置k1的value为v1、k2的value为v2
mset k1 v1 k2 v2
MSETNX NX规则批量设置
格式:MSETNX 参数1
参数1:键值对列表
如果不存在k1、k2(需都成立),则设置k1的value为v1、k2的value为v2
msetnx k1 v1 k2 v2
GETRANGE 精准截取
格式:getrange 参数1 参数2 参数3
参数1:key名称
参数2:起始位置
参数3:终止位置
获取key的value,并返回value的0 - 5位置上的字符
getrange key 0 5
SETRANGE 精准设置
格式:setrange 参数1 参数2 参数3
参数1:key名称
参数2:起始位置
参数3:字符串
将hello设置到k1对应value的索引1位置
setrange k1 1 hello
INCR 自增查询
格式:incr 参数1
参数1:key名称
注:key对应的value值必须为数字整型
使k10的value自增1并返回自增后的值
incr k10
INCRBY 增加查询
格式:incrby 参数1 参数2
参数1:key名称
参数2:数字整型
注:这里的key对应的value必须为数字整型
使k10的value增加5并返回增加后的值
incrby k10 5
DECR 自减查询
格式:decr参数1
参数1:key名称
注:这里的key对应的value必须为数字整型
使k10的value自减1并返回自增后的值
decr k10
DECRBY 增加查询
格式:decrby 参数1 参数2
参数1:key名称
参数2:数字整型
注:这里的key对应的value必须为数字整型
使k10的value减少5并返回减少后的值
decrby k10 5
STRLEN 获取字符串长度
格式:strlen 参数1
参数1:key名称
获取k1的value字符串长度
strlen k1
APPEND 追加内容
格式:append 参数1 参数2
参数1:key名称
参数2:内容
将hello追加到k1的value后
append k1 hello
3、List类型
LPUSH 左端插入
格式:lpush 参数1 参数2
参数1:list名称
参数2:插入的数据,可以是多个用空格隔
在list1左端依次插入hello、world
lpush list1 hello world
RPUSH 右端插入
格式:rpush 参数1 参数2
参数1:list名称
参数2:插入的数据,可以是多个用空格分隔
在list1右端依次插入hello、world
rpush list1 hello world
LRANGE 检索列表
格式:lrange 参数1 参数2 参数3
参数1:list名称
参数2:起始索引
参数3:终止索引
检索list1索引0到3的数据
lrange list1 0 3
LPOP 左端弹出
格式:lpop 参数1 [参数2]
参数1:list名称
参数2:数量
弹出list1左端第1条数据
lpop list1
RPOP 右端弹出
格式:rpop 参数1 [参数2]
参数1:list名称
参数2:数量
弹出list1右端第1条数据
rpop list1
LINDEX 检索指定索引数据
格式:lindex 参数1 参数2
参数1:list名称
参数2:索引
检索list1索引为1的数据
lindex list1 1
LLEN 检索数量
格式:llen 参数1
参数1:list名称
检索list1数据的条数
llen list1
LREM 删除值
格式:lrem 参数1 参数2 参数3
参数1:list名称
参数2:数量
参数3:指定值
在list1中删除1条值为hello的数据
lrem list1 1 hello
LTRIM 截取赋值
格式:ltrim 参数1 参数2 参数3
参数1:list名称
参数2:起始索引
参数3:终止索引
截取list1索引1到5的数据,将截取片段替换为list1的value
ltrim list1 1 5
RPOPLPUSH 弹出插入
格式:rpoplpush 参数1 参数2
参数1:list名称
参数2:list名称
将list1右端数据弹出,并将该数据压入list2的左端
rpoplpush list1 list2
LSET 修改
格式:lset 参数1 参数2 参数3
参数1:list名称
参数2:索引
参数3:值
将list1索引为3的值修改为hello
lset list1 3 hello
LINSERT 插入
格式:linsert 参数1 参数2 参数3 参数4
参数1:list名称
参数2:before | after
参数3:已有值
参数4:新值
在list1插入一个新值world位置在hello前面
linsert list1 before hello world
在list2插入一个新值world位置在hello后面
linsert list2 after hello world
4、Hash(哈希)类型
HSET 设置
格式:hset 参数1 参数2
参数1:hash名称
参数2:键值对
在user01中添加一个键值对key为id、value为1
hset user01 id 1
HGET 获取
格式:hget 参数1 参数2
参数1:hash名称
参数2:内部key
获取user01的id
hget user01 id
HMSET 批量设置
格式:hmset 参数1 参数2
参数1:hash名称
参数2:键值对(可以多个使用空格分隔)
在user01中添加一个id值为1、name值为zhangsan
hmset user01 id 1 name zhangsan
HMGET 批量获取
格式:hmget 参数1 参数2
参数1:hash名称
参数2:内部key(可以多个使用空格分隔)
获取user01的id和name
hmget user01 id name
HGETALL 获取所有
格式:hgetall 参数1
参数1:hash名称
获取user01的所有内容
hgetall user01
HLEN 获取长度
格式:hlen 参数1
参数1:hash名称
获取user01的键值对数量
hlen user01
HDEL 删除键值对
格式:hdel 参数1 参数2
参数1:hash名称
参数2:内部key
删除user01的name键值对
hdel user01 name
HEXISTS 存在检索
格式:hexists 参数1 参数2
参数1:hash名称
参数2:内部key
检索user01是否存在name键
hexists user01 name
HKEYS 获取所有键
格式:hkeys 参数1
参数1:hash名称
获取user01的所有key
hkeys user01
HVALS 获取所有值
格式:hkeys 参数1
参数1:hash名称
获取user01的所有value
hvals user01
HINCRBY 整数加法
格式:hincrby 参数1 参数2 参数3
参数1:hash名称
参数2:内部key
示例:
对user01中age的value增加1
hincrby user01 age 1
HINCRBYFLOAT 浮点数加法
格式:hincrbyfloat 参数1 参数2 参数3
参数1:hash名称
参数2:内部key
对user01中score的value增加0.5
hincrbyfloat user01 score 0.5
HSETNX NX规则设置
格式:hsetnx 参数1 参数2
参数1:hash名称
参数2:键值对
如果user01中不存在id,则添加一个键值对key为id、value为1
hsetnx user01 id 1
5、Set(集合)类型
SADD 添加元素
格式:sadd 参数1 参数2
参数1:set名称
参数2:元素(可以多个使用空格分隔)
将hello、world添加到set1
sadd set1 hello world
SMEMBERS 遍历
格式:smembers 参数1
参数1:set名称
遍历set1
smembers set1
SISMEMBER 存在判断
格式:sismember 参数1 参数2
参数1:set名称
参数2:元素
判断hello是否存在于set1
sismember set1 hello
SREM 删除
格式:srem 参数1 参数2
参数1:set名称
参数2:元素
在set1中删除hello
srem set1 hello
SCARD 检索元素个数
格式:scard 参数1
参数1:set名称
检索set1中元素个数
scard set1
SRANDMEMBER 随机展示
格式:srandmember 参数1 参数2
参数1:set名称
参数2:数量
在set1随机展示2个元素
srandmember set1 2
SPOP 随机弹出
格式:spop 参数1 参数2
参数1:set名称
参数2:数量
在set1 随机弹出2个元素
spop set1 2
SMOVE 元素移动
格式:smove 参数1 参数2 参数3
参数1:数据源set名称
参数2:接收set名称
参数3:元素
将set1中的hello移动到set2
smove set1 set2 hello
SDIFF 差集
格式:sdiff 参数1 参数2
参数1:被差运算set
参数2:差运算set(可以多个用空格分隔)
检索在set1和set2中set1独有的元素
sdiff set1 set2
SUNION 并集
格式:sunion 参数1 参数2
参数1:set名称
参数2:set名称(可以多个用空格分隔)
检索set1、set2合并后的集合
sunion set1 set2
SINTER 交集
格式:sinter 参数1 参数2
参数1:set名称
参数2:set名称(可以多个用空格分隔)
检索set1和set2共有的元素,返回结果集
sinter set1 set2
SINTERCARD 交集(redis7新命令)
格式:sintercard 参数1 参数2 参数3
参数1:参与的set数量
参数2:参与的set名称(每个用空格分隔)
参数3:limit限制
检索set1和set2共有的元素,返回数量
sintercard 2 set1 set2
6、ZSet(有序集合)类型
ZADD 添加
格式:zadd 参数1 参数2 参数3
参数1:zset名称
参数2:zset元素(score value)(可以多个使用空格分隔)
在zset1添加一个元素score为60、value为hello
zadd zset1 60 hello
ZRANGE 遍历
格式:zrange 参数1 参数2 参数3 [参数4]
参数1:zset名称
参数2:起始索引
参数3:终止索引
参数4:withscores
遍历zset1所有元素
zrange zset1 0 -1
附带分数反转遍历zset1所有元素
zrevrange zset1 0 -1 withscores
ZRANGEBYSCORE 分数范围选取
格式:zrangebyscore 参数1 参数2 参数3 参数4 参数5
参数1:zset名称
参数2:最低分
参数3:最高分
参数4:withscores
参数5:limit 起始索引 步长
附带分数检索zset1中60到100分的元素
zrangebyscore zset1 60 100 withscores
检索zset1中60到100分的元素,限制从0开始步长为2
zrangebyscore zset1 60 100 limit 0 2
ZSCORE 检索分数
格式:zscore 参数1 参数2
参数1:zset名称
参数2:元素
检索zset1中v1元素的分数
zscore zset1 v1
ZCARD
格式:zcard 参数1
参数1:zset名称
检索zset1元素个数
zcard zset1
ZREM 删除
格式:zrem 参数1 参数2
参数1:zset名称
参数2:元素(可以多个使用空格分隔)
删除zset1中v1、v2元素
zrem zset1 v1 v2
ZINCRBY 增加分数
格式:zincrby 参数1 参数2 参数3
参数1:zset名称
参数2:分数
参数3:元素
将zset1中的v1元素的分数增加5分
zincrby zset1 5 v1
ZCOUNT 检索指定分数范围中的元素个数
格式:zcount 参数1 参数2 参数3
参数1:zset名称
参数2:最低分
参数3:最高分
检索zset1中60到100分的元素个数
zcount zset1 60 100
ZRANK 检索索引
格式:zrank 参数1 参数2
参数1:zset名称
参数2:元素
检索zset1中v1的索引号
zrank zset1 v1
ZREVRANK 检索反转索引
格式:zrevrank 参数1 参数2
参数1:zset名称
参数2:元素
反转检索zset1中v1的索引号
zrevrank zset1 v1
7、Bitmaps(位图)
SETBIT 设置
格式:setbit 参数1 参数2 参数3
参数1:bitmap名称
参数2:索引
参数3:值( 1 | 0 )
将bitmap1的第一个位置的值设为1
setbit bitmap1 1 1
GETBIT 检索
格式:getbit 参数1 参数2
参数1:bitmap名称
参数2:索引
检索bitmap1索引为2的值
getbit bitmap1 2
STRLEN 统计字节数
格式:strlen 参数1
参数1:bitmap名称
统计bitmap1占用的字节数(每8位占1字节)
strlen bitmap1
BITCOUNT 统计
格式:bitcount参数1 [参数2]
参数1:bitmap名称
参数2:范围(起始字节 终止字节)
统计bitmap1值为1的数量
bitcount bitmap1
统计bitmap1中0到1字节范围内值为1的数量
bitcount bitmap1 0 1
BITOP 位运算
格式:bittop 参数1 参数2 参数3
参数1:AND(与) | OR(或) | XOR(异或) | NOT(非)
参数2:存放的bitmap
参数3:参与运算的bitmap(空格分隔)
将bitmap1和bitmap2进行与运算并将结果存放在newbitmap
bitop and newbitmap bitmap1 bitmap2
将bitmap3进行非运算并将结果存放在newbitmap(非运算只能有一个bitmap)
bitop not newbitmap bitmap1
8、HyperLogLog
PFADD 添加
格式:pfadd 参数1 参数2
参数1:hyperLogLog名称
参数2:元素(可以多个,使用空格分隔
)
将zs、ls添加到p1中
pfadd p1 zs ls
PFCOUNT 统计
格式:pfcount 参数1
参数1:hyperLogLog名称(可以多个,使用空格分隔)
统计p1中的基数个数
pfcount p1
PFMERGE 合并
格式:pfmerge 参数1 参数2
参数1:接收结果hyperLogLog名称
参数2:hyperLogLog名称(使用空格分隔)
将p1、p2合并到newkey中
pfmerge newkey p1 p2
9、Geospatial(地理空间)
GEOADD 添加
格式:geo 参数1 参数2 参数3
参数1:geo名称
参数2:经度
参数3:纬度
参数4:描述
在city里面添加天安门、故宫的经纬度坐标
geoadd city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫"
GEOPOS 返回经纬度
格式:geopos 参数1 参数2 参数3
参数1:geo名称
参数2:描述(可以多个,使用空格分隔)
返回故宫的经纬度
geopos city "故宫"
GEOHASH hash表示返回经纬度
格式:geohash参数1
参数1:geo名称
参数2:描述(可以多个,使用空格分隔)
hash表示返回故宫的经纬度
geohash city "故宫"
GEODIST 距离计算
格式:geodist 参数1 参数2 参数3
参数1:geo名称
参数2:描述1
参数3:描述2
参数3:单位( M | KM | FT | MI )
计算天安门和故宫相距多少KM
geodist city "天安门" "故宫" KM
作业2:redis持久化:分别启用rdb和aof,并查看是否有对应文件生成
RDB
1、修改配置文件名
根据redis.conf中的配置,快照将被写入dbfilename指定的文件中(默认是dump.rdb文件)
2、配置文件目录
根据redis.conf中的配置,快照将保存在dir选项指定的路径上,我们可以修改为指定目录,默认是根目录
修改完配置文件后,保存配置文件并重启服务
redis-server /etc/redis.conf #保存配置文件
systemctl restart redis.service #重启服务
可以看到下图,已经存在了dump.rdb文件
AOF
1、修改配置文件
通过修改redis.conf配置中appendonly yes
来开启AOF持久化
通过appendfilename指定日志文件名字(默认为appendonly.aof)
通过appendfsync指定日志记录频率
2、配置选项
配置好redistribution.conf文件后,进入redis界面敲bgrewriteaof
命令
后面在目录里就可以看见生成了一个appendonlydir目录,这个目录就是aof文件存放的默认目录,进入目录里,可以看见aof文件。