Redis(2)- RedisAPI与LUA使用
Redis(2)- RedisAPI与LUA使用前言一、Redis基本数据类型及API1.基本数据类型2.API操作二.Redis使用LUA脚本1 LUA在Redis上的应用-硬编码2 LUA在Redis上的应用-使用脚本文件三、Redis配置文件使用总结前言主要包括Redis基本数据类型API,Redis结合Lua脚本使用,Redis一些属性配置一、Redis基本数据类型及API1.基本数据类型
Redis(2)- RedisAPI与LUA使用
前言
主要包括Redis基本数据类型API,Redis结合Lua脚本使用,Redis一些属性配置概念
- 过期时间
expire/pexpire key ttl ttl 秒/毫秒 过期
expireat/pexpireat key timestamp :过期时间设置为指定的timestamp 秒/毫秒
redis底层使用pexpireat实现
ttl / pttl key : 查询过期剩余秒/毫秒数 未设置过期为-1 非法时间为-2
一、Redis基本数据类型及API
1.基本数据类型
-
string
最大不超过512M
-
int(long类型的整数)编码实现字符串对象。
如果一个字符串对象,保存的值是一个整数值
,并且这个整数值在long 范围
内。 -
embstr(embstr编码的简单动态字符串)编码实现字符串对象。
如果字符串对象保存的是一个字符串
,但是长度小于等于39
个字节。 -
raw(简单动态字符串)编码实现字符串对象。
如果字符串对象保存的是一个字符串
,但是长度大于39
个字节。
-
`set key value ex(秒)/px(毫秒) time(过期时间)`
set age 19 ex 10 :设置age10秒后过期
`del key `:删除key
incr key :key加1操作 返回增加后的值
incrby key num:key加num操作
decr key :整数key减1
decrby key num:整数key 减num
incrbyfloat key 1.1 :浮点型key+1.1
`setnx key value :如果key不存在设置key值为value,返回1 否则返回0`
`mset key value [key value ...] :批量设值`
mset name zcp age 20 sex 男
`mget key ...` :批量获取
`append key value `:key追加value值
`strlen key `:返回key长度
`getrange key start end `:获取截取的字符串(包括start end ,下标从0开始)
set name zcp ; getrange name 12 返回 cp
-
hash
使用场景:是一个string类型的field和value的映射表,hash特适合用于存储对象。对于更新不多的情况下,可以使用序列化,对于VALUE值不大于64字节可以使用hash类型
-
ziplist(压缩列表)实现的哈希对象
hash 对象保存的所有键、值长度小于等于64字节
并且键值对数量小于等于512
时使用 -
hashtable(字典)实现的哈希对象
不满足 ziplist 压缩列表
条件时使用
-
`hset key field value `:设key单个field值
`hget key filed`:取key的field值
`hmget key field ...`:取key的多个field值
`hgetall key`:取key的所有field
`hdel key field ...`:删除多个field
`hlen key`:计算key的field个数
`del key`:删除key
`hexists key field `:判断field是否存在
`hkeys key `:获取key的所有field
`hvals key`:获取key的所有value
增减操作
`hincrbyfloat key filed 2`:对key的filed值加2
-
list
一个列表最多可存2的32次方减1个元素
-
Redis 3.2之前
-
ziplist(压缩列表)实现的列表对象。
列表长度小于512
,并且列表保存的所有
字符串元素长度小于64
字节。 -
linkedlist(双端链表)实现的列表对象。
不满足 ziplist 压缩列表
条件的都用 linkedlist 双端链表。
-
-
Redis 3.2之后
- quicklist(快速链表),所有列表的底层实现都是这个,底层是将
ziplist 压缩列表
和linkedlist 双端链表
进行了结合。
- quicklist(快速链表),所有列表的底层实现都是这个,底层是将
-
`lpush key value ...`:从左往右设值value到list类型的key中
`rpush key value `:从右往左
lpush list:001 1 2 3 4
`lrange key start end `:从list类型key中获取start end位置的值(包含 start end)
`lrange key 0 -1 `:获取key的所有元素
lrange list:001 0 3
`linsert key before/after pivot value`:在key的pivot之前或之后插入value
linsert list:001 before 9 8:在9之前插入8
如果pivot有多个,会找最先找到的那一个
`lindex key index`:获取key的index位置元素(如果为负值,往后数 -1 就是最后一位)
`llen key`:获取key的总元素量
`lpop key`:把左边第一个元素删除
`rpop key`:把右边第一个元素删除
`lrem key num pivot`:从左边开始删除值为pivot的num个元素
`lrem key 0 pivot`:检索所有pivot全部删除
`ltrim key start end`:保留key从start到end的元素,其它全部删除
`lset key index value`:设置key中index位的元素值为value
-
set
一个列表最多可存2的32次方减1个元素
使用场景:用户标签,社交,查询有共同兴趣爱好的人,智能推荐
-
intset(整数集合)实现的集合对象
集合内所有
对象都是整数
,并且集合的长度小于等于512
时使用。 -
hashtable(字典)实现的集合对象
不满足 intset 整数集合的条件
时使用。
-
`sadd key value ...`:往set类型的key中添加value元素
sadd set:001 1 2 3 3 4 :返回3(实际插入的数量) , 重复的会去除
`exists key`:判断key是否存在
exists set:001 :存在返回 1 不存在返回 0
`smembers key`:展示key的所有值
smember set:001 :1 2 3 4
`srem key member`:删除key中指定元素值member
`scard key`:返回key的总元素数量
`sismember key member`:判断key中是否存在member元素
`srandmember key count`:随机从key中返回count个元素
`spop key count`:随机从key中弹出count个元素,并从key中删除
sadd set:001 1 2 3 4
sadd set:002 2 3 4 5
`sinter key...`:返回所有key中元素的交集
sinter set:001 set:002:2 3 4
`sunion key...`:返回所有key中的元素的并集
sunion set:001 set:002:1 2 3 4 5
`sdiff key...`:返回key中元素的差集(以第一个key为准)
sdiff set:001 set:002:1
sdiff set:002 set:001:5
-
zset
一个列表最多可存2的32次方减1个元素
常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数
-
ziplist(压缩列表)
-
skiplist(跳跃表和字典)实现的有序集合对象
不满足 ziplist 压缩列表
条件时使用。
-
`zadd key nx/xx score member`:设置key的元素名称为member的分值为score,nx(不存在则插入)
xx(必须存在做更新)
ch(返回操作结果)
zadd zset:001 20 age20
zadd zset:001 nx 21 age21 :nx不存在新增
zadd zset:001 22 age23
zadd zset:001 xx incr 1 age23:22+1=23
zadd zset:001 xx ch incr -1 age24:ch返回操作结果
`zrange key start end withscores`:查看score数据 zrevrange 倒序
zrange zset:001 0 -1 withscores
1) "age20"
2) "20"
3) "age22"
4) "22"
5) "age23"
6) "23"
7) "age24"
8) "25"
9) "age25"
10) "25"
`zcard key`:统计成员个数
zcount
zset是分数越小越排前面
`zscore key member`:查看成员member分数
`zrank key member`:返回成员排名 升序
`zrevrank key member`:返回成员排名 倒序
`zrem key member...`:删除成员
`zincrby key increment member`:增加分数
`zrangebyscore key (start +inf withscores`:查询大于start的数据
`zrevrangebyscore key (end -inf withscores`:查询小于end的数据
`zremrangebyscore/zremrangebyrank`:删除
`zinterstore zset:012 2 zset:001 zset:002 aggregate sum`:交集score求和产生的数据放到zet:012上
`zinterstore user_jjmax 2 user:7 user:8 aggregate max 或min`:取
2.操作
`keys *` :遍历所有键 *是用来匹配
`keys [j,k]*`:遍历j,k开头的所有键
`单线程,生产环境不建议使用,如果键多可能会造成阻塞;`
`scan`:用于迭代当前数据库中的数据库键。
如果数据集合不是以哈希表作为底层实现的话,则scan类命令无视count选项,直接返回数据集合中的所有元素
`scan 0 match *`:匹配以n开头的键,最大是取10条,第一次scan 0开始
注:可有效地解决keys命令可能产生的阻塞问题
除scan字符串外:还有以下
`SCAN 命令用于迭代当前数据库中的数据库键。`
`scan 0 match *`
`SSCAN 命令用于迭代集合键中的元素。`
`sscan set:001 0 match *`
`HSCAN 命令用于迭代哈希键中的键值对。`
`hscan user:001 0 match *`
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
用法和scan一样
zscan zset:001 0 match *
multi #开启事务
watch #取消事务
exec #提交事务
二.Redis使用LUA脚本
Lua是一个小巧的脚本语言, Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在所有脚本引擎中,Lua的速度是最快的。
1 LUA在Redis上的应用-硬编码
Lua脚本提供了原子性
Lua脚本在Redis使用方法
方法定义参数:(operate [操作 get set hget等], KEYS[1]……KEYS[n] [参数个数N], args1……argsn)
调用方法传参:( n , 1……n , args1……argsn)
使用Lua脚本获取string key值
set name zcp
eval "return redis.call('get',KEYS[1])" 1 name
2 LUA在Redis上的应用-使用脚本文件
Redis可以加载Lua脚本文件,返回SHA值,然后Redis根据SHA值调用 evalsha
三、Redis配置文件使用
Redis指令生命周期:发送,排队,执行,返回
Redis所有的配置变量都可以动态设置(重启失效)和配置文件设置(持久化)
使用config set完后,若想将配置持久化保存到redis.conf,要执行config rewrite
#慢日志
slowlog-log-slower-than 10000 #微秒 = 10毫秒
slowlog-max-len 128 #慢查询队列存放的最大条数、第129进来 第一条会出去
slowlog get #获取慢查询记录
#动态设置 动态设置执行超过5毫秒的日志为慢日志
config set slowlog-log-slower-than 5000
192.168.42.120:6379> slowlog get
1) 1) (integer) 5 #第5+1条入队列的慢查询
2) (integer) 1610639456 #时间戳
3) (integer) 58269 #执行时间
4) 1) "keys" #指令
2) "*" #
5) "192.168.42.120:57678" #
6) ""
2) 1) (integer) 4
2) (integer) 1610638466
3) (integer) 601
4) 1) "SET"
2) "str:25845"
3) "25845"
5) "192.168.42.1:3004"
6) ""
更多推荐
所有评论(0)