前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详细介绍5种Redis常用数据类型操作

详细介绍5种Redis常用数据类型操作

作者头像
老七Linux
发布2018-05-31 10:06:27
6470
发布2018-05-31 10:06:27
举报
文章被收录于专栏:Laoqi's Linux运维专列
一、Redis常用操作 (string, list)

如果一个key设置两个不同的值,第二个值会覆盖第一个值。

代码语言:javascript
复制
127.0.0.1:6379> set key1 zhang
OK
127.0.0.1:6379> set key2 duan
OK
127.0.0.1:6379> set key1 asdqwe
OK
127.0.0.1:6379> get key1
"asdqwe"

SETNX 检测键值是否有value 如果有直接返回一个 0 如果没有直接返回一个 1 并且创建此 value

代码语言:javascript
复制
127.0.0.1:6379> SETNX key1 aaa
(integer) 0
127.0.0.1:6379> SETNX key3 aaa
(integer) 1
127.0.0.1:6379> get key1
"asdqwe"
127.0.0.1:6379> get key3
"aaa"

setex 针对某个key设置一个过期时间。

代码语言:javascript
复制
setex key3 10 1 //给key3设置过期时间为10s,值为1,若key已经存在,会覆盖新的值。

LPUSH 取值

代码语言:javascript
复制
127.0.0.1:6379> LPUSH kk 222    //从左侧添加一个数据
(integer) 1
127.0.0.1:6379> LPUSH kk 111
(integer) 1
127.0.0.1:6379> LPUSH kk 2222
(integer) 3
127.0.0.1:6379> LRANGE kk 0 -1
1) "2222"
2) "111"
3) "222"
127.0.0.1:6379> LPOP kk     //LPOP 取最上面的值
"2222"
127.0.0.1:6379> RPOP kk     //RPOP 取最下面的值
"222"
RPOP 或者 LPOP只要把值取出来 其中的值就会被删除掉。
二、Redis常用操作(list, set)

在某个数值的前面或者后面插入一个值

代码语言:javascript
复制
127.0.0.1:6379> LRANGE kk1 0 -1
1) "333"
2) "asd"
3) "111"

在之前插入一个数值:
127.0.0.1:6379> LINSERT kk1 before 333 zzz
(integer) 4
127.0.0.1:6379> LRANGE kk1 0 -1
1) "zzz"
2) "333"
3) "asd"
4) "111"

在之后插入一个数值:
127.0.0.1:6379> LINSERT kk1 after asd sss
(integer) 5
127.0.0.1:6379> LRANGE kk1 0 -1
1) "zzz"
2) "333"
3) "asd"
4) "sss"
5) "111"

修改其中的一个值(使用的是key 修改的是 value)

代码语言:javascript
复制
把第二个值 333 改为 555(首个数值是从0 开始的)
127.0.0.1:6379> LRANGE kk1 0 -1 
1) "zzz"
2) "333"
3) "asd"
4) "sss"
5) "111"
127.0.0.1:6379> LSET kk1 2 555
OK
127.0.0.1:6379> LRANGE kk1 0 -1 
1) "zzz"
2) "333"
3) "555"
4) "sss"
5) "111"

LINDEX 查看元素的值

代码语言:javascript
复制
lindex kk1 0 //查看第1个元素
lindex kk1 3 //查看第4个元素

LLEN 查看元素的长度

代码语言:javascript
复制
127.0.0.1:6379> LLEN kk1
(integer) 5
表示有5个元素

SET 常用操作

代码语言:javascript
复制
127.0.0.1:6379> SADD pp 111     //向集合pp中放入元素
(integer) 1
127.0.0.1:6379> SADD pp 222
(integer) 1
127.0.0.1:6379> SADD pp 333
(integer) 1
127.0.0.1:6379> SMEMBERS pp     //查看集合中的所有元素 
1) "111"
2) "222"
3) "333"
127.0.0.1:6379> SPOP pp         //随机取出一个元素,删除
"111"

127.0.0.1:6379> SMEMBERS pp     
1) "111"
2) "222"
3) "333"
127.0.0.1:6379> SREM pp 111     //删除一个元素
(integer) 1
127.0.0.1:6379> SMEMBERS pp
1) "222"
2) "333"

SDIFF 求差集

代码语言:javascript
复制
127.0.0.1:6379> SMEMBERS pp
1) "222"
2) "333"
127.0.0.1:6379> SMEMBERS mm
1) "221"
2) "222"
3) "233"
127.0.0.1:6379> SDIFF pp mm
1) "333"

127.0.0.1:6379> SDIFF mm pp
1) "221"
2) "233"

第一个SDIFF pp在前 mm在后  意思是针对于pp 对照mm找出不同的值

