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 2
incr k1 --> 3
decr 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 male
OK
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 sex
1) "li"
2) "male"
hgetall key : 得到所有鍵值對
127.0.0.1:6379> hgetall user1
1) "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) 0
127.0.0.1:6379> hget user1 name
"li"
hdel key field: 洗掉hash key 對應field的value
127.0.0.1:6379> hdel user1 sex
(integer) 1
127.0.0.1:6379> hgetall user1
1) "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) 19
127.0.0.1:6379> hincrby user1 age -1
(integer) 18
127.0.0.1:6379> hincrby user1 age -2
(integer) 16
127.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) 1
127.0.0.1:6379> lpush mylist 2
(integer) 2
127.0.0.1:6379> lpush mylist "3"
(integer) 3
lrange key start stop: 顯示key對應list的元素
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "2"
3) "1"
rpush key value [value ...]: 在key對應list的尾部添加字串元素
127.0.0.1:6379> rpush mylist 4
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "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 111
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "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 -1
1) "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 -1
1) "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 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrem mylist 0 3
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
linsert key BEFORE|AFTER pivot value: 從key對應list插入某個元素
127.0.0.1:6379> lrange mylist 0 -1
1) "10"
2) "5"
3) "2"
4) "1"
127.0.0.1:6379> linsert mylist before 10 99
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "99"
2) "10"
3) "5"
4) "2"
5) "1"
127.0.0.1:6379> linsert mylist after 2 999
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "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) 1
127.0.0.1:6379> sadd myset 1 2 3 4
(integer) 3
smembers key:查詢
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"
4) "4"
srem key member [member ...]:洗掉
127.0.0.1:6379> srem myset 2
(integer) 1
127.0.0.1:6379> smembers myset
1) "1"
2) "3"
3) "4"
sismember key member:是否存在
127.0.0.1:6379> sismember myset 1
(integer) 1
127.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 1
1) "3"
127.0.0.1:6379> srandmember myset 2
1) "4"
2) "1"
127.0.0.1:6379> srandmember myset 6
1) "1"
2) "3"
3) "4"
spop key [count]:隨機彈出元素
127.0.0.1:6379> spop myset
"1"
127.0.0.1:6379> spop myset 1
1) "4"
127.0.0.1:6379> smembers myset
1) "3"
sunion key [key ...]:取多個set的并集 (sinter key [key ...]:取多個set的交集)
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers myset2
1) "98"
2) "99"
3) "100"
127.0.0.1:6379> sunion myset myset2
1) "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) 1
127.0.0.1:6379> zadd myzset 3 www.360.com
(integer) 1
127.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 -1
1) "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 -1
1) "www.baidu.com"
2) "www.google.com"
3) "www.360.com"
127.0.0.1:6379> zrem myzset www.baidu.com
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1
1) "www.google.com"
2) "www.360.com"
Redis 命令參考
Redis命令參考2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/206105.html
標籤:其他
上一篇:Hive經典案例:求出數學成績大于語文成績學生的資訊
下一篇:請問這題用C語言怎么做?
