nosql—Redis(二)

回复 收藏

## 21.13-22.15 Redis常用操作

### string 、list类型数据操作

* string

```

[root@adailinux ~]# redis-cli 

127.0.0.1:6379> set key1 adai

OK

127.0.0.1:6379> set key1 linux

OK

127.0.0.1:6379> get key1

"linux"

#使用set添加数据,新值会替代旧值

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 key3

"aaa"

#使用setnx添加数据时,会检测数据是否存在

#0表示该值已经存在;1表示该值不存在,并添加到数据库中

127.0.0.1:6379> set key3 aaa ex 10

OK

127.0.0.1:6379> get key3

(nil)

#ex:=expire,设定数据的过期时间

#10s后key3消失

127.0.0.1:6379> setex key 60 aaa

OK

#设定数据保存时长,如果数据已经存在,则会重新赋值

```

* 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"

#先添加的数据排在下面

#lpop取值时先取上面的值

#lpop=left pop :从左侧取一个数据

127.0.0.1:6379> lrange list2 0 -1

1) "ddd"

2) "ccc"

3) "aaa"

127.0.0.1:6379> rpop list2

"aaa"

#rpop=right pop:从右侧取一个数据

#rpop取值时从下面开始取

**注意:** 使用l/rpop取值后,数据库中相应的值会消失

插入数据:

127.0.0.1:6379> linsert list2 after ccc 333

(integer) 3

127.0.0.1:6379> lrange list2 0 -1

1) "ddd"

2) "ccc"

3) "333"

#在“ccc”后面插入数据“333”

更改数据:

127.0.0.1:6379> lset list2 1 222

OK

127.0.0.1:6379> lrange list2 0 -1

1) "ddd"

2) "222"

3) "333"

查看某条数据:

127.0.0.1:6379> lindex list2 0

"ddd"

查看某列表中数据条数:

127.0.0.1:6379> llen list2

(integer) 3

#llen=list length

```

### Redis中关于集合的操作

```

在集合中添加数据:

127.0.0.1:6379> sadd set1 aaa bbb ccc

(integer) 3

查看集合汇总所有数据:

127.0.0.1:6379> SMEMBERS set1

1) "aaa"

2) "a"

3) "bbb"

4) "b"

5) "ccc"

删除指定素:

127.0.0.1:6379> srem set1 a b

(integer) 2

127.0.0.1:6379> SMEMBERS set1

1) "aaa"

2) "bbb"

3) "ccc"

随机取出两个元素:

127.0.0.1:6379> spop set1 2

1) "bbb"

2) "aaa"

127.0.0.1:6379> SMEMBERS set1

1) "ccc"

#spop set1后面不跟参数的话会随机取出一个值

注意:数据取出后,该数据将会在该集合中被删除

取差集:

127.0.0.1:6379> SMEMBERS set1

1) "aaa"

2) "mmm"

3) "ddd"

4) "bbb"

5) "ccc"

127.0.0.1:6379> SMEMBERS set2

1) "a"

2) "b"

3) "d"

4) "aaa"

5) "eee"

6) "ddd"

7) "ccc"

8) "bbb"

9) "fff"

127.0.0.1:6379> sdiff set1 set2

1) "mmm"

127.0.0.1:6379> sdiff set2 set1

1) "d"

2) "a"

3) "eee"

4) "b"

5) "fff"

注意:

取差集的规则--把哪个集合放在前面就以哪个集合为标准

即,只输出前面集合中不同元素

将差集存储到新的集合:

127.0.0.1:6379> sdiffstore set3 set2 set1 

(integer) 5

127.0.0.1:6379> SMEMBERS set3

1) "d"

2) "a"

3) "eee"

4) "b"

5) "fff"

#set3:存储位置;set2和set1为取差集的两个集合

取交集:

127.0.0.1:6379> sinter set1 set2

1) "aaa"

2) "ddd"

3) "bbb"

4) "ccc"

存储交集:

127.0.0.1:6379> sinterstore set4 set1 set2

(integer) 4

127.0.0.1:6379> SMEMBERS set4

1) "aaa"

2) "ccc"

3) "bbb"

4) "ddd"

#set4为存储位置

取并集:

127.0.0.1:6379> sunion set1 set2

 1) "eee"

 2) "ddd"

 3) "bbb"

 4) "ccc"

 5) "b"

 6) "aaa"

 7) "d"

 8) "mmm"

 9) "a"

