1. 程式人生 > >5種redis常用操作(數據類型+鍵值+服務+安全)

5種redis常用操作(數據類型+鍵值+服務+安全)

管理 4.0 empty 目錄 打開 mman linux process tables

[toc]

5種redis常用數據類型操作

一、Redis常用操作 (string, list)

1.1 如果一個key設置兩個不同的值,第二個值會覆蓋第一個值。

[root@xavi ~]# cd /usr/local/src/redis-4.0.9
[root@xavi redis-4.0.9]# redis-cli
127.0.0.1:6379> set key1 xavi
OK
127.0.0.1:6379> set key2 xavilinux
OK
127.0.0.1:6379> set key1 linux
OK
127.0.0.1:6379> get key1
"linux"

1.2 SETNX 檢測鍵值是否有value 如果有直接返回一個 0 如果沒有直接返回一個 1 並且創建此 value

127.0.0.1:6379> SETNX key1 aaa
(integer) 0
127.0.0.1:6379> get key1
"linux"
127.0.0.1:6379> SETNX key3 aaa
(integer) 1
127.0.0.1:6379> get key3
"aaa"

1.3 setex 針對某個key設置一個過期時間。

127.0.0.1:6379> set key3 aaa ex 10
OK
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> set key3 aaa ex 100
OK
127.0.0.1:6379> get key3
"aaa"

 set key1 aming//第二次賦值會覆蓋
 setnx key2 aaa //返回1 如果key2不存在直接創建key
 setnx key2 bbb  //返回0,如果key2存在,返回0
 setex key3 10 1 //給key3設置過期時間為10s,值為1,若key已經存在,會覆蓋新的值

1.4 LPUSH 取值,RPOP 或者 LPOP只要把值取出來 其中的值就會被刪除掉。

  • [ ] lpush lista a //從左側加入一個元素
  • [ ] lpush lista b
  • [ ] lrange lista 0 -1
  • [ ] lpop lista //從左側取出第一個元素
  • [ ] rpush lista 1 //從右側加入一個元素
  • [ ] rpop lista //從右側取出第一個元素
127.0.0.1:6379> LPUSH list aaa
(integer) 1
127.0.0.1:6379> LPush list bbb
(integer) 2
127.0.0.1:6379> LPUSH list ccc
(integer) 3
127.0.0.1:6379> LPUSH list ddd
(integer) 4

127.0.0.1:6379> LRANGE list 0 -1
1) "ddd"
2) "ccc"
3) "bbb"
4) "aaa"

127.0.0.1:6379> RPOP list
"aaa"
127.0.0.1:6379> lpop list
"ddd"

二、 Redis常用操作(list, set)

  • [ ] linsert lista before 2 3 //aaa 333//在aaa的前面插入一個元素為333

  • [ ] lset lista 4 bbb //把第5個元素修改為bbb
  • [ ] lindex lista 0 //查看第1個元素
  • [ ] lindex lista 3 //查看第4個元素
  • [ ] llen lista //查看鏈表中有幾個元素

舉例:

127.0.0.1:6379> linsert list before aaa bbb
(integer) 3
127.0.0.1:6379> linsert list after aaa 111
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "bbb"
2) "aaa"
3) "111"
4) "ccc"
127.0.0.1:6379> lindex list 0  //LINDEX 查看元素的值
"bbb"
127.0.0.1:6379> llen list  // LINDEX 查看元素的長度
(integer) 4
  • [ ] 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
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> sadd seta 111
(integer) 1
127.0.0.1:6379> smembers seta
1) "bbb"
2) "111"
127.0.0.1:6379> smembers setb
1) "aaa"
2) "222"
127.0.0.1:6379> sdiff seta setb
1) "bbb"
2) "111"

三、Redis常用操作(set, zset)

ZADD 創建有序集合

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> ZADD zseta 14 dddd
(integer) 1
127.0.0.1:6379> zadd zseta 16 121211
(integer) 1
127.0.0.1:6379> zrange zseta 0 -1
1) "1ab"
2) "123"
3) "dddd"
4) "121211"   //顯示所有元素,按順序顯示

