【12.12】redis(中)

21.13/21.14/21.15 redis常用操作

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
(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> HGETALL hash2		//删除指定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,然后把备份的 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

  • 设置监听 ip
    bind 127.0.0.1 2.2.2.2//可以是多个ip,用空格分隔

  • 设置监听端口
    port 16000

  • 设置密码

1)编辑 redis.conf 配置文件,加入密码

[root@arslinux-01 ~]# vim /etc/redis.conf
requirepass arslinux>com`

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 'arslinux>com'
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"
  • 配置文件中将 config 命令改名
    找到 rename-command 位置,增加一行
[root@arslinux-01 ~]# vim /etc/redis.conf
rename-command CONFIG arslinux
[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,设置命令为空
    rename-command CONFIG “”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值