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

mark

[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)