国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

redis從入門到精通

sutaking / 1407人閱讀

摘要:上圖演示了對這個進(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

redis的數(shù)據(jù)庫

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 SELECT  where
# 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可以是 andornot, 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

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<