Redis核心对象-redisObject
在Redis中有一个核心对象叫做redisObject,是用来表示所有的key和value的,用redisObject结构体来表示String、Hash、List、Set、Zset五种数据类型
redisObject的源代码在redis.sh中,使用C语言编写
- 数据类型(type)
- 编码方式(encoding)
- 数据指针(ptr)
- 虚拟内存(vm)
- 其他信息
Redis数据类型
String(字符串)类型
String是Redis最基本的数据类型,它数据结构存储方式有三种int、raw、embstr,它不仅可以存储字符串,还可以存储整数、浮点数、甚至是二进制数据,比如jpg图片或序列化的对象(一个String最大存储512M)
常用命令:
mset key1 value1 key2 value2 key3 value3:同时设置多个键值对
mset k1 name k2 age k3 gender
mget key1 key2 key3:同时获得多个键的值
mget k1 k2 k3
append key value:追加数据
append k1 zhangsan
-->"namezhangsan"
getrange key m n :截取key值的某一段,从第m-1位到n-1位
getrange k1 2 4
strlen key:获取key值的长度
incr key:自增(递增,默认自增1,只针对字符串是整数的情况)
decr key:自减(递减,默认自减1,只针对字符串是整数的情况)
set k1 2incr k1 --> 3decr k1 --> 2
incrby key 2:自定义自增多少
decrby key 2:自定义自减多少
Hash(哈希)类型
Hash(哈希)类型是从redis-2.0版本之后才有的数据结构,用于存放字符串和字符串之间的映射。Hash对象的实现方式有两种,分别是 Ziplist 和 hashtable,其中 hashtable 的存储方式 Key 是 String 类型, value 也是以 key-value 的形式进行存储。
常用命令:
hmset key field value [field value ...]:批量设置hash key的一批field value
127.0.0.1:6379> hmset user1 name tan age 18 sex maleOK
hget key field : 得到一个value值
127.0.0.1:6379> hget user1 name"tan"
hmget key field1 field2 ... fieldN: 批量获取hash key的一批field对应的值
127.0.0.1:6379> hmget user1 name sex1) "li"2) "male"
hgetall key : 得到所有键值对
127.0.0.1:6379> hgetall user11) "name"2) "tan"3) "age"4) "18"5) "sex"6) "male"
hset key field value: 设置hash key 对应的field的value
127.0.0.1:6379> hset user1 name li(integer) 0127.0.0.1:6379> hget user1 name"li"
hdel key field: 删除hash key 对应field的value
127.0.0.1:6379> hdel user1 sex(integer) 1127.0.0.1:6379> hgetall user11) "name"2) "li"3) "age"4) "19"
hlen key: 获取hash key field的数量
127.0.0.1:6379> hlen user1(integer) 3
hincrby key field increment: hash key 对应的field的value自增
127.0.0.1:6379> hincrby user1 age 1(integer) 19127.0.0.1:6379> hincrby user1 age -1(integer) 18127.0.0.1:6379> hincrby user1 age -2(integer) 16127.0.0.1:6379> hincrby user1 age 3(integer) 19
List(列表)类型
List 类型是一种链表结构,主要功能是 push (进栈)、pop(出栈);List 类型在 redis-3.2 之前的版本是使用 ziplist 和 linkedlist 进行实现的,之后版本就是引入 quicklist
常用命令:
lpush: 在key对应list的头部添加字符串元素
lpop:从key对应list的头部删除元素
rpush:在key对应list的尾部添加字符串元素
lrange:显示key对应list的元素
lpush key value [value ...]:在key对应list的头部添加字符串元素
127.0.0.1:6379> lpush mylist 1(integer) 1127.0.0.1:6379> lpush mylist 2(integer) 2127.0.0.1:6379> lpush mylist "3"(integer) 3
lrange key start stop: 显示key对应list的元素
127.0.0.1:6379> lrange mylist 0 -11) "3"2) "2"3) "1"
rpush key value [value ...]: 在key对应list的尾部添加字符串元素
127.0.0.1:6379> rpush mylist 4(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "3"2) "2"3) "1"4) "4"
lindex key index:打印key对应list第index位的元素
127.0.0.1:6379> lindex mylist 0"3"
lset key index value:修改key对应list第index位的元素
127.0.0.1:6379> lset mylist 0 111OK127.0.0.1:6379> lrange mylist 0 -11) "111"2) "2"3) "1"4) "4"
lpop key: 从key对应list的头部删除元素
127.0.0.1:6379> lpop mylist"111"127.0.0.1:6379> lrange mylist 0 -11) "2"2) "1"3) "4"
rpop key: 从key对应list的尾部删除元素
127.0.0.1:6379> rpop mylist"4"127.0.0.1:6379> lrange mylist 0 -11) "2"2) "1"
llen key:打印key对应list的长度
127.0.0.1:6379> llen mylist(integer) 2
lrem key count value: 从key对应list删除某个元素 count代表第几个,count等于0代表所有的
127.0.0.1:6379> lrange mylist 0 -11) "3"2) "2"3) "1"127.0.0.1:6379> lrem mylist 0 3(integer) 1127.0.0.1:6379> lrange mylist 0 -11) "2"2) "1"
linsert key BEFORE|AFTER pivot value: 从key对应list插入某个元素
127.0.0.1:6379> lrange mylist 0 -11) "10"2) "5"3) "2"4) "1"127.0.0.1:6379> linsert mylist before 10 99(integer) 5127.0.0.1:6379> lrange mylist 0 -11) "99"2) "10"3) "5"4) "2"5) "1"127.0.0.1:6379> linsert mylist after 2 999(integer) 6127.0.0.1:6379> lrange mylist 0 -11) "99"2) "10"3) "5"4) "2"5) "999"6) "1"
Quartz核心概念
Job
任务:定义具体执行的任务逻辑(内容)
JobDetail
任务详情:定义一个可执行的调度程序,Job是这个可执行调度程序所要执行的内容
Trigger
任务触发器:定义执行的方式、间隔
Scheduler
任务调度器: 是Quartz中的核心组件,它负责任务的调度、JobDetail、Trigger的管理,它包含了和定时调度相关的所有属性和操作。一般一个程序中就定义一个Scheduler组件。
Trigger 实现的四种方式
SimpleTrigger
指定从某一个时间开始,以一定得时间间隔(单位是毫秒)执行的任务;它适合的任务类似于:9:00 开始,每隔一小时,执行一次。
属性
- repeatInterval - 重复间隔
- repeatCount - 重复次数
ClendarIntervalTrigger
类似于 SimpleTrigger, 指定从某一个时间开始,以一定时间间隔执行的任务;ClendarIntervalTrigger支持的间隔单位有秒,分钟,小时,天,月,年,星期。它适合的任务类似于:9:00 开始,每隔一周,执行一次。
优势
- 更方便(比如每隔一小时执行,不用计算1小时等于多少毫秒)
- 支持不是固定长度的间隔 (比如间隔为月和年)
劣势
- 精度只能到秒
DailyTimeIntervalScheduleBuilder
指定每天的某个时间内,以一定时间间隔执行的任务,并且它可以支持指定星期。它适合的任务类似于:指定每天9:00至18:00,每隔70s执行一次,并且只要周一至周五执行。
属性
- statTimeOfDay - 每天开始时间
- endTimeOfDay - 每天结束时间
- daysOfWeek - 需要执行的星期
- interval - 执行间隔
- intervalUnit - 执行间隔的单位
- repeatCount - 重复次数
CronTrigger
适合于更复杂的任务,它支持类型于Linux Cron的语法(并且更强大),它基本上覆盖了以上三个Trigger的绝大部分能力(但不是全部);当然,它也更难以理解和掌握。它适合的任务类似于:每天0:00, 9:00, 18:00各执行一次。
Cron表达式=秒+分钟+小时+日期+月份+星期+年份(可选)
Set (无序集合) 类型
Set 类型是 String 类型的无序几个,Set 集合是不可重复的,而 List 列表可以存储相同的字符串
常用命令:
sadd key member [member ...]:添加
127.0.0.1:6379> sadd myset 1(integer) 1127.0.0.1:6379> sadd myset 1 2 3 4(integer) 3
smembers key:查询
127.0.0.1:6379> smembers myset1) "1"2) "2"3) "3"4) "4"
srem key member [member ...]:删除
127.0.0.1:6379> srem myset 2(integer) 1127.0.0.1:6379> smembers myset1) "1"2) "3"3) "4"
sismember key member:是否存在
127.0.0.1:6379> sismember myset 1(integer) 1127.0.0.1:6379> sismember myset 2(integer) 0
scard key:元素总数
127.0.0.1:6379> scard myset(integer) 3
srandmember key [count]:随机获取元素
127.0.0.1:6379> srandmember myset"3"127.0.0.1:6379> srandmember myset 11) "3"127.0.0.1:6379> srandmember myset 21) "4"2) "1"127.0.0.1:6379> srandmember myset 61) "1"2) "3"3) "4"
spop key [count]:随机弹出元素
127.0.0.1:6379> spop myset "1"127.0.0.1:6379> spop myset 11) "4"127.0.0.1:6379> smembers myset1) "3"
sunion key [key ...]:取多个set的并集 (sinter key [key ...]:取多个set的交集)
127.0.0.1:6379> smembers myset1) "1"2) "2"3) "3"127.0.0.1:6379> smembers myset21) "98"2) "99"3) "100"127.0.0.1:6379> sunion myset myset21) "1"2) "2"3) "3"4) "98"5) "99"6) "100"
Set 类型的底层实现
Set 类型的底层实现是 ht 和 Intset,其中 Inset 也叫做整数集合,用于保存整数值的数据结构类型,它可以保存 int16_t、int32_t 或者 int64_t 的整数值
Set 类型的应用场景
利用 Set 集合的无序且不可重复性,业务应用场景如下:
- 去重
- 抽奖
- 共同好友
- 二度好友
- ...
ZSet(有序集合)类型
Zset 类型是 String 类型的有序集合,Zset 集合是不可重复的,它的底层实现是 ziplist 和 skiplist(跳跃表)
常用命令:
zadd - 为指定key的zset添加元素
zpop -随机删除指定key中元素
zrem -删除指定元素
zadd key [NX|XX] [CH] [INCR] score member [score member ...]:为指定key的zset添加元素
127.0.0.1:6379> zadd myzset 1 www.baidu.com(integer) 1127.0.0.1:6379> zadd myzset 3 www.360.com(integer) 1127.0.0.1:6379> zadd myzset 2 www.google.com(integer) 1
zrange key start stop [WITHSCORES]: 显示key对应zset的元素
127.0.0.1:6379> zrange myzset 0 -11) "www.baidu.com"2) "www.google.com"3) "www.360.com"127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "www.baidu.com"2) "1"3) "www.google.com"4) "2"5) "www.360.com"6) "3"
zrem key member [member ...]: 为指定key的zset删除元素
127.0.0.1:6379> zrange myzset 0 -11) "www.baidu.com"2) "www.google.com"3) "www.360.com"127.0.0.1:6379> zrem myzset www.baidu.com(integer) 1127.0.0.1:6379> zrange myzset 0 -11) "www.google.com"2) "www.360.com"
Redis 命令参考
Redis命令参考2
原文转载:http://www.shaoqun.com/a/489479.html
大森林:https://www.ikjzd.com/w/2268
易联通:https://www.ikjzd.com/w/1854.html
外贸圈:https://www.ikjzd.com/w/1083
Redis核心对象-redisObject在Redis中有一个核心对象叫做redisObject,是用来表示所有的key和value的,用redisObject结构体来表示String、Hash、List、Set、Zset五种数据类型redisObject的源代码在redis.sh中,使用C语言编写数据类型(type)编码方式(encoding)数据指针(ptr)虚拟内存(vm)其他信息Redis
naning9韩国官网:https://www.ikjzd.com/w/2401
e邮包:https://www.ikjzd.com/w/594.html?source=tagwish
去不丹旅游吃什么:http://tour.shaoqun.com/a/59556.html
口述:加盖一层房她才会嫁给我(3/3):http://lady.shaoqun.com/m/a/39549.html
2020平安夜三亚晚上去哪里玩?三亚亚马逊丛林水乐园平安夜:http://tour.shaoqun.com/a/30891.html
没有评论:
发表评论