第一个SDIFF mm在前 pp在后  意思是针对于mm 对照pp找出不同的值

127.0.0.1:6379> SDIFFstore nn mm pp         //求差集并且存储,存储到了nn里 
(integer) 2
127.0.0.1:6379> SMEMBERS nn
1) "221"
2) "233"

SINTER 求交集

代码语言:javascript
复制
127.0.0.1:6379> SMEMBERS pp
1) "222"
2) "333"
127.0.0.1:6379> SMEMBERS mm
1) "221"
2) "222"
3) "233"
127.0.0.1:6379> SINTER mm pp
1) "222"

127.0.0.1:6379> SINTERSTORE aa mm pp        //求交集并且存储,存储到了aa里
(integer) 1
127.0.0.1:6379> SMEMBERS aa
1) "222"

SISMEMBER 判断集合中是否有此值

代码语言:javascript
复制
127.0.0.1:6379> SMEMBERS mm
1) "221"
2) "222"
3) "233"
127.0.0.1:6379> SISMEMBER mm 11
(integer) 0
127.0.0.1:6379> SISMEMBER mm 233
(integer) 1
三、Redis常用操作(set, zset)

ZADD 创建有序集合

代码语言:javascript
复制
127.0.0.1:6379> ZADD ss 1 123
(integer) 1
127.0.0.1:6379> ZADD ss 2 234
(integer) 1
127.0.0.1:6379> ZADD ss 3 asd
(integer) 1
127.0.0.1:6379> ZRANGE ss 0 -1      //显示所有元素,按顺序显示

1) "123"
2) "234"
3) "asd"
127.0.0.1:6379> ZREM ss 234     //删除指定元素
(integer) 1
127.0.0.1:6379> ZRANGE ss 0 -1
1) "123"
2) "asd"

ZRANK 索引数据

代码语言:javascript
复制
127.0.0.1:6379> ZRANGE ss 0 -1      
1) "123"
2) "asd"
3) "asdaqwe"
4) "asasdz"
127.0.0.1:6379> ZRANK ss asd    //返回元素的索引值,索引值从0开始,按score正向排序
(integer) 1
127.0.0.1:6379> ZRANK ss asasdz
(integer) 3
127.0.0.1:6379> ZREVRANK ss asd     //按score反向排序,获取数据的值
(integer) 2

ZCARD 统计集合元素中的个数

代码语言:javascript
复制
127.0.0.1:6379> ZCARD ss
(integer) 4

ZCOUNT 统计范围内集合元素的个数

代码语言:javascript
复制
127.0.0.1:6379> ZCOUNT ss 1 10      //返回分值范围1-10的元素个数
(integer) 2

ZRANGEBYSCORE 返回分值范围的元素

代码语言:javascript
复制
127.0.0.1:6379> ZRANGEBYSCORE ss 1 10
1) "123"
2) "asd"

ZREMRANGEBYSCORE 删除分值范围的元素

代码语言:javascript
复制
127.0.0.1:6379> ZREMRANGEBYSCORE ss 1 10
(integer) 2
127.0.0.1:6379> ZRANGE ss 0 -1
1) "asdaqwe"
2) "asasdz"

ZREMRANGEBYRANK 删除索引范围的元素,按score正向排序

代码语言:javascript
复制
127.0.0.1:6379> ZRANGE ss 0 -1
1) "asdaqwe"
2) "123"
3) "234"
4) "345"
5) "asdaa"
6) "asasdz"
127.0.0.1:6379> ZREMRANGEBYRANK ss 1 10
(integer) 5
127.0.0.1:6379> ZRANGE ss 0 -1
1) "asdaqwe"
四、Redis常用操作(hash)

HMSET 批量建立键值对

代码语言:javascript
复制
127.0.0.1:6379> HMSET zh name justin age 27 jobs IT
OK
127.0.0.1:6379> HGETALL zh
1) "name"
2) "justin"
3) "age"
4) "27"
5) "jobs"
6) "IT"

HMGET 查询一个键值

代码语言:javascript
复制
127.0.0.1:6379> HMGET zh name
1) "justin"

HDEL 删除一个键值

代码语言:javascript
复制
127.0.0.1:6379> HDEL zh name
(integer) 1
127.0.0.1:6379> HGETALL zh
1) "age"
2) "27"
3) "jobs"
4) "IT"

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

代码语言:javascript
复制
127.0.0.1:6379> HKEYS zh
1) "age"
2) "jobs"
127.0.0.1:6379> HVALS zh
1) "27"
2) "IT"

hlen 查看有几个filed

