摘要:上圖演示了對這個進(jìn)行位操作,引用最大的一個特點,就是它是一種變長的編碼方式。使用的位操作可以用來統(tǒng)計在線人數(shù)。。的位操作過大,就會填充。位操作假設(shè)有這樣一個需求,要將大寫的字符始終轉(zhuǎn)換成小寫的字符,可以使用來操作。
解壓后的安裝
[root@server1 redis-3.0.5]# make
指定安裝目錄:
[root@server1 redis-3.0.5]# make PREFIX=/usr/local/redis install
進(jìn)入/usr/local/redis里面:
[root@server1 redis]# ls bin [root@server1 redis]# cd bin [root@server1 bin]# ls redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server
[root@server1 bin]# cp /root/redis-3.0.5/redis.conf redis.conf
啟動:
[root@server1 bin]# ./redis-server redis.conf
出現(xiàn):
_._ _.-``__ ""-._ _.-`` `. `_. ""-._ Redis 3.0.5 (00000000/0) 64 bit .-`` .-```. ```/ _.,_ ""-._ ( " , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|"` _.-"| Port: 6379 | `-._ `._ / _.-" | PID: 23880 `-._ `-._ `-./ _.-" _.-" |`-._`-._ `-.__.-" _.-"_.-"| | `-._`-._ _.-"_.-" | http://redis.io `-._ `-._`-.__.-"_.-" _.-" |`-._`-._ `-.__.-" _.-"_.-"| | `-._`-._ _.-"_.-" | `-._ `-._`-.__.-"_.-" _.-" `-._ `-.__.-" _.-" `-._ _.-" `-.__.-" 23880:M 12 Mar 22:33:16.711 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 23880:M 12 Mar 22:33:16.711 # Server started, Redis version 3.0.5 23880:M 12 Mar 22:33:16.711 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add "vm.overcommit_memory = 1" to /etc/sysctl.conf and then reboot or run the command "sysctl vm.overcommit_memory=1" for this to take effect. 23880:M 12 Mar 22:33:16.711 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command "echo never > /sys/kernel/mm/transparent_hugepage/enabled" as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 23880:M 12 Mar 22:33:16.712 * The server is now ready to accept connections on port 6379
這只是前臺啟動,關(guān)閉終端自動停止。
新建一個窗口,進(jìn)入終端命令:
[root@server1 ~]# cd /usr/local/redis [root@server1 redis]# ls bin [root@server1 redis]# cd bin [root@server1 bin]# ls redis-benchmark redis-check-dump redis.conf redis-server redis-check-aof redis-cli redis-sentinel [root@server1 bin]# ./redis-cli 127.0.0.1:6379> 127.0.0.1:6379> set title adcd OK 127.0.0.1:6379> get title "adcd" 127.0.0.1:6379> set title 2 OK 127.0.0.1:6379> get title "2" 127.0.0.1:6379>讓redis進(jìn)程在后臺運行
./redis-server& redis.conf
另一種方式就是修改后臺文件:
[root@server1 bin]# vim redis.conf
將daemonize no 變成 yes
然后:
[root@server1 bin]# ./redis-server redis.conf
高版本會遇到的奇怪問題:http://blog.csdn.net/qq_25797...
基本命令的使用:127.0.0.1:6379> set title 1234 OK 127.0.0.1:6379> set name jerry OK 127.0.0.1:6379> keys * 1) "title" 2) "name" 127.0.0.1:6379>
keys * 命令查找當(dāng)前庫下面所有的key值。keys 后面可以跟上一個正則表達(dá)式。
當(dāng)key不存在時:
127.0.0.1:6379> keys age (empty list or set)隨機的獲取一個key
randomkey
127.0.0.1:6379> randomkey "name" 127.0.0.1:6379> randomkey "name" 127.0.0.1:6379> randomkey "title" 127.0.0.1:6379> randomkey "title" 127.0.0.1:6379> randomkey "name" 127.0.0.1:6379> randomkey "title" 127.0.0.1:6379> randomkey "name" 127.0.0.1:6379> randomkey "sex"判斷key是否存在
exists key +key名字
1表示存在,0表示不存在
127.0.0.1:6379> exists key name (integer) 1 127.0.0.1:6379> exists key birthday (integer) 0 127.0.0.1:6379>刪除key
del key1 key2 ...
127.0.0.1:6379> del title (integer) 1 127.0.0.1:6379> keys * 1) "sex" 2) "name" 127.0.0.1:6379> 127.0.0.1:6379> del sex name (integer) 2 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>改變key的名字
127.0.0.1:6379> set name jerry OK 127.0.0.1:6379> set age 24 OK 127.0.0.1:6379> set sex 1 OK 127.0.0.1:6379> keys * 1) "sex" 2) "age" 3) "name" 127.0.0.1:6379> rename name nickname OK 127.0.0.1:6379> keys * 1) "nickname" 2) "sex" 3) "age" 127.0.0.1:6379>
如果試圖修改一個不存在的key,將會報出錯誤:
127.0.0.1:6379> rename name nickname (error) ERR no such key
但是有一種情況,如果說改名后的新的key名已經(jīng)存在,那么原來的key該怎么辦呢?
127.0.0.1:6379> rename sex age OK 127.0.0.1:6379> get age "1" 127.0.0.1:6379>
請注意,age原來是24.現(xiàn)在是1.
使用renamenx安全的替換key:127.0.0.1:6379> set name jerry OK 127.0.0.1:6379> set age 24 OK 127.0.0.1:6379> set sex 1 OK
127.0.0.1:6379> renamenx sex age
如果修改成功,將返回1,修改失敗(不作任何操作)將返回0
cat redis.conf
可以查看到 redis在初始化的時候為我們初始化了16個數(shù)據(jù)庫。redis默認(rèn)使用0號數(shù)據(jù)庫。并告知使用select 命令來選擇數(shù)據(jù)庫:
# Set the number of databases. The default database is DB 0, you can select # a different one on a per-connection basis using SELECTwhere # dbid is a number between 0 and "databases"-1 databases 16
假設(shè)超過了數(shù)據(jù)庫的索引,就會報出非法的DB索引:
127.0.0.1:6379> select 23 (error) ERR invalid DB index 127.0.0.1:6379>move:將key移動到別的數(shù)據(jù)庫
127.0.0.1:6379> keys * 1) "nickname" 2) "sex" 3) "age" 127.0.0.1:6379> move sex 1 (integer) 1 127.0.0.1:6379> keys * 1) "nickname" 2) "age" 127.0.0.1:6379>
此時選擇1號數(shù)據(jù)庫:
127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> keys * 1) "sex" 127.0.0.1:6379[1]>expire設(shè)置有效期
memcache有有效期,即使設(shè)置為永不失效,也只能保存30天。redis本身是當(dāng)做存儲的,所以沒有有效期,即永遠(yuǎn)不失效。
1.ttl查詢有效期,默認(rèn)返回秒單位計時
127.0.0.1:6379> keys * 1) "nickname" 2) "age" 127.0.0.1:6379> ttl age (integer) -1 127.0.0.1:6379> 返回-1表示永久有效
如果查詢一個不在的key的生命周期,將會返回-2(2.8以后)
127.0.0.1:6379> ttl gender (integer) -2
expire設(shè)置有效期,是用秒作為單位的。
127.0.0.1:6379> expire age 10 (integer) 1 127.0.0.1:6379> get age "24" 127.0.0.1:6379> get age "24" 127.0.0.1:6379> get age (nil) 127.0.0.1:6379>
3.pttl和pexpire:使用毫秒作為聲明周期
127.0.0.1:6379> pttl age (integer) -1 127.0.0.1:6379> pexpire age 100000 (integer) 1 127.0.0.1:6379> pttl age (integer) 97177 127.0.0.1:6379> pttl age (integer) 94561 127.0.0.1:6379> pttl age (integer) 93000 127.0.0.1:6379> pttl age (integer) 91937 127.0.0.1:6379>persist:讓 key重新永久有效
127.0.0.1:6379> set age 24 OK 127.0.0.1:6379> expire age 20 (integer) 1 127.0.0.1:6379> ttl age (integer) 14 127.0.0.1:6379> persist age (integer) 1 127.0.0.1:6379> ttl age (integer) -1 127.0.0.1:6379>set命令:重復(fù)設(shè)置key怎么辦
對相同的key多次設(shè)置值,會直接覆蓋:
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set name jerry OK 127.0.0.1:6379> set name herry OK 127.0.0.1:6379> get name "herry" 127.0.0.1:6379>
使用 set keyname value nx 來保證如果已經(jīng)有這個key就不做任何操作,防止key被覆蓋:
127.0.0.1:6379> set site www.baodu.com OK 127.0.0.1:6379> set site www.taobao.com nx (nil) 127.0.0.1:6379> get site "www.baodu.com" 127.0.0.1:6379>
此外還有一個xx選項。
append :追加 setrange 與 getrange getset:先得到舊的值,再設(shè)置新值127.0.0.1:6379> set status sleep OK 127.0.0.1:6379> getset status work "sleep" 127.0.0.1:6379> get status "work" 127.0.0.1:6379>加一與減一:
incr 與 decr
127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> incr age (integer) 21 127.0.0.1:6379> get age "21" 127.0.0.1:6379> decr age (integer) 20 127.0.0.1:6379>
如果是一個字符串呢?
127.0.0.1:6379> incr status (error) ERR value is not an integer or out of range 127.0.0.1:6379>
redis:秒殺系統(tǒng)的設(shè)計與實踐
一次增加或減少指定的數(shù)字127.0.0.1:6379> incrby age 5 (integer) 25 127.0.0.1:6379>一次增加或減少指定的浮點型數(shù)字
127.0.0.1:6379> incrbyfloat age 0.6 "25.6"位操作
位操作就是在 0和1 位上來操作。
127.0.0.1:6379> set char A OK 127.0.0.1:6379> setbit char 2 1 (integer) 0 127.0.0.1:6379> get char "a" 127.0.0.1:6379>
上圖演示了對char這個key 進(jìn)行位操作,
引用:
UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度,當(dāng)字符在ASCII碼的范圍時,就用一個字節(jié)表示,保留了ASCII字符一個字節(jié)的編碼做為它的一部分,注意的是unicode一個中文字符占2個字節(jié),而UTF-8一個中文字符占3個字節(jié)
redis存儲是UTF-8.之所以能夠位操作,就是因為與acii碼保持了統(tǒng)一。不然就不是offset2了。
使用redis的位操作可以用來統(tǒng)計在線人數(shù)。。等等。。。
https://www.zhihu.com/questio...
redis的位操作offset過大,就會填充0。與本身存儲的大小無關(guān)。
127.0.0.1:6379> set name "你好" OK 127.0.0.1:6379> get name "xe4xbdxa0xe5xa5xbd" 127.0.0.1:6379> setbit name 5 0 (integer) 1 127.0.0.1:6379> get name "xe0xbdxa0xe5xa5xbd" 127.0.0.1:6379>
你好,總共是兩個漢字,6個字節(jié)。
redis所有的存儲都是string,set int 1 實際上是 存儲了1這個字符串(ascii編碼)
實際上,可以直接設(shè)置位,比如:
127.0.0.1:6379> setbit lower 2 1
lower并不存在,設(shè)置完畢以后就是 00100000
127.0.0.1:6379> setbit lower 2 1 (integer) 0 127.0.0.1:6379> get lower " " 127.0.0.1:6379> setbit lower 3 1 (integer) 0 127.0.0.1:6379> get lower "0" 127.0.0.1:6379>
打印出0,因為0的ascii碼就是00110000。
bitop:位操作假設(shè)有這樣一個需求,要將大寫的字符始終轉(zhuǎn)換成小寫的字符,可以使用bittop來操作。
由于小寫字母的整數(shù)值始終比大寫字母多32,可以使用OR操作來直接位運算:
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> setbit lower 2 1 (integer) 0 127.0.0.1:6379> set char Q OK 127.0.0.1:6379> bitop or char char lower (integer) 1 127.0.0.1:6379> get char "q" 127.0.0.1:6379>
bitop中的第一個參數(shù)or可以是 and,or,not, xor
第二個參數(shù)是結(jié)果存放于哪個key
第三,四個參數(shù)表示 操作的兩個key
lpush 鏈表名(key) 值
像這個鏈表左端推入,
rpush 鏈表名(key) 值
從這個鏈表左端插入。
127.0.0.1:6379> lpush list a //從list這個鏈表左端插入a,如下以此類推 (integer) 1 127.0.0.1:6379> rpush list b (integer) 2 127.0.0.1:6379> rpush list c (integer) 3 127.0.0.1:6379> lpush list 0 (integer) 4 127.0.0.1:6379> lrange 0 4 (error) ERR wrong number of arguments for "lrange" command 127.0.0.1:6379> lrange list 0 4 1) "0" 2) "a" 3) "b" 4) "c" 127.0.0.1:6379>
lrange list 0 4 查看鏈表內(nèi)容。從左邊則是0開始,右邊是-1開始,因為事先真不知道鏈表個數(shù)
所以要查看所有的內(nèi)容,可以:
lrange list 0 -1
lpush與rpush也支持一次性插入多個值:
127.0.0.1:6379> lpush anwser a b c d e f g (integer) 7 127.0.0.1:6379> lrange anwser 0 -1 1) "g" 2) "f" 3) "e" 4) "d" 5) "c" 6) "b" 7) "a" 127.0.0.1:6379>
從左邊插入自然是倒著的。
lpop與rpop:從鏈表左端或者鏈表右端彈出值 刪除指定的值Redis Lrem 根據(jù)參數(shù) COUNT 的值,移除列表中與參數(shù) VALUE 相等的元素。
COUNT 的值可以是以下幾種:
count > 0 : 從表頭開始向表尾搜索,移除與 VALUE 相等的元素,數(shù)量為 COUNT 。 count < 0 : 從表尾開始向表頭搜索,移除與 VALUE 相等的元素,數(shù)量為 COUNT 的絕對值。 count = 0 : 移除表中所有與 VALUE 相等的值。
127.0.0.1:6379> rpush anwser a b b b c d e f g (integer) 9 127.0.0.1:6379> rrme anwser 2 b (error) ERR unknown command "rrme" 127.0.0.1:6379> rrem anwser 2 b (error) ERR unknown command "rrem" 127.0.0.1:6379> lrem anwser 2 b (integer) 2 127.0.0.1:6379> lrange anwser 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 7) "g" 127.0.0.1:6379>查看集群目前狀況
redis-cli -c -p 16001
打印集群的信息cluster info
列出集群當(dāng)前已知的所有節(jié)點(node),以及這些節(jié)點的相關(guān)信息。cluster nodes
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/61782.html
閱讀 3514·2021-11-17 17:01
閱讀 3919·2021-11-08 13:12
閱讀 2477·2021-10-08 10:04
閱讀 687·2021-09-29 09:35
閱讀 1418·2021-09-26 10:12
閱讀 2021·2021-09-07 09:58
閱讀 1953·2019-08-30 15:55
閱讀 2134·2019-08-30 13:14