78.redis操做命令 安全设置

21.13/21.14/21.15 redis经常使用操做php

21.16 redis操做键值、服务linux

21.17 redis安全设置redis

 

 

 

 

21.13/21.14/21.15 redis经常使用操做数据库

 

 

1.Redis经常使用操做 stringvim

set key1 aminglinux安全

get key1app

set key1 aming//第二次赋值会覆盖dom

setnx key2 aaa //返回1 若是key2不存在直接建立keyui

setnx key2 bbb //返回0,若是key2存在,返回0加密

setex key3 10 1 //给key3设置过时时间为10s,值为1,若key已经存在,会覆盖新的值

mset k1 1 k2 a k3 c #同时写多个

mget k1 k3 k2 #同时查看多个

2.Redis经常使用操做 list

lpush lista a //从左侧加入一个元素,左侧就是最上面。l表明左(最上面)

lpush lista b

lrange lista 0 -1

lpop lista //从左侧取出第一个元素。

rpush lista 1 //从右侧加入一个元素 。r表明右(最下面)

rpop lista //从右侧取出第一个元素。不管是lpop仍是rpop,取出来的值就不存在了

linsert  lista  before  2 3  //在2的前面插入一个元素为3。此处的2表示第二个元素的值

linsert lista after 2 3 #在2的后面插入一个元素为3。此处的2表示第二个元素的值

lset lista 4 bbb  //把第5个元素修改成bbb 此处的4表示第5个元素(0也算一个数字)

lindex lista 0  //查看第1个元素

lindex lista 3  //查看第4个元素

llen lista  //查看链表中有几个元素

3.Redis经常使用操做 set

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

sismember seta aaa  //判断一个元素是否在这个集合里,有返回1,没有返回0

srandmember  seta //随机取出一个元素,但不删除。后面还能够加数字,就是取几个元素,一样不删除。与spop的区别

4.Redis经常使用操做 sort set

zadd zseta 11 123 //建立有序集合,11是他的score

zrange zseta 0 -1 //显示全部元素,按顺序显示

zrange zseta 0 -1 withscores //能够带上分值

zrem zseta 222 //删除指定元素

zrank zseta 222 //返回元素的索引值,索引值从0开始,按score正向排序。也就是查看222这个元素的下标(就是第几个)

zrevrank zseta 222 //同上,不一样的是,按score反序排序。也就是倒着数222这个元素为第几个

zrevrange zseta 0 -1 反序显示全部元素,并带分值

zcard zseta //返回集合中全部元素的个数

zcount zseta 1 10 // 返回分值范围1-10的元素个数

zrangebyscore zseta 1 10 // 返回分值范围1-10的元素

zremrangebyrank zseta 0 2 //删除索引范围0-2的元素,按score正向排序。索引的范围就是下标

zremrangebyscore zseta 1 10 //删除分值范围1-10的元素

5.Redis经常使用操做(hash) 

hset user1  name aming  //创建hash

hset user1 age 30

hset user1 job  it

hgetall user1 #查看user1的信息

hmset user2  name aming age 30  job it    //批量创建键值对

hmget user2 name age  job

hdel user2 job   //删除指定filed

hkeys user2  //打印全部的key。也就是查看

hvals user2 //打印全部的values

hlen user2  //查看hash有几个filed。也就是有几个键

 

 

 

 

实例:

1.string

127.0.0.1:6379> set key1 axin #set key1的值

OK

127.0.0.1:6379> set key2 linux #set key2的值

OK

127.0.0.1:6379> set key1 axinlinux #再次set key1就会覆盖

OK

127.0.0.1:6379> get key1

"axinlinux"

127.0.0.1:6379> setnx key1 aaa #setnx key1(已有的值),不会覆盖,会返回数字0

(integer) 0

127.0.0.1:6379> setnx key10 aaa #setnx key10(没有的值),会建立,会返回数字1

(integer) 1

127.0.0.1:6379> get key10

"aaa"

127.0.0.1:6379> set key3 aaa ex 10 #正常写set的时候,后面要加ex,就是设置他的过时时间

OK

127.0.0.1:6379> get key3 #10秒之后再get就没有了

(nil)

127.0.0.1:6379> setex key3 1000 bbb #setex key3 先跟的是过时时间,而后是value

OK

127.0.0.1:6379> get key3

"bbb"

2.list

127.0.0.1:6379> lpush list2 bbb #lpush list2 的value为bbb

