【1212】redis(中)常用操作,操作鍵值,安全設置

 【1212】redis(中)常用操作,操作鍵值,安全設置

21.13/21.14/21.15 redis常用操作

21.16 redis操作鍵值

21.17 redis安全設置

 

21.13/21.14/21.15 redis常用操作(string、list)

1、string

127.0.0.1:6379> set key1 arslinux

OK

127.0.0.1:6379> set key2 linux

OK

127.0.0.1:6379> set key1 linux //第二次賦值會覆蓋

OK

127.0.0.1:6379> get key1

"linux"

 

setnx 檢查key是否存在,不存在則創建

127.0.0.1:6379> setnx key1 aaa //key1存在,返回 0

(integer) 0

127.0.0.1:6379> setnx key3 aaa //key3不存在,返回 1,直接創建 key3

(integer) 1

127.0.0.1:6379> get key3

"aaa"

 

設置過期時間:

127.0.0.1:6379> set key3 aaa ex 10

OK

127.0.0.1:6379> get key3

"aaa"

127.0.0.1:6379> get key3

(nil)

setex 設置過期時間

127.0.0.1:6379> setex key3 1000 bbb //先設置過期時間,在設定值

OK

 

2、list

127.0.0.1:6379> LPUSH list2 aaa //從左側加入一個元素

(integer) 1

127.0.0.1:6379> LPUSH list2 bbb

(integer) 2

127.0.0.1:6379> LRANGE list2 0 -1

1) "bbb"

2) "aaa"

127.0.0.1:6379> LPOP list2 //從左側取出第一個元素

"bbb"

127.0.0.1:6379> LPUSH list2 ccc

(integer) 2

127.0.0.1:6379> LPUSH list2 ddd

(integer) 3

127.0.0.1:6379> LRANGE list2 0 -1

1) "ddd"

2) "ccc"

3) "aaa"

127.0.0.1:6379> RPOP list2 //從右側取出第一個元素

"aaa"

 

127.0.0.1:6379> LINSERT list2 after ccc aaa //在 ccc 後插入一個元素叫 aaa,或者before

(integer) 3

127.0.0.1:6379> LINSERT list2 after aaa bbb

(integer) 4

127.0.0.1:6379> LRANGE list2 0 -1

1) "ddd"

2) "ccc"

3) "aaa"

4) "bbb"

 

127.0.0.1:6379> LSET list2 1 111 //修改 第2個元素爲 111

OK

127.0.0.1:6379> LRANGE list2 0 -1

1) "ddd"

2) "111"

3) "aaa"

4) "bbb"

127.0.0.1:6379> LSET list2 0 123

OK

127.0.0.1:6379> LRANGE list2 0 -1

1) "123"

2) "111"

3) "aaa"

4) "bbb"

 

127.0.0.1:6379> LINDEX list2 3 //查看第4個元素

"bbb"

 

127.0.0.1:6379> LLEN list2 //查看鏈表有幾個元素

(integer) 4

3、set

127.0.0.1:6379> SADD seta aaa //向集合 seta 中加入元素

(integer) 1

127.0.0.1:6379> SADD seta bbb

(integer) 1

127.0.0.1:6379> SMEMBERS seta //查看集合中所有元素

1) "bbb"

2) "aaa"

 

127.0.0.1:6379> SREM seta aaa //刪除元素

(integer) 1

127.0.0.1:6379> SMEMBERS seta

1) "bbb"

 

127.0.0.1:6379> SPOP seta //隨機取出一個元素,刪除

"bbb"

127.0.0.1:6379> SMEMBERS seta

(empty list or set)

 

127.0.0.1:6379> SADD seta ccc

(integer) 1

127.0.0.1:6379> SADD seta 111

(integer) 1

127.0.0.1:6379> SADD setb 111

(integer) 1

127.0.0.1:6379> SADD setb 222

(integer) 1

127.0.0.1:6379> SADD setb aaa

(integer) 1

127.0.0.1:6379> SMEMBERS seta

1) "111"

2) "ccc"

127.0.0.1:6379> SMEMBERS setb

1) "222"

2) "111"

3) "aaa"

