【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 “”

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