78.redis操做命令 安全設置

21.13/21.14/21.15 redis經常使用操做php

21.16 redis操做鍵值、服務linux

21.17 redis安全設置redis

 

 

 

 

21.13/21.14/21.15 redis經常使用操做數據庫

 

 

1.Redis經常使用操做 stringvim

set key1 aminglinux安全

get key1app

set key1 aming//第二次賦值會覆蓋dom

setnx key2 aaa //返回1 若是key2不存在直接建立keyui

setnx key2 bbb //返回0,若是key2存在,返回0加密

setex key3 10 1 //給key3設置過時時間爲10s,值爲1,若key已經存在,會覆蓋新的值

mset k1 1 k2 a k3 c #同時寫多個

mget k1 k3 k2 #同時查看多個

2.Redis經常使用操做 list

lpush lista a //從左側加入一個元素,左側就是最上面。l表明左(最上面)

lpush lista b

lrange lista 0 -1

lpop lista //從左側取出第一個元素。

rpush lista 1 //從右側加入一個元素 。r表明右(最下面)

rpop lista //從右側取出第一個元素。不管是lpop仍是rpop,取出來的值就不存在了

linsert  lista  before  2 3  //在2的前面插入一個元素爲3。此處的2表示第二個元素的值

linsert lista after 2 3 #在2的後面插入一個元素爲3。此處的2表示第二個元素的值

lset lista 4 bbb  //把第5個元素修改成bbb 此處的4表示第5個元素(0也算一個數字)

lindex lista 0  //查看第1個元素

lindex lista 3  //查看第4個元素

llen lista  //查看鏈表中有幾個元素

3.Redis經常使用操做 set

sadd seta aaa  //向集合seta中放入元素

smembers seta   //查看集合中的全部元素

srem  seta    aaa //刪除元素

spop  seta    //隨機取出一個元素,取出後就沒有了

sdiff  seta  setb   //求差集,以seta爲標準。哪一個在前面,就根據哪一個作比較

sdiffstore setc seta setb   //求差集而且存儲,存儲到了setc裏

sinter seta setb //求交集

sinterstore  setd seta setb  //將交集存儲setd

sunion seta setb //求並集

sunionstore sete seta setb //求並集並存儲到sete

sismember seta aaa  //判斷一個元素是否在這個集合裏,有返回1,沒有返回0

srandmember  seta //隨機取出一個元素,但不刪除。後面還能夠加數字,就是取幾個元素,一樣不刪除。與spop的區別

4.Redis經常使用操做 sort set

zadd zseta 11 123 //建立有序集合,11是他的score

zrange zseta 0 -1 //顯示全部元素,按順序顯示

zrange zseta 0 -1 withscores //能夠帶上分值

zrem zseta 222 //刪除指定元素

zrank zseta 222 //返回元素的索引值,索引值從0開始,按score正向排序。也就是查看222這個元素的下標(就是第幾個)

zrevrank zseta 222 //同上,不一樣的是,按score反序排序。也就是倒着數222這個元素爲第幾個

zrevrange zseta 0 -1 反序顯示全部元素,並帶分值

zcard zseta //返回集合中全部元素的個數

zcount zseta 1 10 // 返回分值範圍1-10的元素個數

zrangebyscore zseta 1 10 // 返回分值範圍1-10的元素

zremrangebyrank zseta 0 2 //刪除索引範圍0-2的元素,按score正向排序。索引的範圍就是下標

zremrangebyscore zseta 1 10 //刪除分值範圍1-10的元素

5.Redis經常使用操做(hash) 

hset user1  name aming  //創建hash

hset user1 age 30

hset user1 job  it

hgetall user1 #查看user1的信息

hmset user2  name aming age 30  job it    //批量創建鍵值對

hmget user2 name age  job

hdel user2 job   //刪除指定filed

hkeys user2  //打印全部的key。也就是查看

hvals user2 //打印全部的values

hlen user2  //查看hash有幾個filed。也就是有幾個鍵

 

 

 

 

實例:

1.string

127.0.0.1:6379> set key1 axin #set key1的值

OK

127.0.0.1:6379> set key2 linux #set key2的值

OK

127.0.0.1:6379> set key1 axinlinux #再次set key1就會覆蓋

OK

127.0.0.1:6379> get key1

"axinlinux"

127.0.0.1:6379> setnx key1 aaa #setnx key1(已有的值),不會覆蓋,會返回數字0

(integer) 0

127.0.0.1:6379> setnx key10 aaa #setnx key10(沒有的值),會建立,會返回數字1

(integer) 1

127.0.0.1:6379> get key10

"aaa"

127.0.0.1:6379> set key3 aaa ex 10 #正常寫set的時候,後面要加ex,就是設置他的過時時間

OK

127.0.0.1:6379> get key3 #10秒之後再get就沒有了

(nil)

127.0.0.1:6379> setex key3 1000 bbb #setex key3 先跟的是過時時間,而後是value

OK

127.0.0.1:6379> get key3

"bbb"

2.list

127.0.0.1:6379> lpush list2 bbb #lpush list2 的value爲bbb

(integer) 1

127.0.0.1:6379> lpush list2 ccc #再lpush一個value

(integer) 2

127.0.0.1:6379> LRANGE list2 0 -1 #lange查看list2

1) "ccc"

2) "bbb"

127.0.0.1:6379> lpop list2 #lpop list2,從最上面取一個value

"ccc"

127.0.0.1:6379> lrange list2 0 -1 #lrange list2 ,只剩下那個舊的value了

1) "bbb"

127.0.0.1:6379> rpush list2 axin1 #rpush list2 一個value爲axin1。也就是從最下面寫進去

(integer) 2

127.0.0.1:6379> rpush list2 axin2 #再rpush

(integer) 3

127.0.0.1:6379> LRANGE list2 0 -1 #lrange一下list2

1) "bbb"

2) "axin1"

3) "axin2"

127.0.0.1:6379> rpop list2 #而後咱們再rpop list2.也就是在最下面取出一個value

"axin2"

127.0.0.1:6379> LRANGE list2 0 -1 #lrange list2,發現最下面的value被取走了

1) "bbb"

2) "axin1"

127.0.0.1:6379> linsert list2 before axin1 axin0 #linsert list2 axin1這個元素前面插入axin0.

(integer) 3

127.0.0.1:6379> lrange list2 0 -1

1) "bbb"

2) "axin0"

3) "axin1"

127.0.0.1:6379> linsert list2 after axin1 axin2 #在axin1這個元素後面插入一個元素爲axin2

(integer) 4

127.0.0.1:6379> lrange list2 0 -1

1) "bbb"

2) "axin0"

3) "axin1"

4) "axin2"

127.0.0.1:6379> lset list2 0 bbb #把第0個元素的值改成bbb。0表示第1個

OK

127.0.0.1:6379> lrange list2 0 -1

1) "bbb"

2) "linux"

3) "axin1"

4) "axin2"

127.0.0.1:6379> lindex list2 0 #查看第一個元素的值

"bbb"

127.0.0.1:6379> llen list2 #查看list2裏面有幾個元素

(integer) 4

3.set

127.0.0.1:6379> sadd set1 aaa #sadd放入一個元素

(integer) 1

1) "c"

2) "d"

3) "aaa"

4) "ccc"

5) "b"

6) "a"

7) "bbb"

127.0.0.1:6379> srem set1 aaa #刪除元素aaa

(integer) 1

127.0.0.1:6379> spop set1 #隨機取出一個元素

"d"

127.0.0.1:6379> SMEMBERS set2

1) "1"

2) "ccc"

3) "b"

4) "a"

5) "2"

6) "bbb"

127.0.0.1:6379> smembers set1

1) "ccc"

2) "b"

3) "a"

4) "c"

5) "bbb"

127.0.0.1:6379> SDIFF set2 set1 #adiff求差集。set2在前面,因此set2做爲比較的對象

1) "1"

2) "2"

4.sort set

127.0.0.1:6379> zadd zseta 0 1ab #寫入一個score爲0 值爲1ab的元素

(integer) 1

127.0.0.1:6379> zrange zseta 0 -1 #查看zseta這個有序集合

1) "1ab"

127.0.0.1:6379> zrem zseta 1ab #刪除1ab這個元素

(integer) 1

127.0.0.1:6379> zrange zeta 0 -1 #再次查看就是空的

(empty list or set)

127.0.0.1:6379> zrank zseta 123 #正序查看123這個元素是第幾個(下標)

(integer) 0

127.0.0.1:6379> zrevrank zseta 123 #倒序查看123這個元素是第幾個(下標)

(integer) 4

127.0.0.1:6379> zrevrange zseta 0 -1 #倒序查看zseta集合

1) "fasf"

2) "2143safdas"

3) "2134353"

4) "fasfas"

5) "123"

127.0.0.1:6379> zcard zseta #查看zseta集合有幾個元素

(integer) 5

127.0.0.1:6379> zcount zseta 50 1000 #查看50-1000 score值的個數

(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE zseta 10 19 #查看score值10-19的元素

1) "123"

2) "fasfas"

3) "2134353"

127.0.0.1:6379> zadd seta 12 asfasfasfas #寫入幾個元素,爲下面的zremrangebyrank和zremrangebyscore作區分

(integer) 1

127.0.0.1:6379> zadd seta 22 123asfasfasfas

(integer) 1

127.0.0.1:6379> zadd seta 32 123asfass

(integer) 1

127.0.0.1:6379> zadd seta 82 123asfas123s

(integer) 1

127.0.0.1:6379> zadd seta 102 123as123s

(integer) 1

127.0.0.1:6379> zrange seta 0 -1

1) "asfasfasfas"

2) "123asfasfasfas"

3) "123asfass"

4) "123asfas123s"

5) "123as123s"

127.0.0.1:6379> zremrangebyrank seta 0 1 #刪除0-1(分值,也就是下標,第幾個的個數)

(integer) 2

127.0.0.1:6379> zrange seta 0 -1

1) "123asfass"

2) "123asfas123s"

3) "123as123s"

127.0.0.1:6379> zremrangebyscore seta 30 80 #刪除30-80(score值)

(integer) 1

127.0.0.1:6379> zrange seta 0 -1

1) "123asfas123s"

2) "123as123s"

5.hash

127.0.0.1:6379> hmset hash2 a 1 b 2 c 3 d 4 #分別指定他的key和value的值,來建立

OK

127.0.0.1:6379> hgetall hash2 #查看hash2的key和value

1) "a"

2) "1"

3) "b"

4) "2"

5) "c"

6) "3"

7) "d"

8) "4"

127.0.0.1:6379> hmget hash2 b c #查看b和c的value

1) "2"

2) "3"

127.0.0.1:6379> hdel hash2 b #刪除b

(integer) 1

127.0.0.1:6379> hkeys hash2 #查看全部的key

1) "a"

2) "c"

3) "d"

127.0.0.1:6379> HVALS hash2 #查看全部的value

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> hlen hash2 #查看hash2裏面有幾個

(integer) 3

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

21.16 redis操做鍵值、服務

 

 

 

1.Redis經常使用操做(鍵值) 

1.keys * //取出全部key

2.keys my* //模糊匹配

3.exists name //有name鍵 返回1 ,不然返回0;也就是查看key是否存在

4.del key1 // 刪除一個key //成功返回1 ,不然返回0;

5.EXPIRE key1 100 //設置key1 100s後過時

6.ttl key // 查看鍵 還有多長時間過時,單位是s,當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩餘生存時間時,返回 -1 。 不然,返回 key 的剩餘生存時間。

7.select 0 //表明選擇當前數據庫,默認進入0 數據庫。爲1時,就進入1庫

redis.conf配置文件時,有講到redis有16個庫,默認是0庫

8.move age 1 // 把age 移動到1 數據庫

9.persist key1 //取消key1的過時時間。會返回-1

10.randomkey //隨機返回一個key

11.rename oldname newname //重命名key

12.type key1 //返回鍵的類型。五種數據類型,查看是哪種

 

2.Redis經常使用操做(服務) 

1.dbsize  //返回當前數據庫中key的數目

2.info  //返回redis數據庫狀態信息

3.flushdb //清空當前數據庫中全部的鍵

4.flushall    //清空全部數據庫中的全部的key

5.bgsave //保存數據到 rdb文件中,在後臺運行。(bg爲到後臺的意思,save爲保存的意思,在redis.conf中save那三行也表明了rdb。除了知足那三種條件,也能夠這樣手動的讓他去保存。能夠這樣來理解)

6.save //做用同上,可是在前臺運行。也就是當前窗口下運行

7.config get * //獲取全部配置參數。就是配置文件裏配置的東西

8.config get dir //獲取配置參數

9.config set dir //更改配置參數

10.數據恢復: 首先定義或者肯定dir目錄和dbfilename(能夠config get看一下),實例中有詳解以及坑

實例:

1.

127.0.0.1:6379> KEYS * #取出全部的鍵

1) "seta"

2) "key10"

3) "key2"

4) "key1"

5) "list2"

6) "list1"

7) "set1"

8) "set2"

9) "hash2"

10) "hash1"

11) "zseta"

12) "mykey"

13) "set3"

127.0.0.1:6379> KEYS k* #全部的k開頭的,模糊搜索

1) "key10"

2) "key2"

3) "key1"

127.0.0.1:6379> exists key1 #查看key1是否存在

(integer) 1 #存在返回1

127.0.0.1:6379> exists key11

(integer) 0 #不存在返回0

127.0.0.1:6379> del key1 #刪除key1

(integer) 1

127.0.0.1:6379> get key1 #再次查看key1,就沒有了

(nil)

127.0.0.1:6379> EXPIRE key2 10 #給key2設置過時時間10秒

(integer) 1 #一樣成功返回1

127.0.0.1:6379> get key2 #10秒後查看,就不存在了

(nil)

127.0.0.1:6379> EXPIRE key111 10 #咱們給一個不存在的key111設置過時時間,會發現返回0,也就是說他不會給不存在的key設置過時時間

(integer) 0

127.0.0.1:6379> get key111 #咱們查看就會沒有

(nil)

127.0.0.1:6379> EXPIRE key10 15 #給key10設置15秒過時時間

(integer) 1

127.0.0.1:6379> ttl key10 #查看key10的過時時間

(integer) 8

127.0.0.1:6379> ttl key10 #ttl查看時返回-2,就表明已通過期

(integer) -2

127.0.0.1:6379> SELECT 1 #先進入1庫

OK

127.0.0.1:6379[1]> keys * #查看key,就會沒有key。由於咱們沒有往1庫裏寫東西

(empty list or set)

127.0.0.1:6379[1]> SELECT 0 #咱們再進入0庫

OK

127.0.0.1:6379> keys * #就會出現咱們以前寫的key

1) "seta"

2) "list2"

3) "list1"

4) "set1"

5) "set2"

6) "hash2"

7) "hash1"

8) "zseta"

9) "mykey"

10) "set3"

127.0.0.1:6379> move set2 1 #把set2啓動到1庫裏

(integer) 1

127.0.0.1:6379> SELECT 1 #進入1庫

OK

127.0.0.1:6379[1]> keys * #查看一下,就會有這個set2

1) "set2"