127.0.0.1:6379> SDIFF seta setb //以 seta 爲標準,求差集

1) "ccc"

127.0.0.1:6379> SDIFF setb seta //以 setb 爲標準,求差集

1) "222"

2) "aaa"

 

127.0.0.1:6379> SDIFFSTORE setc seta setb //求差集並且存儲,存儲到了setc裏

(integer) 1

127.0.0.1:6379> SMEMBERS setc

1) "ccc"

 

127.0.0.1:6379> SINTER seta setb //求交集

1) "111"

127.0.0.1:6379> SINTERSTORE setd seta setb //求交集並儲存 setd

(integer) 1

127.0.0.1:6379> SMEMBERS setd

1) "111"

 

127.0.0.1:6379> SUNION seta setb //求並集

1) "222"

2) "111"

3) "aaa"

4) "ccc"

127.0.0.1:6379> SUNIONSTORE sete seta setb //求並集並儲存 sete

(integer) 4

127.0.0.1:6379> SMEMBERS sete

1) "222"

2) "111"

3) "aaa"

4) "ccc"

 

127.0.0.1:6379> SISMEMBER seta aaa //判斷一個元素是否屬於一個集合

(integer) 0

127.0.0.1:6379> SISMEMBER seta ccc

(integer) 1

 

127.0.0.1:6379> SRANDMEMBER seta //隨機取出一個元素,但不刪除

"ccc"

127.0.0.1:6379> SRANDMEMBER seta 2 //隨機兩個元素,但不刪除(可設置取幾個元素)

1) "111"

2) "ccc"

127.0.0.1:6379> SMEMBERS seta

1) "111"

2) "ccc"

 

 

4、zset

127.0.0.1:6379> ZADD zseta 11 123 //創建有序集合

(integer) 1

127.0.0.1:6379> ZADD zseta 0 1ab

(integer) 1

127.0.0.1:6379> ZRANGE zseta 0 -1 //顯示所有元素,按順序顯示

1) "1ab"

2) "123"

127.0.0.1:6379> ZREM zseta 1ab //刪除指定元素

(integer) 1

127.0.0.1:6379> zrange zseta 0 -1

1) "123"

 

127.0.0.1:6379> ZADD zseta 10 1ab

(integer) 1

127.0.0.1:6379> ZADD zseta 14 sssab

(integer) 1

127.0.0.1:6379> ZADD zseta 16 12121212

(integer) 1

127.0.0.1:6379> ZADD zseta 1000 asdfasdf1212

(integer) 1

127.0.0.1:6379> ZRANGE zseta 0 -1

1) "1ab"

2) "123"

3) "sssab"

4) "12121212"

5) "asdfasdf1212"

 

127.0.0.1:6379> ZRANK zseta sssab //返回元素的索引值,索引值從0開始,按score正向排序

(integer) 2

127.0.0.1:6379> ZREVRANK zseta 12121212 //同上,不同的是,按score反序排序

(integer) 1

 

127.0.0.1:6379> ZREVRANGE zseta 0 -1 //反序顯示所有元素,並帶分值,和ZRANGE相反

1) "asdfasdf1212"

2) "12121212"

3) "sssab"

4) "123"

5) "1ab"

127.0.0.1:6379> ZCARD zseta //返回集合中所有元素的個數

(integer) 5

 

127.0.0.1:6379> ZCOUNT zseta 50 10000 //返回分值範圍1-10的元素個數

(integer) 1

127.0.0.1:6379> ZCOUNT zseta 10 10000

(integer) 5

 

127.0.0.1:6379> ZRANGEBYSCORE zseta 10 19 //返回分值範圍10-19的元素

1) "1ab"

2) "123"

3) "sssab"

4) "12121212"

 

127.0.0.1:6379> ZREMRANGEBYSCORE zseta 10 11 //刪除分值範圍10-11的元素

(integer) 2

127.0.0.1:6379> ZREVRANGE zseta 0 -1

1) "asdfasdf1212"

2) "12121212"

3) "sssab"

127.0.0.1:6379> ZREMRANGEBYRANK zseta 0 2 //刪索引範圍0-2的元素,按score正向排序