(integer) 1

127.0.0.1:6379> lpush list2 ccc #再lpush一个value

(integer) 2

127.0.0.1:6379> LRANGE list2 0 -1 #lange查看list2

1) "ccc"

2) "bbb"

127.0.0.1:6379> lpop list2 #lpop list2,从最上面取一个value

"ccc"

127.0.0.1:6379> lrange list2 0 -1 #lrange list2 ,只剩下那个旧的value了

1) "bbb"

127.0.0.1:6379> rpush list2 axin1 #rpush list2 一个value为axin1。也就是从最下面写进去

(integer) 2

127.0.0.1:6379> rpush list2 axin2 #再rpush

(integer) 3

127.0.0.1:6379> LRANGE list2 0 -1 #lrange一下list2

1) "bbb"

2) "axin1"

3) "axin2"

127.0.0.1:6379> rpop list2 #而后咱们再rpop list2.也就是在最下面取出一个value

"axin2"

127.0.0.1:6379> LRANGE list2 0 -1 #lrange list2,发现最下面的value被取走了

1) "bbb"

2) "axin1"

127.0.0.1:6379> linsert list2 before axin1 axin0 #linsert list2 axin1这个元素前面插入axin0.

(integer) 3

127.0.0.1:6379> lrange list2 0 -1

1) "bbb"

2) "axin0"

3) "axin1"

127.0.0.1:6379> linsert list2 after axin1 axin2 #在axin1这个元素后面插入一个元素为axin2

(integer) 4

127.0.0.1:6379> lrange list2 0 -1

1) "bbb"

2) "axin0"

3) "axin1"

4) "axin2"

127.0.0.1:6379> lset list2 0 bbb #把第0个元素的值改成bbb。0表示第1个

OK

127.0.0.1:6379> lrange list2 0 -1

1) "bbb"

2) "linux"

3) "axin1"

4) "axin2"

127.0.0.1:6379> lindex list2 0 #查看第一个元素的值

"bbb"

127.0.0.1:6379> llen list2 #查看list2里面有几个元素

(integer) 4

3.set

127.0.0.1:6379> sadd set1 aaa #sadd放入一个元素

(integer) 1

1) "c"

2) "d"

3) "aaa"

4) "ccc"

5) "b"

6) "a"

7) "bbb"

127.0.0.1:6379> srem set1 aaa #删除元素aaa

(integer) 1

127.0.0.1:6379> spop set1 #随机取出一个元素

"d"

127.0.0.1:6379> SMEMBERS set2

1) "1"

2) "ccc"

3) "b"

4) "a"

5) "2"

6) "bbb"

127.0.0.1:6379> smembers set1

1) "ccc"

2) "b"

3) "a"

4) "c"

5) "bbb"

127.0.0.1:6379> SDIFF set2 set1 #adiff求差集。set2在前面,因此set2做为比较的对象

1) "1"

2) "2"

4.sort set

127.0.0.1:6379> zadd zseta 0 1ab #写入一个score为0 值为1ab的元素

(integer) 1

127.0.0.1:6379> zrange zseta 0 -1 #查看zseta这个有序集合

1) "1ab"

127.0.0.1:6379> zrem zseta 1ab #删除1ab这个元素

(integer) 1

127.0.0.1:6379> zrange zeta 0 -1 #再次查看就是空的

(empty list or set)

127.0.0.1:6379> zrank zseta 123 #正序查看123这个元素是第几个(下标)

(integer) 0

127.0.0.1:6379> zrevrank zseta 123 #倒序查看123这个元素是第几个(下标)

(integer) 4

127.0.0.1:6379> zrevrange zseta 0 -1 #倒序查看zseta集合

1) "fasf"

2) "2143safdas"

3) "2134353"

4) "fasfas"

5) "123"

127.0.0.1:6379> zcard zseta #查看zseta集合有几个元素

(integer) 5

127.0.0.1:6379> zcount zseta 50 1000 #查看50-1000 score值的个数

(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE zseta 10 19 #查看score值10-19的元素

1) "123"

2) "fasfas"

3) "2134353"

127.0.0.1:6379> zadd seta 12 asfasfasfas #写入几个元素,为下面的zremrangebyrank和zremrangebyscore作区分

(integer) 1

127.0.0.1:6379> zadd seta 22 123asfasfasfas

(integer) 1

127.0.0.1:6379> zadd seta 32 123asfass