127.0.0.1:6379> EXPIRE mykey 1000 #先給mykey社會自一個過時時間

(integer) 1

127.0.0.1:6379> ttl mykey #ttl一下

(integer) 992

127.0.0.1:6379> PERSIST mykey #而後再取消他的過時時間

(integer) 1

127.0.0.1:6379> ttl mykey #再次ttl一下。會發現返回-1.-1就是沒有過時時間

(integer) -1

127.0.0.1:6379> type zseta #查看zseta的數據類型

zset

127.0.0.1:6379> type mykey

string

127.0.0.1:6379> type list2

list

2.

127.0.0.1:6379> DBSIZE #當前庫中的key的數目

(integer) 9

127.0.0.1:6379> info [section] #info後面也能夠查看他的具體項,好比cpu相關的

127.0.0.1:6379> SELECT 1 #咱們先選擇1庫

OK

127.0.0.1:6379[1]> keys * #查看一下,有以前的那個set2

1) "set2"

127.0.0.1:6379[1]> FLUSHDB #flushdb一下,清空當前的庫

OK

127.0.0.1:6379[1]> keys * #再次查看就沒有了

(empty list or set)

127.0.0.1:6379[1]> FLUSHALL #flushall爲清空全部庫中的key

127.0.0.1:6379[1]> bgsave #後臺將數保存到rdb文件中(/data/reids/dump.rdb配置文件中指定的路徑),速度的快慢取決於你文件的大小

Background saving started

127.0.0.1:6379> config get * #共有168行,其實就是84項,奇數爲配置項,偶數爲配置內容。就是配置文件裏配置的。

127.0.0.1:6379> config get bind #也能夠指定查看意向配置內容,好比bind

1) "bind"

2) "127.0.0.1"

127.0.0.1:6379> config get dir #好比dir

1) "dir"

2) "/data/redis"

127.0.0.1:6379> config set timeout 100 #也支持config set,更改配置項。好比講timeout改爲100

OK

127.0.0.1:6379> config get timeout #再次查看timeout就是100了

timeout指的是設置客戶端鏈接時的超時時間,單位爲秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該鏈接

1) "timeout"

2) "100"

10.如下數據恢復(rdb):

127.0.0.1:6379> keys * #先查看一下要恢復以前的數據

1) "key2"

2) "key3"

3) "key1"

127.0.0.1:6379> config get dir #要看一下dir的路徑,由於等會save的時候會把備份文件存到這個路徑下

1) "dir"

2) "/data/redis"

127.0.0.1:6379> config get dbfilename #備份文件的名字也要看一下

1) "dbfilename"

2) "dump.rdb"

 

127.0.0.1:6379> save #而後save保存.rdb文件

OK

127.0.0.1:6379> quit #退出redis

[root@axinlinux-01 redis-4.0.1]# cd /data/redis/ #cd到dir路徑下,看一下有沒有這個dump.rdb文件

[root@axinlinux-01 redis]# ls

appendonly.aof dump.rdb

[root@axinlinux-01 redis]# cd /tmp/ #cd到tmp下來,把dump.rdb備份文件先拷貝到tmp下來。由於咱們等下作實驗執行flushall的時候,他會把這個備份文件也給清空掉。因此要提早拷貝走

[root@axinlinux-01 tmp]# cp /data/redis/dump.rdb ./

[root@axinlinux-01 tmp]# ls

dump.rdb systemd-private-62ddbfad8a1c4de29c4f34e73330fea8-chronyd.service-dAZNvV

php-fcgi.sock systemd-private-62ddbfad8a1c4de29c4f34e73330fea8-vgauthd.service-wL8DBk

sess_6p44behpfdiaaqhehrvrhfede1 systemd-private-62ddbfad8a1c4de29c4f34e73330fea8-vmtoolsd.service-BYddey

[root@axinlinux-01 redis]# redis-cli

127.0.0.1:6379> FLUSHALL #而後這個時候咱們再flushall