(integer) 3

127.0.0.1:6379> ZREVRANGE zseta 0 -1

(empty list or set)

 

5、hash

127.0.0.1:6379> HMSET hash2 a 1 b 2 c 3 d 4 //批量建立鍵值對

OK

127.0.0.1:6379> HGETALL hash2

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 //批量獲取鍵值對

1) "2"

2) "3"

 

127.0.0.1:6379> Hdel hash2  b //刪除指定filed

1) "a"

2) "1"

3) "c"

4) "3"

5) "d"

6) "4"

 

127.0.0.1:6379> hkeys hash2 //打印所有的key

1) "a"

2) "c"

3) "d"

127.0.0.1:6379> HVALS hash2 //打印所有values

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> HLEN hash2 //查看hash有幾個filed

(integer) 3

 

21.16 redis操作鍵值

127.0.0.1:6379> keys * //取出所有 key

 1) "k3"

 2) "setc"

 3) "set2"

 4) "setb"

 5) "mykey"

 6) "setd"

 7) "list2"

 8) "seta"

 9) "k1"

10) "set1"

11) "key1"

12) "hash1"

13) "set3"

14) "key2"

15) "k2"

16) "sete"

17) "hash2"

18) "list1"

 

127.0.0.1:6379> keys k* //模糊匹配

1) "k3"

2) "k1"

3) "key1"

4) "key2"

5) "k2"

 

127.0.0.1:6379> EXISTS key1 //有key是否存在,存在返回1 ,否則返回0

(integer) 1

127.0.0.1:6379> EXISTS key2

(integer) 1

127.0.0.1:6379> EXISTS key11

(integer) 0

 

127.0.0.1:6379> del key1 // 刪除一個key    //成功返回1 ,否則返回0

(integer) 1

127.0.0.1:6379> get key1

(nil)

 

127.0.0.1:6379> EXPIRE k2 10 //設置k2 10s後過期

(integer) 1

127.0.0.1:6379> get k2

"2"

127.0.0.1:6379> get k2

"2"

127.0.0.1:6379> get k2

(nil)

 

``shell

127.0.0.1:6379> EXPIRE key2 160 //設置key2 160s後過期

(integer) 1

127.0.0.1:6379> ttl key2 // 查看鍵 還有多長時間過期,單位是s,當 key 不存在時,返回 -2當 key 存在但沒有設置剩餘生存時間時,返回 -1 。 否則,返回 key 的剩餘生存時間。

(integer) 156

127.0.0.1:6379> ttl key2

(integer) 153

127.0.0.1:6379> ttl key2

(integer) 148

127.0.0.1:6379> ttl key2

(integer) 16

127.0.0.1:6379> ttl key2

(integer) -2

 