(integer) 1

127.0.0.1:6379> zadd seta 82 123asfas123s

(integer) 1

127.0.0.1:6379> zadd seta 102 123as123s

(integer) 1

127.0.0.1:6379> zrange seta 0 -1

1) "asfasfasfas"

2) "123asfasfasfas"

3) "123asfass"

4) "123asfas123s"

5) "123as123s"

127.0.0.1:6379> zremrangebyrank seta 0 1 #删除0-1(分值,也就是下标,第几个的个数)

(integer) 2

127.0.0.1:6379> zrange seta 0 -1

1) "123asfass"

2) "123asfas123s"

3) "123as123s"

127.0.0.1:6379> zremrangebyscore seta 30 80 #删除30-80(score值)

(integer) 1

127.0.0.1:6379> zrange seta 0 -1

1) "123asfas123s"

2) "123as123s"

5.hash

127.0.0.1:6379> hmset hash2 a 1 b 2 c 3 d 4 #分别指定他的key和value的值,来建立

OK

127.0.0.1:6379> hgetall hash2 #查看hash2的key和value

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 #查看b和c的value

1) "2"

2) "3"

127.0.0.1:6379> hdel hash2 b #删除b

(integer) 1

127.0.0.1:6379> hkeys hash2 #查看全部的key

1) "a"

2) "c"

3) "d"

127.0.0.1:6379> HVALS hash2 #查看全部的value

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> hlen hash2 #查看hash2里面有几个

(integer) 3

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

21.16 redis操做键值、服务

 

 

 

1.Redis经常使用操做(键值) 

1.keys * //取出全部key

2.keys my* //模糊匹配

3.exists name //有name键 返回1 ,不然返回0;也就是查看key是否存在

4.del key1 // 删除一个key //成功返回1 ,不然返回0;

5.EXPIRE key1 100 //设置key1 100s后过时

6.ttl key // 查看键 还有多长时间过时,单位是s,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 不然,返回 key 的剩余生存时间。

7.select 0 //表明选择当前数据库,默认进入0 数据库。为1时,就进入1库

redis.conf配置文件时,有讲到redis有16个库,默认是0库

8.move age 1 // 把age 移动到1 数据库

9.persist key1 //取消key1的过时时间。会返回-1

10.randomkey //随机返回一个key

11.rename oldname newname //重命名key

12.type key1 //返回键的类型。五种数据类型,查看是哪种

 

2.Redis经常使用操做(服务) 

1.dbsize  //返回当前数据库中key的数目

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

3.flushdb //清空当前数据库中全部的键

4.flushall    //清空全部数据库中的全部的key

5.bgsave //保存数据到 rdb文件中,在后台运行。(bg为到后台的意思,save为保存的意思,在redis.conf中save那三行也表明了rdb。除了知足那三种条件,也能够这样手动的让他去保存。能够这样来理解)

6.save //做用同上,可是在前台运行。也就是当前窗口下运行

7.config get * //获取全部配置参数。就是配置文件里配置的东西

8.config get dir //获取配置参数

9.config set dir //更改配置参数

10.数据恢复: 首先定义或者肯定dir目录和dbfilename(能够config get看一下),实例中有详解以及坑

实例:

1.

127.0.0.1:6379> KEYS * #取出全部的键

1) "seta"

2) "key10"

3) "key2"

4) "key1"

5) "list2"

6) "list1"

7) "set1"

8) "set2"

9) "hash2"

10) "hash1"

11) "zseta"

12) "mykey"

13) "set3"

127.0.0.1:6379> KEYS k* #全部的k开头的,模糊搜索

1) "key10"

2) "key2"

3) "key1"

127.0.0.1:6379> exists key1 #查看key1是否存在

(integer) 1 #存在返回1

127.0.0.1:6379> exists key11

(integer) 0 #不存在返回0

127.0.0.1:6379> del key1 #删除key1

(integer) 1

127.0.0.1:6379> get key1 #再次查看key1,就没有了

(nil)

127.0.0.1:6379> EXPIRE key2 10 #给key2设置过时时间10秒

(integer) 1 #一样成功返回1

127.0.0.1:6379> get key2 #10秒后查看,就不存在了

(nil)

127.0.0.1:6379> EXPIRE key111 10 #咱们给一个不存在的key111设置过时时间,会发现返回0,也就是说他不会给不存在的key设置过时时间