10) "fff"

存储并集:

127.0.0.1:6379> sunionstore set5 set1 set2

(integer) 10

127.0.0.1:6379> SMEMBERS set5

 1) "eee"

 2) "ddd"

 3) "bbb"

 4) "ccc"

 5) "b"

 6) "aaa"

 7) "d"

 8) "mmm"

 9) "a"

10) "fff"

判断一个元素是否属于某集合:

127.0.0.1:6379> sismember set1 a

(integer) 0

127.0.0.1:6379> sismember set1 aaa

(integer) 1

从某集合随机取指定数量的元素,但不删除:

127.0.0.1:6379> srandmember set1 3

1) "ddd"

2) "bbb"

3) "ccc"

127.0.0.1:6379> SMEMBERS set1

1) "aaa"

2) "mmm"

3) "ddd"

4) "bbb"

5) "ccc"

```

### 有序集合

```

创建有序集合:

127.0.0.1:6379> zadd zseta 11 123

(integer) 1

127.0.0.1:6379> zadd zseta 5 456

(integer) 1

#“11”和“5”分别为元素“123”和“456”的score,系统根据score对元素进行排序

查看:

127.0.0.1:6379> zrange zseta 0 -1

1) "456"

2) "123"

删除指定元素:

127.0.0.1:6379> zrem zseta 123

(integer) 1

127.0.0.1:6379> zrange zseta 0 -1

1) "456"

查看元素:

127.0.0.1:6379> zrange zseta 0 -1

1) "aaa"

2) "bbb"

3) "456"

4) "ccc"

127.0.0.1:6379> zrange zseta 0 -1 withscores

1) "aaa"

2) "2"

3) "bbb"

4) "3"

5) "456"

6) "5"

7) "ccc"

8) "8"

#withscores:同时显示各元素对应的score

查看元素的索引值(即,第几个元素,从0开始计数):

127.0.0.1:6379> zrank zseta ccc

(integer) 3

同上,不同的是该索引值是按元素的score进行排序的:

127.0.0.1:6379> zrevrank zseta aaa

(integer) 3

127.0.0.1:6379> zrevrank zseta ccc

(integer) 0

反序显示所有元素:

127.0.0.1:6379> zrevrange zseta 0 -1

1) "ccc"

2) "456"

3) "bbb"

4) "aaa"

127.0.0.1:6379> zrevrange zseta 0 -1 withscores

1) "ccc"

2) "8"

3) "456"

4) "5"

5) "bbb"

6) "3"

7) "aaa"

8) "2"

查看集合中元素个数:

127.0.0.1:6379> zcard zseta

(integer) 4

查看某分值范围内的元素个数:

127.0.0.1:6379> zcount zseta 1 10

(integer) 4

127.0.0.1:6379> zcount zseta 1 5

查看某分值范围内的元素及分值:

127.0.0.1:6379> zrangebyscore zseta 1 5 

1) "aaa"

2) "bbb"

3) "456"

127.0.0.1:6379> zrangebyscore zseta 1 5 withscores

1) "aaa"

2) "2"

3) "bbb"

4) "3"

5) "456"

6) "5"

删除指定索引范围的元素:

127.0.0.1:6379> zrange zseta 0 -1

1) "aaa"

2) "bbb"

3) "456"

4) "ccc"

127.0.0.1:6379> zremrangebyrank zseta 0 1

(integer) 2

127.0.0.1:6379> zrange zseta 0 -1

1) "456"

2) "ccc"

删除指定分值范围内的元素:

127.0.0.1:6379> zremrangebyscore zseta 1 5

(integer) 1

127.0.0.1:6379> zrange zseta 0 -1

1) "ccc"

```

### hash类型数据的操作

```

添加数据:

127.0.0.1:6379> hset hseta a 1

(integer) 1

批量添加数据:

127.0.0.1:6379> hmset hseta b 2 c 3 d 4

OK

查看指定数据的值:

127.0.0.1:6379> hget hseta b

"2"

批量查看指定数据的值:

127.0.0.1:6379> hmget hseta b c

1) "2"

2) "3"

查看所有数据:

127.0.0.1:6379> HGETALL hseta

1) "a"

2) "1"

3) "b"

4) "2"

5) "c"

6) "3"

7) "d"

8) "4"

删除指定数据:

127.0.0.1:6379> hdel hseta b c