```shell

127.0.0.1:6379> SELECT 0 //代表選擇當前數據庫,默認進入0 數據庫

OK

127.0.0.1:6379> keys *

 1) "k3"

 2) "setc"

 3) "set2"

 4) "setb"

 5) "mykey"

 6) "setd"

 7) "list2"

 8) "seta"

 9) "k1"

10) "set1"

11) "hash1"

12) "set3"

13) "sete"

14) "hash2"

15) "list1"

127.0.0.1:6379> SELECT 1

OK

127.0.0.1:6379[1]> keys *

(empty list or set)

 

127.0.0.1:6379> MOVE set2 1 // 把 set2 移動到 1 數據庫

(integer) 1

127.0.0.1:6379> SELECT 1

OK

127.0.0.1:6379[1]> keys *

1) "set2"

 

127.0.0.1:6379> EXPIRE mykey 1000 //取消key1的過期時間

(integer) 1

127.0.0.1:6379> ttl mykey

(integer) 997

127.0.0.1:6379> PERSIST mykey

(integer) 1

127.0.0.1:6379> ttl mykey

(integer) -1

 

127.0.0.1:6379> RANDOMKEY //隨機返回一個key

"sete"

127.0.0.1:6379> RANDOMKEY

"k1"

127.0.0.1:6379> RANDOMKEY

"setb"

127.0.0.1:6379> RANDOMKEY

"list2"

 

127.0.0.1:6379> RENAME setb set3 //重命名key

OK

127.0.0.1:6379> keys set*

1) "setc"

2) "setd"

3) "seta"

4) "set1"

5) "set3"

6) "sete"

 

127.0.0.1:6379> type seta //返回鍵的類型

set

127.0.0.1:6379> type hash2

hash

127.0.0.1:6379> type mykey

string

 

127.0.0.1:6379> DBSIZE //返回當前數據庫中key的數目

(integer) 13

127.0.0.1:6379> keys *

 1) "k3"

 2) "setc"

 3) "mykey"

 4) "setd"

 5) "list2"

 6) "seta"

 7) "k1"

 8) "set1"

 9) "hash1"

10) "set3"

11) "sete"

12) "hash2"

13) "list1

 

127.0.0.1:6379> info //返回redis數據庫狀態信息

# Server

redis_version:4.0.1

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:b8bc562e9b5ddc70

redis_mode:standalone

os:Linux 3.10.0-957.el7.x86_64 x86_64

arch_bits:64

multiplexing_api:epoll

atomicvar_api:atomic-builtin

gcc_version:4.8.5

process_id:11963

run_id:430133d65f76a9090627914095bc6226b1be71e7

tcp_port:6379

uptime_in_seconds:9531

uptime_in_days:0

hz:10

lru_clock:2833915

executable:/usr/local/src/redis-4.0.1/redis-server

config_file:/etc/redis.conf

 

# Clients

connected_clients:1

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

 

# Memory

used_memory:830088

used_memory_human:810.63K

used_memory_rss:7983104

used_memory_rss_human:7.61M

used_memory_peak:830088

used_memory_peak_human:810.63K

used_memory_peak_perc:100.09%

used_memory_overhead:816110

used_memory_startup:765600

used_memory_dataset:13978

used_memory_dataset_perc:21.68%

total_system_memory:1019797504

total_system_memory_human:972.55M

used_memory_lua:37888

used_memory_lua_human:37.00K

maxmemory:0

maxmemory_human:0B

maxmemory_policy:noeviction

mem_fragmentation_ratio:9.62

mem_allocator:jemalloc-4.0.3

active_defrag_running:0

lazyfree_pending_objects:0

 

# Persistence

loading:0

rdb_changes_since_last_save:5

rdb_bgsave_in_progress:0

rdb_last_save_time:1563114212

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

rdb_last_cow_size:2441216

aof_enabled:1

aof_rewrite_in_progress:0

aof_rewrite_scheduled:0

aof_last_rewrite_time_sec:-1

aof_current_rewrite_time_sec:-1

aof_last_bgrewrite_status:ok

aof_last_write_status:ok

aof_last_cow_size:0

aof_current_size:3096

aof_base_size:0

aof_pending_rewrite:0

aof_buffer_length:0

aof_rewrite_buffer_length:0

aof_pending_bio_fsync:0

aof_delayed_fsync:0

 

# Stats

total_connections_received:1

total_commands_processed:205

instantaneous_ops_per_sec:0

total_net_input_bytes:6918

total_net_output_bytes:13605

instantaneous_input_kbps:0.00

instantaneous_output_kbps:0.00

rejected_connections:0

sync_full:0

sync_partial_ok:0

sync_partial_err:0

expired_keys:4

evicted_keys:0

keyspace_hits:106

keyspace_misses:12

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:355

migrate_cached_sockets:0

slave_expires_tracked_keys:0

active_defrag_hits:0

active_defrag_misses:0

active_defrag_key_hits:0

active_defrag_key_misses:0

 

# Replication

role:master

connected_slaves:0

master_replid:ff9e1dbdf9eff911cfa86a9a8000a3a51c753e22

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:0

second_repl_offset:-1

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

 

# CPU

used_cpu_sys:13.07

used_cpu_user:7.05

used_cpu_sys_children:0.15

used_cpu_user_children:0.01

 

# Cluster

cluster_enabled:0

 

# Keyspace

db0:keys=13,expires=0,avg_ttl=0

db1:keys=1,expires=0,avg_ttl=0

 

127.0.0.1:6379> SELECT 1 //清空當前數據庫中所有的key

OK

127.0.0.1:6379[1]> keys *

1) "set2"

127.0.0.1:6379[1]> FLUSHDB

OK

127.0.0.1:6379[1]> keys *

(empty list or set)

127.0.0.1:6379[1]> FLUSHALL //清空所有數據庫中的所有的key

OK

127.0.0.1:6379[1]> SELECT 0

OK

127.0.0.1:6379> keys *

(empty list or set)

 

127.0.0.1:6379> BGSAVE //保存數據到 rdb文件中,在後臺運行

Background saving started

127.0.0.1:6379> SAVE //作用同上,但是在前臺運行

OK

127.0.0.1:6379> CONFIG GET * //獲取所有配置參數

1) "dbfilename"

 2) "dump.rdb"

......

167) "bind"

168) "127.0.0.1"

127.0.0.1:6379> CONFIG GET port //獲取配置參數

1) "port"

2) "6379"

127.0.0.1:6379> CONFIG GET dir

1) "dir"

2) "/data/redis"

127.0.0.1:6379> CONFIG set timeout 1000 //更改配置參數

OK

127.0.0.1:6379> CONFIG GET timeout

1) "timeout"

2) "1000"

 

數據恢復: 首先定義或者確定 dir 目錄和 dbfilename,BGSAVE後,然後把備份的 rdb 文件放到 dir 目錄下面,重啓redis服務即可恢復數據

 

127.0.0.1:6379> CONFIG GET dir

1) "dir"

2) "/data/redis"

127.0.0.1:6379> CONFIG GET dbfilename

1) "dbfilename"

2) "dump.rdb"

 

21.17 redis安全設置

爲了防止黑客利用 redis 漏洞進入 redis,服務器如果沒有做iptables規則,6379端口沒有限制,公網ip也開放着,他就可以遠程連接redis服務器,黑客就可以設定dir,設定dbfilename,比如設定到/root/.ssh/authorized_keys ,這是我們存放公鑰祕鑰的位置,黑客可以存一個key,一個value,放上他的公鑰,他就可以登錄我們的服務器了。

解決方法有:設定redis密碼、監聽內網ip、加防火牆、以普通用戶身份登錄

 

1、設置監聽 ip

bind 127.0.0.1 2.2.2.2//可以是多個ip,用空格分隔

設置監聽端口

port 16000

 

2、設置密碼

1)編輯 redis.conf 配置文件,加入密碼

[root@arslinux-01 ~]# vim /etc/redis.conf

requirepass 123456

 

2)重啓 redis

[root@arslinux-01 ~]# systemctl restart redis

Failed to restart redis.service: Unit not found.

[root@arslinux-01 ~]# killall redis-server

[root@arslinux-01 ~]# redis-server /etc/redis.conf

 

3)不用密碼登錄,是無法查看 keys 的

[root@arslinux-01 ~]# redis-cli

127.0.0.1:6379> keys *

(error) NOAUTH Authentication required.

 

4)密碼登錄

[root@arslinux-01 ~]# redis-cli -a '123456'

127.0.0.1:6379> keys *

 1) "setc"

 2) "setd"

 3) "sete"

 4) "seta"

 5) "list1"

 6) "set1"

 7) "k3"

 8) "k1"

 9) "list2"

10) "hash1"

11) "set3"

12) "mykey"

13) "hash2"

 

3、配置文件中將 config 命令改名

找到 rename-command 位置,增加一行

[root@arslinux-01 ~]# vim /etc/redis.conf

rename-command CONFIG arslinux //用arslinux去代替CONFIG命令

[root@arslinux-01 ~]# killall redis-server

[root@arslinux-01 ~]# redis-server /etc/redis.conf

[root@arslinux-01 ~]# redis-cli -a "arslinux>com"

127.0.0.1:6379> CONFIG GET dir

(error) ERR unknown command 'CONFIG'

127.0.0.1:6379> arslinux get dir

1) "dir"

2) "/data/redis"

或者禁掉 config 命令

編輯配置文件 /etc/redis.conf,設置CONFIG命令爲空

rename-command CONFIG “”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章