(integer) 0

127.0.0.1:6379> get key111 #咱们查看就会没有

(nil)

127.0.0.1:6379> EXPIRE key10 15 #给key10设置15秒过时时间

(integer) 1

127.0.0.1:6379> ttl key10 #查看key10的过时时间

(integer) 8

127.0.0.1:6379> ttl key10 #ttl查看时返回-2,就表明已通过期

(integer) -2

127.0.0.1:6379> SELECT 1 #先进入1库

OK

127.0.0.1:6379[1]> keys * #查看key,就会没有key。由于咱们没有往1库里写东西

(empty list or set)

127.0.0.1:6379[1]> SELECT 0 #咱们再进入0库

OK

127.0.0.1:6379> keys * #就会出现咱们以前写的key

1) "seta"

2) "list2"

3) "list1"

4) "set1"

5) "set2"

6) "hash2"

7) "hash1"

8) "zseta"

9) "mykey"

10) "set3"

127.0.0.1:6379> move set2 1 #把set2启动到1库里

(integer) 1

127.0.0.1:6379> SELECT 1 #进入1库

OK

127.0.0.1:6379[1]> keys * #查看一下,就会有这个set2

1) "set2"

127.0.0.1:6379> EXPIRE mykey 1000 #先给mykey社会自一个过时时间

(integer) 1

127.0.0.1:6379> ttl mykey #ttl一下

(integer) 992

127.0.0.1:6379> PERSIST mykey #而后再取消他的过时时间

(integer) 1

127.0.0.1:6379> ttl mykey #再次ttl一下。会发现返回-1.-1就是没有过时时间

(integer) -1

127.0.0.1:6379> type zseta #查看zseta的数据类型

zset

127.0.0.1:6379> type mykey

string

127.0.0.1:6379> type list2

list

2.

127.0.0.1:6379> DBSIZE #当前库中的key的数目

(integer) 9

127.0.0.1:6379> info [section] #info后面也能够查看他的具体项,好比cpu相关的

127.0.0.1:6379> SELECT 1 #咱们先选择1库

OK

127.0.0.1:6379[1]> keys * #查看一下,有以前的那个set2

1) "set2"

127.0.0.1:6379[1]> FLUSHDB #flushdb一下,清空当前的库

OK

127.0.0.1:6379[1]> keys * #再次查看就没有了

(empty list or set)

127.0.0.1:6379[1]> FLUSHALL #flushall为清空全部库中的key

127.0.0.1:6379[1]> bgsave #后台将数保存到rdb文件中(/data/reids/dump.rdb配置文件中指定的路径),速度的快慢取决于你文件的大小

Background saving started

127.0.0.1:6379> config get * #共有168行,其实就是84项,奇数为配置项,偶数为配置内容。就是配置文件里配置的。

127.0.0.1:6379> config get bind #也能够指定查看意向配置内容,好比bind

1) "bind"

2) "127.0.0.1"

127.0.0.1:6379> config get dir #好比dir

1) "dir"

2) "/data/redis"

127.0.0.1:6379> config set timeout 100 #也支持config set,更改配置项。好比讲timeout改为100

OK

127.0.0.1:6379> config get timeout #再次查看timeout就是100了

timeout指的是设置客户端链接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该链接

1) "timeout"

2) "100"

10.如下数据恢复(rdb):

127.0.0.1:6379> keys * #先查看一下要恢复以前的数据

1) "key2"

2) "key3"

3) "key1"

127.0.0.1:6379> config get dir #要看一下dir的路径,由于等会save的时候会把备份文件存到这个路径下

1) "dir"

2) "/data/redis"

127.0.0.1:6379> config get dbfilename #备份文件的名字也要看一下

1) "dbfilename"

2) "dump.rdb"

 

127.0.0.1:6379> save #而后save保存.rdb文件

OK

127.0.0.1:6379> quit #退出redis

[root@axinlinux-01 redis-4.0.1]# cd /data/redis/ #cd到dir路径下,看一下有没有这个dump.rdb文件

[root@axinlinux-01 redis]# ls

appendonly.aof dump.rdb

[root@axinlinux-01 redis]# cd /tmp/ #cd到tmp下来,把dump.rdb备份文件先拷贝到tmp下来。由于咱们等下作实验执行flushall的时候,他会把这个备份文件也给清空掉。因此要提早拷贝走

[root@axinlinux-01 tmp]# cp /data/redis/dump.rdb ./