127.0.0.1:6379> ZREM zseta 123     //刪除指定元素
(integer) 1
127.0.0.1:6379> ZRANGE zseta 0 -1
1) "1ab"
2) "dddd"
3) "121211"  

ZRANK 索引數據

127.0.0.1:6379> zrange zseta 0 -1
1) "1ab"
2) "123"
3) "dddd"
4) "121211"
127.0.0.1:6379> zrank zseta dddd
(integer) 2  //返回元素的索引值,索引值從0開始,按score正向排序

127.0.0.1:6379> ZREVRANK zseta 121211
(integer) 0 //按score反向排序,獲取數據的值

ZCARD 統計集合元素中的個數

127.0.0.1:6379> ZCARD zseta
(integer) 4
ZCOUNT 統計範圍內集合元素的個數

127.0.0.1:6379> ZCOUNT zseta 10 20
(integer) 3     //返回分值範圍10-20的元素個數
(integer) 2

ZRANGEBYSCORE 返回分值範圍的元素

127.0.0.1:6379> ZRANGEBYSCORE zseta 10 20
1) "123"
2) "dddd"
3) "121211"

ZREMRANGEBYSCORE 刪除分值範圍的元素

127.0.0.1:6379> ZREMRANGEBYSCORE zseta 10 15
(integer) 2
127.0.0.1:6379> ZRANGE zseta 0 -1
1) "1ab"
2) "121211"

ZREMRANGEBYRANK 刪除索引範圍的元素,按score正向排序

127.0.0.1:6379> ZRANGE zseta 0 -1
1) "asdaqwe"
2) "123"
3) "234"
4) "345"
5) "asdaa"
6) "asasdz"
127.0.0.1:6379> ZREMRANGEBYRANK zseta 1 10
(integer) 5
127.0.0.1:6379> ZRANGE zseta 0 -1
1) "asdaqwe"

四、Redis常用操作(hash)

HMSET 批量建立鍵值對

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"

HMGET 查詢一個鍵值

127.0.0.1:6379> hmget hash2 b c
1) "2"
2) "3"

HDEL 刪除一個鍵值

127.0.0.1:6379> hdel hash2 b
(integer) 1
127.0.0.1:6379> Hgetall hash2
1) "a"
2) "1"
3) "c"
4) "3"
5) "d"
6) "4"

HKEYS 打印所有的鍵值 HVALS 打印所有的values

127.0.0.1:6379> hkeys hash2
1) "a"
2) "c"
3) "d"
127.0.0.1:6379> hvals hash2
1) "1"
2) "3"
3) "4"

hlen 查看有幾個filed

127.0.0.1:6379> hlen hash2
(integer) 3

五、Redis 鍵值操作

  • [ ] keys * //取出所有key
  • [ ] keys my* //模糊匹配
  • [ ] exists name //有name鍵 返回1 ,否則返回0;
  • [ ] del key1 // 刪除一個key //成功返回1 ,否則返回0;
  • [ ] EXPIRE key1 100 //設置key1 100s後過期
127.0.0.1:6379> keys *
 1) "list1"
 2) "k2"
 3) "list"
 4) "k3"
 5) "set2"
 6) "hash1"
 7) "hash2"
 8) "zseta"
 9) "mykey"
10) "key1"
11) "set3"
12) "setb"
13) "seta"
14) "key2"
15) "k1"
16) "set1"
127.0.0.1:6379> keys my*
1) "mykey"
127.0.0.1:6379> EXISTS key1
(integer) 1
127.0.0.1:6379> EXISTS key11
(integer) 0
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> EXPIRE k2 10
(integer) 1
127.0.0.1:6379> get k2
"2"
127.0.0.1:6379> get k2
(nil)
  • [ ] ttl key // 查看鍵 還有多長時間過期,單位是s,當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。 否則,返回 key 的剩余生存時間。
127.0.0.1:6379> ttl key2
(integer) 6
127.0.0.1:6379> ttl key2
(integer) 1
127.0.0.1:6379> ttl key2
(integer) -2
  • [ ] select 0 //代表選擇當前數據庫,默認進入0 數據庫
  • [ ] move age 1 // 把age 移動到1 數據庫
  • [ ] persist key1 //取消key1的過期時間
  • [ ] randomkey //隨機返回一個key
  • [ ] rename oldname newname //重命名key
