21.13/21.14/21.15 redis常用操作
21.16 redis操作键值
21.17 redis安全设置
21.13/21.14/21.15 redis常用操作
String
创建一个新的k-v
格式:set 键名 值
1
2127.0.0.1:6379> set key1 aaa
OK
获得k-v
格式:get 键名
1
2127.0.0.1:6379> GET key1
"aaa"
注意:假如已经存在的键名再次创建会值会覆盖掉用来的值1
2
3
4127.0.0.1:6379> SET key1 bbb
OK
127.0.0.1:6379> GET key1
"bbb"
检测k-v是否存在,没有即创建k-v
格式:setnx 键名 值
1
2
3
4
5
6
7127.0.0.1:6379> SETNX key1 ccc ##返回0表示该值已经存在 不创建
(integer) 0
127.0.0.1:6379> SETNX key2 ddd ##返回1表示该值不存在 自动创建该k-v
(integer) 1
127.0.0.1:6379> GET key2
"ddd"
给k-v设置过期时间
格式1:set 键名 值 ex 时间(单位:秒)
格式2:setex 键名 时间(单位:秒) 值
注意:添加的该值已经存在会覆盖原来的值1
2
3
4
5
6
7
8
9127.0.0.1:6379> SET key1 aaa ex 10
OK
127.0.0.1:6379> get key1
"aaa"
127.0.0.1:6379> SETEX key1 10 bbb
OK
127.0.0.1:6379> get key1
"bbb"
连续创建多个k-v
格式:mset 键名1 值1 键名2 值2 ...
注意:添加的该值已经存在会覆盖用来的值1
2127.0.0.1:6379> MSET key1 ccc key2 ad key3 dd
OK
连续获得多个k-v
格式:mget 键名1 键名2 ...
1
2
3
4127.0.0.1:6379> MGET key1 key2 key3
1) "ccc"
2) "ad"
3) "dd"
List
从上到下插入值
格式:lpush 链名 值
1
2127.0.0.1:6379> LPUSH list1 aaa ##返回3表示该值是该链中的第三个元素,在最上面
(integer) 3
查看链值
格式:lrange 链名 初始下标 最后下标
1
2
3
4127.0.0.1:6379> LRANGE list1 0 -1 ##下标0表示第一个值 -1表示最后一个值
1) "aaa"
2) "abc"
3) "kun1"
从上到下取出值
格式:lpop 链名
1
2127.0.0.1:6379> LPOP list1 ##取出后的值会删除掉
"aaa"
从下到上插入值
格式:rpush 链名 值
1
2127.0.0.1:6379> RPUSH list1 123
(integer) 3
从下到上取出值
格式:rpop 链名
1
2127.0.0.1:6379> RPOP list1
"123"
在某个值上面插入值
格式:linsert 键名 before 某个值 插入的值
1
2
3
4
5
6
7
8
9127.0.0.1:6379> LRANGE list1 0 -1
1) "abc"
2) "kun1"
127.0.0.1:6379> LINSERT list1 before kun1 aaa ##在kun1上面插入aaa
(integer) 3
127.0.0.1:6379> LRANGE list1 0 -1
1) "abc"
2) "aaa"
3) "kun1"
在某个值下面插入值
格式:linsert 键名 after 某个值 插入的值
1
2
3
4
5
6
7127.0.0.1:6379> LINSERT list1 after kun1 cd ##在kun1下面插入cd
(integer) 4
127.0.0.1:6379> LRANGE list1 0 -1
1) "abc"
2) "aaa"
3) "kun1"
4) "cd"
指定修改某个值
格式:lset 键名 下标 修改的值
1
2
3
4
5
6
7127.0.0.1:6379> LSET list1 0 111
OK
127.0.0.1:6379> LRANGE list1 0 -1 ##0表示第一个值,即最上面的值
1) "111"
2) "aaa"
3) "kun1"
4) "cd"
查看链中某个值
格式:lindex 键名 下标
1
2
3
4127.0.0.1:6379> LINDEX list1 0
"111"
127.0.0.1:6379> LINDEX list1 2
"kun1"
查看链中共有多少个值
格式:llen 键名
1
2127.0.0.1:6379> LLEN list1
(integer) 4
Set
添加元素给集合
格式:sadd 集合名 元素值 ...
1
2127.0.0.1:6379> SADD set1 aaa
(integer) 1
查看集合中所有的元素
格式:smembers 集合名
1
2
3
4
5127.0.0.1:6379> SMEMBERS set1
1) "aaa"
2) "b"
3) "c"
4) "a"
删除元素
格式:srem 集合名 删除的元素值 ...
1
2
3
4
5
6127.0.0.1:6379> SREM set1 b
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "aaa"
2) "c"
3) "a"
随机取出几个元素,并删除
格式:spop 集合名 [取出的个数]
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379> SPOP set1
"a"
127.0.0.1:6379> SMEMBERS set1
1) "aaa"
2) "c"
127.0.0.1:6379> SPOP set1 2
1) "aaa"
2) "c"
127.0.0.1:6379> SMEMBERS set1
(empty list or set)
随机取出几个元素,不会删除
格式:srandmember 集合名 [取出的个数]
1
2
3
4
5
6
7127.0.0.1:6379> SRANDMEMBER set1 2
1) "aaa"
2) "ccc"
127.0.0.1:6379> SMEMBERS set1
1) "bbb"
2) "aaa"
3) "ccc"
求差集
格式:sdiff 集合1 集合2 (以集合1为标准)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16127.0.0.1:6379> SMEMBERS set1
1) "bbb"
2) "aaa"
3) "ccc"
127.0.0.1:6379> SMEMBERS set2
1) "bbb"
2) "111"
3) "ccc"
4) "222"
127.0.0.1:6379> SDIFF set1 set2
1) "aaa"
127.0.0.1:6379> SDIFF set2 set1
1) "111"
2) "222"
求差集并存储到为新集合
格式:sdiffstore 新集合 集合1 集合2 (以集合1为标准)
1
2
3
4127.0.0.1:6379> SDIFFSTORE set3 set1 set2
(integer) 1
127.0.0.1:6379> SMEMBERS set3
1) "aaa"
求交集
格式:sinter 集合1 集合2
1
2
3127.0.0.1:6379> SINTER set1 set2
1) "bbb"
2) "ccc"
求交集并存储到为新集合
格式:sinterstore 新集合 集合1 集合2
1
2
3
4
5127.0.0.1:6379> SINTERSTORE set4 set1 set2
(integer) 2
127.0.0.1:6379> SMEMBERS set4
1) "bbb"
2) "ccc"
求并集
格式:sunion 集合1 集合2
1
2
3
4
5
6127.0.0.1:6379> SUNION set1 set2
1) "111"
2) "ccc"
3) "bbb"
4) "aaa"
5) "222"
求并集并存储到为新集合
格式:sunionstore 新集合 集合1 集合2
1
2
3
4
5
6
7
8127.0.0.1:6379> SUNIONSTORE set5 set1 set2
(integer) 5
127.0.0.1:6379> SMEMBERS set5
1) "111"
2) "ccc"
3) "bbb"
4) "aaa"
5) "222"
判断元素是否属于某个集合
格式:sismember 集合名 判断的元素
1
2
3
4
5
6
7
8127.0.0.1:6379> SMEMBERS set1
1) "bbb"
2) "aaa"
3) "ccc"
127.0.0.1:6379> SISMEMBER set1 111 ##0表示不属于 1表示属于该集合
(integer) 0
127.0.0.1:6379> SISMEMBER set1 ccc
(integer) 1
Sorted Set
添加带权重的元素给集合
格式:zadd 集合名 权重1 元素1 ...
1
2127.0.0.1:6379> ZADD zset1 11 kun1 22 kun2 33 kun3
(integer) 3
查看有序集合
格式:zrange 集合名 初始下标 最后下标 [withscores]
1
2
3
4127.0.0.1:6379> ZRANGE zset1 0 -1 ##下标0表示第一个值 -1表示最后一个值 元素从小到大排序
1) "kun1"
2) "kun2"
3) "kun3"
删除元素
格式:zrem 集合名 删除的元素值 ...
1
2
3
4
5127.0.0.1:6379> ZREM zset1 kun2
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "kun1"
2) "kun3"
查看元素的索引值(下标)
格式:zrank 集合名 查看的元素值
1
2
3
4
5
6
7
8
9127.0.0.1:6379> ZRANGE zset1 0 -1
1) "kun4"
2) "kun1"
3) "kun5"
4) "kun3"
127.0.0.1:6379> ZRANK zset1 kun4
(integer) 0
127.0.0.1:6379> ZRANK zset1 kun1
(integer) 1
反序查看元素的索引值(下标)
格式:zrevrank 集合名 查看的元素值
1
2
3
4
5
6
7
8
9127.0.0.1:6379> ZRANGE zset1 0 -1
1) "kun4"
2) "kun1"
3) "kun5"
4) "kun3"
127.0.0.1:6379> ZREVRANK zset1 kun4
(integer) 3
127.0.0.1:6379> ZREVRANK zset1 kun1
(integer) 2
反序显示所有元素,可带分值
格式:zrevrange 集合名 初始下标 最后下标 [withscores]
1
2
3
4
5
6
7
8
9127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores
1) "kun3"
2) "33"
3) "kun5"
4) "15"
5) "kun1"
6) "11"
7) "kun4"
8) "1"
查看有序集合中共有多少个元素
格式:zcard 集合名
1
2127.0.0.1:6379> ZCARD zset1
(integer) 4
查看某个权重范围有多个元素
格式:zcount 集合名 初始权重 结束权重
1
2127.0.0.1:6379> ZCOUNT zset1 10 20 ##10-20的权重内有两个元素
(integer) 2
查看某个权重范围的元素值,可带分值
格式:zrangebyscore 集合名 初始权重 结束权重 [withscores]
1
2
3
4
5
6
7
8127.0.0.1:6379> ZRANGEBYSCORE zset1 10 20
1) "kun1"
2) "kun5"
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 20 withscores
1) "kun1"
2) "11"
3) "kun5"
4) "15"
删除某个权重范围的元素值
格式:zremrangebyscore 集合名 初始权重 结束权重
1
2
3
4127.0.0.1:6379> ZREMRANGEBYSCORE zset1 10 20
(integer) 2
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 20
(empty list or set)
删除某个索引范围的元素值
格式:zremrangebyrank 集合名 初始下标 最后下标
1
2
3
4
5127.0.0.1:6379> ZRANGE zset1 0 -1
1) "kun4"
2) "kun3"
127.0.0.1:6379> ZREMRANGEBYRANK zset1 0 2 ##删除索引第一个到第三个的元素
(integer) 2
Hash
添加哈希数据
格式:hset 哈希表名 键名 值
1
2
3
4
5
6127.0.0.1:6379> HSET hash2 name kun
(integer) 1
127.0.0.1:6379> HSET hash2 age 30
(integer) 1
127.0.0.1:6379> HSET hash2 job it
(integer) 1
查看整个哈希表
格式:hgetall 哈希表名
1
2
3
4
5
6
7127.0.0.1:6379> HGETALL hash2
1) "name"
2) "kun"
3) "age"
4) "30"
5) "job"
6) "it"
查看哈希表中的某个数据
格式:hget 哈希表名 键名
1
2127.0.0.1:6379> HGET hash2 job
"it"
添加多个哈希数据
格式:hmset 哈希表名 键名1 值1 ...
1
2127.0.0.1:6379> HMSET hash3 name li age 20 job worker
OK
查看哈希表中的多个数据
格式:hmget 哈希表名 键名1 ...
1
2
3127.0.0.1:6379> HMGET hash3 name job
1) "li"
2) "worker"
删除指定的键值
格式:hdel 哈希表名 键名1 ...
1
2
3
4
5
6
7127.0.0.1:6379> HDEL hash3 name ##删除name和对应的值
(integer) 1
127.0.0.1:6379> HGETALL hash3
1) "age"
2) "20"
3) "job"
4) "worker"
查看表中所有的键名
格式:hkeys 哈希表名
1
2
3
4127.0.0.1:6379> HKEYS hash2
1) "name"
2) "age"
3) "job"
查看表中所有的值
格式:hvals 哈希表名
1
2
3
4127.0.0.1:6379> HVALS hash2
1) "kun"
2) "30"
3) "it"
查看表中总的k-v个数
格式:hlen 哈希表名
1
2127.0.0.1:6379> HLEN hash2 ##共有3个k-v段
(integer) 3
21.16 redis操作键值
查看所有建
格式:keys *
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17127.0.0.1:6379> KEYS *
1) "key3"
2) "set2"
3) "key2"
4) "k3"
5) "set5"
6) "set3"
7) "k2"
8) "sset1"
9) "hash1"
10) "set4"
11) "hash3"
12) "k1"
13) "key1"
14) "hash2"
15) "set1"
16) "list1"
支持模糊匹配1
2
3
4
5
6127.0.0.1:6379> KEYS set*
1) "set2"
2) "set5"
3) "set3"
4) "set4"
5) "set1"
判断某个键是否存在
格式:exists 键名
1
2
3
4127.0.0.1:6379> EXISTS set10 ##0表示不存在 1表示存在
(integer) 0
127.0.0.1:6379> EXISTS set5
(integer) 1
删除指定键
格式:del 键名 ...
1
2
3
4127.0.0.1:6379> DEL set5
(integer) 1
127.0.0.1:6379> get set5
(nil)
给某个建设置过期时间
格式:expire 键名 过期时间
1
2127.0.0.1:6379> EXPIRE set4 10
(integer) 1
查看键的过期时间
格式:ttl 键名
1
2
3
4
5
6
7
8127.0.0.1:6379> EXPIRE set3 100
(integer) 1
127.0.0.1:6379> TTL set3 ##92表示还有92s过期
(integer) 92
127.0.0.1:6379> ttl set4 ##-2表示该键值不存在了
(integer) -2
127.0.0.1:6379> ttl set2 ##-1表示该键值存在没有设置过期时间
(integer) -1
取消过期时间
格式:persist 键名
1
2
3
4
5
6
7
8127.0.0.1:6379> EXPIRE key3 1000 ##设置过期时间1000s
(integer) 1
127.0.0.1:6379> TTL key3 ##查看还有992s
(integer) 992
127.0.0.1:6379> PERSIST key3 ##取消过期时间
(integer) 1
127.0.0.1:6379> TTL key3 ##没有过期时间
(integer) -1
随机返回一个键
格式:randomkey
1
2
3
4127.0.0.1:6379> RANDOMKEY
"key1"
127.0.0.1:6379> RANDOMKEY
"k1"
重命名键名字
格式:rename 旧键名 新键名
1
2
3
4127.0.0.1:6379[1]> RENAME set1 set_new ##重命名
OK
127.0.0.1:6379[1]> KEYS *
1) "set_new"
返回建的类型
格式:type 键名
1
2
3
4
5
6127.0.0.1:6379> TYPE hash1
hash
127.0.0.1:6379> TYPE sset1
zset
127.0.0.1:6379> TYPE set2
set
选择进入库
Redis自带有16个库,从0-15
格式:select 库下标
1
2
3
4127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
(empty list or set)
移动键到其他库里
格式:move 键名 库下标
1
2
3
4
5
6127.0.0.1:6379> MOVE set1 1 ##把set1移动到第二个库中
(integer) 1
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
1) "set1"
返回当前数据库中键的个数
格式:dbsize
1
2127.0.0.1:6379> DBSIZE
(integer) 12
清空当前库中的键
格式:flushdb
1
2
3
4127.0.0.1:6379[1]> FLUSHDB
OK
127.0.0.1:6379[1]> KEYS *
(empty list or set)
清空所有库的中键
格式:flushall
1
2127.0.0.1:6379[1]> FLUSHALL
OK
保存数据到rdb文件中
格式:save
1
2127.0.0.1:6379> SAVE
OK
后台保存数据
格式:bgsave
1
2127.0.0.1:6379> BGSAVE
Background saving started
返回redis数据库状态信息
格式:info
1
2
3
4
5
6
7
8
9127.0.0.1:6379> INFO
# Server
redis_version:4.0.11
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c32f906a72ededb
redis_mode:standalone
os:Linux 3.10.0-693.el7.x86_64 x86_64
arch_bits:64
获得所有配置参数
格式:config get *
1
2
3
4
5
6
7127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
支持模糊匹配1
2
3
4
5127.0.0.1:6379> CONFIG GET log*
1) "logfile"
2) "/var/log/redis.log"
3) "loglevel"
4) "notice"
更改配置参数
格式:config set 参数名 值
1
2
3
4
5
6
7
8127.0.0.1:6379> CONFIG GET timeout
1) "timeout"
2) "0"
127.0.0.1:6379> CONFIG SET timeout 100 ##修改参数配置
OK
127.0.0.1:6379> CONFIG GET timeout
1) "timeout"
2) "100"
数据恢复: 首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启redis服务即可恢复数据1
2
3
4
5
6127.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是以root用户登录的 而且redis默认是监听全文IP的。黑客可以轻易登录redis服务器后可以把他的公钥通过dir/dump.rdb
来存放到/ssh/.authorized_kyes
下来ssh服务器。
修改监听IP
1 | [root@kun02 ~]# vim /etc/redis.conf |
修改监听端口
1 | port 9736 |
设置登录密码
1 | requirepass 38003800 ##密码为38003800 生成环境请设置尽量复制 这里只是测试 |
重启redis服务
1 | [root@kun02 ~]# killall redis-server |
使用密码登录redis
格式:redis-cli -a 密码
1
2[root@kun02 ~]# redis-cli -a '38003800'
Warning: Using a password with '-a' option on the command line interface may not be safe.
别名config命令
1 | [root@kun02 ~]# vim /etc/redis.conf |
禁止config命令
1 | rename-command CONFIG "" |