代码语言:javascript
复制
127.0.0.1:6379> HLEN zh
(integer) 2
五、Redis 键值操作
代码语言:javascript
复制
keys *    //取出所有key
 
keys my* //模糊匹配
 
exists name  //有name键 返回1 ,否则返回0;
 
del  key1 // 删除一个key    //成功返回1 ,否则返回0;
 
EXPIRE key1 100  //设置key1 100s后过期
 
ttl key // 查看键 还有多长时间过期,单位是s,当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,返回 key 的剩余生存时间。
 
select  0  //代表选择当前数据库,默认进入0 数据库
 
move age 1  // 把age 移动到1 数据库
 
persist key1   //取消key1的过期时间

127.0.0.1:6379> EXPIRE zh 1111
(integer) 1
127.0.0.1:6379> ttl zh
(integer) 1106
127.0.0.1:6379> ttl zh
(integer) 1104
127.0.0.1:6379> ttl zh
(integer) 1103
127.0.0.1:6379> PERSIST zh
(integer) 1
127.0.0.1:6379> ttl zh
(integer) -1

randomkey //随机返回一个key
 
rename oldname newname //重命名key
 
type key1 //返回键的类型

127.0.0.1:6379> TYPE zh
hash
127.0.0.1:6379> TYPE nn
set
127.0.0.1:6379> TYPE testkk
list

键值操作 (2)

代码语言:javascript
复制
dbsize  //返回当前数据库中key的数目

info  //返回redis数据库状态信息

flushdb   /清空当前数据库中所有的键

flushall  //清空所有数据库中的所有的key

bgsave  //保存数据到 rdb文件中,在后台运行

save    //作用同上,但是在前台运行

config get *    //获取所有配置参数

config get dir  //获取配置参数

config set dir  //更改配置参数

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"
127.0.0.1:6379> CONFIG GET timeout
1) "timeout"
2) "0"

数据恢复: 首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启redis服务即可恢复数据。
六、Redis 安全设置

谈到安全,先说一个真实的例子:前两年Redis比较火的时候,也就是攻击最严重的时候。见到了很多次由Redis被黑导致系统被黑的案例!

怎么被黑的呢?

Redis 服务启动了,但是监听了一个全网IP,如果6379默认端口没有更改,并且iptables也处于关闭,公网IP 也开放着,Redis也没有设置任何密码,黑客就会扫描端口,然后就可以轻轻松松登录你的Redis服务器,并且是超级管理员的权限。然后黑客就可以设置dir dbname , dir 定义到/root/.ssh 且dbname定义为:.ssh/authorized_keys 再把这个值写上自己的公钥。 这些应该都不陌生吧,这不就活生生的把黑客的公钥上传到了咱们的服务器中,然后利用超级管理员做任何想做的事情了!!

当然解决也很简单:①设置密码 ②更改默认端口 ③监听内网IP ④设定专用账户 ⑤修改configure命令

vim /etc/redis.conf
代码语言:javascript
复制
设置监听ip
bind 127.0.0.1  2.2.2.2//可以是多个ip,用空格分隔

设置监听端口  
port 16000

设置密码
requirepass asd9577
redis-cli  -a 'asd9577'

将config命令改名
rename-command CONFIG asd

禁掉config命令 
rename-command CONFIG “”

最后重启 redis 服务器

代码语言:javascript
复制
# killall redis-server
# redis-server /etc/redis.conf

再次登陆 redis server 我们发现需要密码

代码语言:javascript
复制
127.0.0.1:6379> SADD asd 12
(error) NOAUTH Authentication required.

[[email protected]01 ~]# redis-cli -a 'asd9577'
127.0.0.1:6379> SADD asd 12
(integer) 1

我们还可以使用如上所讲的 更改config 为自定义名称,就算黑客登录了你的redis服务器也不晓得你们的config是什么命令。

代码语言:javascript
复制
[[email protected]01 ~]# vim /etc/redis.conf 
添加:rename-command CONFIG asd

[[email protected]01 ~]# killall redis-server

[[email protected]01 ~]# redis-server /etc/redis.conf 

127.0.0.1:6379> CONFIG GET *
(error) ERR unknown command 'CONFIG'
127.0.0.1:6379> asd GET *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) "asd9577"
  5) "masterauth"
  6) ""
  7) "cluster-announce-ip"
  8) ""
  9) "unixsocket"

当然,最后一个就是禁掉 CONFIG

mark
mark
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/10/13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Redis常用操作 (string, list)
  • 二、Redis常用操作(list, set)
  • 三、Redis常用操作(set, zset)
  • 四、Redis常用操作(hash)
  • 五、Redis 键值操作
  • 六、Redis 安全设置
    • vim /etc/redis.conf
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档