127.0.0.1:6379> move 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[1]> SELECT 0
OK
127.0.0.1:6379> EXPIRE mykey 1000
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 996

127.0.0.1:6379> rename setb set3
OK
127.0.0.1:6379> keys set*
1) "set3"
2) "seta"
3) "set1"
  • [ ] type key1 //返回鍵的類型
127.0.0.1:6379> TYPE seta
set

127.0.0.1:6379> TYPE zseta
zset
127.0.0.1:6379> type key1
none
127.0.0.1:6379> type hash2
hash
127.0.0.1:6379> type list
list

六、Redis常用操作(服務)

dbsize //返回當前數據庫中key的數目
info//返回redis數據庫狀態信息

127.0.0.1:6379> DBSIZE
(integer) 11

127.0.0.1:6379> info
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:5c0f8253777cfd43
redis_mode:standalone
os:Linux 3.10.0-514.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:7661
run_id:8e0a79aba2f0507ea46724b5e274a026a4b03b14
tcp_port:6379
uptime_in_seconds:20486
uptime_in_days:0
hz:10
lru_clock:2406733
executable:/usr/local/src/redis-4.0.9/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:850408
used_memory_human:830.48K
used_memory_rss:7700480
used_memory_rss_human:7.34M
used_memory_peak:872080
used_memory_peak_human:851.64K
  • [ ] flushdb//清空當前數據庫中所有的鍵
  • [ ] flushall//清空所有數據庫中的所有的key
  • [ ] bgsave //保存數據到 rdb文件中,在後臺運行
  • [ ] save //作用同上,但是在前臺運行
  • [ ] config get * //獲取所有配置參數
  • [ ] config get dir //獲取配置參數
  • [ ] config set dir //更改配置參數

  • 數據恢復: 首先定義或者確定dir目錄和dbfilename,然後把備份的rdb文件放到dir目錄下面,重啟redis服務即可恢復數據
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"
127.0.0.1:6379> CONFIG GET dbfileema
(empty list or set)
127.0.0.1:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"

七、Redis 安全設置

前兩年Redis比較火的時候,也就是×××最嚴重的時候。見到了很多次由Redis被黑導致系統被黑的案例!

  • 怎麽被黑的呢?

Redis 服務啟動了,但是監聽了一個全網IP,如果6379默認端口沒有更改,並且iptables也處於關閉,公網IP 也開放著,Redis也沒有設置任何密碼,×××就會掃描端口,然後就可以輕輕松松登錄你的Redis服務器,並且是超級管理員的權限。然後×××就可以設置dir dbname , dir 定義到/root/.ssh 且dbname定義為:.ssh/authorized_keys 再把這個值寫上自己的公鑰。

這些應該都不陌生吧,這不就活生生的把×××的公鑰上傳到了咱們的服務器中,然後利用超級管理員做任何想做的事

如何解決redis漏洞

①設置密碼 ②更改默認端口 ③監聽內網IP ④設定專用賬戶 ⑤修改configure命令

打開配置文件 vim /etc/redis.conf

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

設置監聽端口  
port 16000

設置密碼
requirepass xavi
redis-cli  -a ‘asd9577‘

將config命令改名
rename-command CONFIG xavi

禁掉config命令 
rename-command CONFIG “”

技術分享圖片

[root@xavi redis-4.0.9]# vim /etc/redis.conf
[root@xavi redis-4.0.9]# killall redis-server
[root@xavi redis-4.0.9]# redis-server /etc/redis.conf  //修改密碼後重啟redis
[root@xavi redis-4.0.9]# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> redis-cli -a ‘xavi>com‘
(error) ERR unknown command ‘redis-cli‘
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> quit
[root@xavi redis-4.0.9]# redis-cli -a ‘xavi>com‘
127.0.0.1:6379> keys *
(empty list or set)

5種redis常用操作(數據類型+鍵值+服務+安全)