[root@axinlinux-01 tmp]# ls

dump.rdb systemd-private-62ddbfad8a1c4de29c4f34e73330fea8-chronyd.service-dAZNvV

php-fcgi.sock systemd-private-62ddbfad8a1c4de29c4f34e73330fea8-vgauthd.service-wL8DBk

sess_6p44behpfdiaaqhehrvrhfede1 systemd-private-62ddbfad8a1c4de29c4f34e73330fea8-vmtoolsd.service-BYddey

[root@axinlinux-01 redis]# redis-cli

127.0.0.1:6379> FLUSHALL #而后这个时候咱们再flushall

OK

127.0.0.1:6379> keys * #查看一下,数据已被清空

(empty list or set)

127.0.0.1:6379> quit

[root@axinlinux-01 redis]# killall redis-server #咱们用killall这个命令来关闭redis

[root@axinlinux-01 redis]# ps aux |grep redis #看一下是否被关闭

root 3487 0.0 0.0 112720 980 pts/0 R+ 23:04 0:00 grep --color=auto redis

[root@axinlinux-01 redis]# rm -rf dump.rdb #把原先的dump.rdb文件删掉。由于咱们以前执行了flushall,这个备份文件也一样被执行了

[root@axinlinux-01 redis]# ls

appendonly.aof

[root@axinlinux-01 redis]# cp /tmp/dump.rdb ./ #而后把flushall以前的备份文件拷贝过来

[root@axinlinux-01 redis]# ls

appendonly.aof dump.rdb

[root@axinlinux-01 redis]# redis-server /etc/redis.conf #而后再启动redis

[root@axinlinux-01 redis]# ps aux |grep redis

root 3547 2.0 0.4 145296 7572 ? Ssl 23:05 0:00 redis-server 127.0.0.1:6379

root 3561 0.0 0.0 112720 980 pts/0 S+ 23:05 0:00 grep --color=auto redis

[root@axinlinux-01 redis]# redis-cli #而后进入redis,查看是否已经恢复

127.0.0.1:6379> keys *

1) "key1"

2) "key3"

3) "key2"

总结数据恢复(rdb)

恢复以前要先确认dir路径以及备份文件的名字。而后再save。以后要在清空数据以前把save以后的.rdb文件拷贝到tmp下。而后再执行flushall命令,不然flushall命令会把.rdb备份文件的数据清空掉,那这样备份就没有意义了。而后killall掉redis-server,把原先的.rdb文件删掉,再把tmp下备份的.rdb文件拷贝过来。重启redis就能够了

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

21.17 redis安全设置

 

 

如下的操做都是在/etc/redis.conf配置文件里,配置的。若是担忧有人查看conf配置文件,能够限定文件或目录的权限

1.设置监听ip

bind 127.0.0.1 2.2.2.2//能够是多个ip,用空格分隔

能够设置成监听内网IP

2.设置监听端口

port 16000

将默认6379端口能够改成16000(随便其余不被占用的有效端口)

3.设置密码

requirepass aming>com #加入这一行

redis-cli -a 'aming>com' #登陆的时候加-a '密码'登陆,由于密码中含有>,因此要用单引号

4.将config命令更名

rename-command CONFIG aming #aming表明要把config替换成的命令

/etc/redis.conf配置文件里,搜索 rename-command,加到下面这一行就能够了

5.禁掉config命令

rename-command CONFIG “” #双引号内为空就能够了

/etc/redis.conf配置文件里,搜索 rename-command

 

 

实例:

3.

[root@axinlinux-01 redis]# vim /etc/redis.conf #修改配置文件。把这一行加入进去

requirepass aming>com #加在哪均可以,好比加在最后面

[root@axinlinux-01 redis]# killall redis-server #killall掉redis,再重启。由于是编译安装的,只能先killall掉

[root@axinlinux-01 redis]# redis-server /etc/redis.conf #再启动

[root@axinlinux-01 redis]# redis-cli #咱们不加密码登陆试一下

127.0.0.1:6379> keys * #也能登陆,可是执行不了命令

(error) NOAUTH Authentication required.

127.0.0.1:6379> quit

[root@axinlinux-01 redis]# redis-cli -a 'aming>com' #而后再-a加密码启动

127.0.0.1:6379> keys * #就能够执行了

1) "key2"

2) "key3"

3) "key1"

相关文章
相关标签/搜索