Redis字符串類型的操作
set keyname value [ex 秒數(shù)]/[px 毫秒數(shù)] [nx]/[xx]
如:set a 1 ex 10 10秒有效
set a 1 px 9000 9秒有效
注意:ex,px不要同時寫,否則以后面的有效期為準(zhǔn),如set a 1 ex 100 px 9000,實(shí)際有效值是9秒
mx:表示key不存在時,執(zhí)行操作
xx:表示key存在時,執(zhí)行操作
mset keyname1 values1 keyname2 values 2 keyhnmae3 value2……
一次設(shè)置多個key
mget keyname1 keyname2 keynmae keynamen……
一次獲取多個key的值
setrange keyname offset value
作用:把字符串的offset偏移字節(jié)改成value
如:set greet hello
setrange greet 2 x
get greet
"hexlo"(這里也看出是從0開始計數(shù)的)
flushdb?
如果偏移常量大于字符長度,中間的用\x00來填補(bǔ)
append keyname value
把value加到kename鍵對應(yīng)的字符串值的末尾
getrange keyname start stop
作用:是獲取字符串中[start,stop]范圍的值
另外:get keyname 0 -3 (負(fù)數(shù)是從末尾一次為-1,-2,-3……)
都是正數(shù)的情況下:
如果stop小于start。返回空
如果stop達(dá)到字符結(jié)尾,則取值時取到字符結(jié)尾的就結(jié)束了
getset keyname newvalue
get到這個當(dāng)前值,并且set這個key一個新值。這條命令返回的是get到的那個值
incr/dec keyname
讓這個數(shù)值加1減以
(如果設(shè)計一個秒殺場景,set num 100000然后搶到單后,就用decr num減一。等用戶拿到這個資格后,在去數(shù)據(jù)庫慢悠悠下單)
如果想設(shè)置跨度增減,用incrby keyname n,decrby keyname n以n增減
如果想以浮點(diǎn)數(shù)增減,用incrbyfloat keyname flotnumber如:incrbyfloat age 3.5(沒有decrbyfloat,因?yàn)槲覀冎苯釉趇ncrbyfloat加一個負(fù)的浮點(diǎn)數(shù))
setbit kyename offset value(電腦自動完成字母大小寫轉(zhuǎn)換)
ascii碼中 A 65 0100 0001
ascii碼中 a 97 0110 0001
發(fā)現(xiàn)值相差32也就是第二位1和0的互換 比如setbit keyname 2 1舉把大些變成小寫
如果offset過大就填零(offset最大可以2的32次方減1,所以推斷出字符串長度最大為2的32次方除于8,結(jié)果為2的29次方位,也就是521M)
bitop operation destkey key1 key2
operation可以是AND、OR、NOT、XOR
setbit lower 2 1(結(jié)果是0010 0000)
set char Q
bitop or char char lower(char和lower做或操作保存到char這個key中)
反之你可以設(shè)置upper(1101 1111)誰和他與一下,誰就變成大寫了
問題分析:
1、一個網(wǎng)站有1億用戶,用戶有頻繁登錄的,也有不經(jīng)常登錄的
2、如何來記錄用戶的登錄信息
3、如何來查詢獲取用戶(如一周內(nèi)登錄3次的)
如果存在數(shù)據(jù)庫,數(shù)據(jù)庫恐怖吃不消
解決模型:用戶有7個,uid分別為1 2 3 4 5 6 7
登錄信息:
一般沒有0號用戶,所以一般把第一位設(shè)置為0
周一:0101 0001
周二:0110 0111
周三:0110 1001
周四
周五
統(tǒng)計1周連續(xù)登錄?把這幾周的登錄信息,用and操作。結(jié)果串中,某位是1的就是一周連續(xù)登錄
命令:
setbit mon 8 0(初始化的時候,第8位設(shè)置為0了,則前面7位都是0)
setbit mon 3 1
setbit mon 5 1
setbit mon 7 1
setbit tues 8 0初始化的時候,第8位設(shè)置為0了,則前面7位都是0)
setbit tues 3 1
setbit tues 4 1
setbit tues 5 1
setbit wen 8 0初始化的時候,第8位設(shè)置為0了,則前面7位都是0)
setbit wen 3 1
setbit wen 4 1
setbit wen 6 1
bitop and res mon tues wen
優(yōu)點(diǎn):
1:節(jié)約空間,一億人每天的登錄情況,用1億bit。約10M的字符就能表示
2:計算方便
數(shù)據(jù)庫比賽我用 setbitjxb:3:sid:1637759:week:16來設(shè)置位圖