OK

127.0.0.1:6379> keys * #查看一下,數據已被清空

(empty list or set)

127.0.0.1:6379> quit

[root@axinlinux-01 redis]# killall redis-server #咱們用killall這個命令來關閉redis

[root@axinlinux-01 redis]# ps aux |grep redis #看一下是否被關閉

root 3487 0.0 0.0 112720 980 pts/0 R+ 23:04 0:00 grep --color=auto redis

[root@axinlinux-01 redis]# rm -rf dump.rdb #把原先的dump.rdb文件刪掉。由於咱們以前執行了flushall,這個備份文件也一樣被執行了

[root@axinlinux-01 redis]# ls

appendonly.aof

[root@axinlinux-01 redis]# cp /tmp/dump.rdb ./ #而後把flushall以前的備份文件拷貝過來

[root@axinlinux-01 redis]# ls

appendonly.aof dump.rdb

[root@axinlinux-01 redis]# redis-server /etc/redis.conf #而後再啓動redis

[root@axinlinux-01 redis]# ps aux |grep redis

root 3547 2.0 0.4 145296 7572 ? Ssl 23:05 0:00 redis-server 127.0.0.1:6379

root 3561 0.0 0.0 112720 980 pts/0 S+ 23:05 0:00 grep --color=auto redis

[root@axinlinux-01 redis]# redis-cli #而後進入redis,查看是否已經恢復

127.0.0.1:6379> keys *

1) "key1"

2) "key3"

3) "key2"

總結數據恢復(rdb)

恢復以前要先確認dir路徑以及備份文件的名字。而後再save。以後要在清空數據以前把save以後的.rdb文件拷貝到tmp下。而後再執行flushall命令,不然flushall命令會把.rdb備份文件的數據清空掉,那這樣備份就沒有意義了。而後killall掉redis-server,把原先的.rdb文件刪掉,再把tmp下備份的.rdb文件拷貝過來。重啓redis就能夠了

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

21.17 redis安全設置

 

 

如下的操做都是在/etc/redis.conf配置文件裏,配置的。若是擔憂有人查看conf配置文件,能夠限定文件或目錄的權限

1.設置監聽ip

bind 127.0.0.1 2.2.2.2//能夠是多個ip,用空格分隔

能夠設置成監聽內網IP

2.設置監聽端口

port 16000

將默認6379端口能夠改成16000(隨便其餘不被佔用的有效端口)

3.設置密碼

requirepass aming>com #加入這一行

redis-cli -a 'aming>com' #登陸的時候加-a '密碼'登陸,由於密碼中含有>,因此要用單引號

4.將config命令更名

rename-command CONFIG aming #aming表明要把config替換成的命令

/etc/redis.conf配置文件裏,搜索 rename-command,加到下面這一行就能夠了

5.禁掉config命令

rename-command CONFIG 「」 #雙引號內爲空就能夠了

/etc/redis.conf配置文件裏,搜索 rename-command

 

 

實例:

3.

[root@axinlinux-01 redis]# vim /etc/redis.conf #修改配置文件。把這一行加入進去

requirepass aming>com #加在哪均可以,好比加在最後面

[root@axinlinux-01 redis]# killall redis-server #killall掉redis,再重啓。由於是編譯安裝的,只能先killall掉

[root@axinlinux-01 redis]# redis-server /etc/redis.conf #再啓動

[root@axinlinux-01 redis]# redis-cli #咱們不加密碼登陸試一下

127.0.0.1:6379> keys * #也能登陸,可是執行不了命令

(error) NOAUTH Authentication required.

127.0.0.1:6379> quit

[root@axinlinux-01 redis]# redis-cli -a 'aming>com' #而後再-a加密碼啓動

127.0.0.1:6379> keys * #就能夠執行了

1) "key2"

2) "key3"

3) "key1"

相關文章
相關標籤/搜索