(integer) 2

127.0.0.1:6379> HGETALL hseta

1) "a"

2) "1"

3) "d"

4) "4"

打印所有的key:

127.0.0.1:6379> hkeys hseta

1) "a"

2) "d"

打印所有的value:

127.0.0.1:6379> hvals hseta

1) "1"

2) "4"

查看有几个filed:

127.0.0.1:6379> hlen hseta

(integer) 2

```

## 21.16 Redis操作--键值

```

查看数据库内所有key:

127.0.0.1:6379> keys *

 1) "hseta"

 2) "k3"

 3) "setb"

 4) "hash1"

 5) "zseta"

 6) "mykey"

 7) "set3"

 8) "key2"

 9) "set2"

10) "set4"

11) "key1"

12) "list2"

13) "k1"

14) "seta"

15) "list1"

16) "k2"

17) "set1"

18) "set5"

支持模糊匹配:

127.0.0.1:6379> keys set*

1) "setb"

2) "set3"

3) "set2"

4) "set4"

5) "seta"

6) "set1"

7) "set5"

查看某key是否存在:

127.0.0.1:6379> exists key1

(integer) 1

127.0.0.1:6379> exists key11

(integer) 0

#0:表示不存在;1:表示存在

删除key:

127.0.0.1:6379> del key1 

(integer) 1

127.0.0.1:6379> exists key1

(integer) 0

给已存在的key设置过期时间:

127.0.0.1:6379> EXPIRE key2 600

查看某key还有多长时间过期:

127.0.0.1:6379> ttl key2

(integer) 578

#当key已经不存在时,返回-2

#当key存在但是没有设置失效时间时,返回-1

选择数据库:

127.0.0.1:6379> select 0

OK

#Redis有16个库,0表示当前所在的库

将一个 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"

取消某个key的过期时间(persist):

127.0.0.1:6379> ttl key2

(integer) 221

127.0.0.1:6379> persist key2

(integer) 1

127.0.0.1:6379> ttl key2

(integer) -1

随机返回一个key:

127.0.0.1:6379> randomkey

"zseta"

127.0.0.1:6379> randomkey

"mykey"

重命名:

127.0.0.1:6379> rename set2 set22

OK

127.0.0.1:6379> smembers set2

(empty list or set)

127.0.0.1:6379> smembers set22

1) "d"

2) "b"

3) "eee"

查看key的类型:

127.0.0.1:6379> type key2

string

127.0.0.1:6379> type set22

set

127.0.0.1:6379> type zseta

zset

127.0.0.1:6379> type list2

list

127.0.0.1:6379> type hseta

hash

查看数据库找那个key的数目:

127.0.0.1:6379> DBSIZE

(integer) 17

查看数据库的状态信息:

127.0.0.1:6379> info

清空当前数据库内所有key:

127.0.0.1:6379> select 1

OK

127.0.0.1:6379[1]> keys *

1) "set22"

127.0.0.1:6379[1]> flushdb

OK

127.0.0.1:6379[1]> keys *

(empty list or set)

清空所有数据库内所有的key:

127.0.0.1:6379> flushall

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

127.0.0.1:6379> bgsav

同上,在前台运行:

127.0.0.1:6379> save

获取所有配置参数:

127.0.0.1:6379> config get *

查看指定参数:

127.0.0.1:6379> config get port

1) "port"

2) "6379"

设置某参数:

27.0.0.1:6379> config set timeout 100

```

### 数据恢复

首先定义或确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启Redis即可恢复数据。  

## 21.17 Redis安全设置

### 设置IP和端口:

```

设置监听的IP:

bind 127.0.0.1 2.2.2.2 

#监听指定IP可提高安全性,多个IP用空格分开

设置端口:

port 7000

#不使用Redis默认端口(6379)

```

### 设置密码:

```

[root@adailinux ~]# vim /etc/redis.conf

requirepass 123456

重启Redis:

[root@adailinux ~]# killall redis-server

[root@adailinux ~]# redis-server /etc/redis.conf 

登录:

[root@adailinux ~]# redis-cli -a '123456'

```

### 更改config的名字或禁掉config命令:

```

[root@adailinux ~]# vim /etc/redis.conf

rename-command CONFIG adai

#将“config”命令改为“adai”

rename-command CONFIG ""

即,把config的名字改为空

```

2017-10-12 09:05 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: