redis

redis

介绍redis

redis是以Key-Value形式将数据存储在内存中的缓存数据库,适合存储访问频繁,数据量小的数据

redis的特点

1.支持持久化:可以将内存中的数据持久化到硬盘当中
2.支持多种数据结构:不仅支持Key-Value,还支持String,hash,list,set,zset
3.支持数据备份:就是master-slave模式的数据备份
在这里插入图片描述

redis持久化策略

RDB策略:在一定时间内进行了指定次数的写操作,会自动将redis内存中的数据持久化到硬盘当中
RDB策略是redis默认的持久化策略
(默认是1分钟内改变一万次或者5分钟10次或者15分钟1次,缺点是没有触发条件就不会写操作,所以可能导致数据丢失)
AOF策略:是为了弥补RDB策略,通过日志记录每一次写的操作
(万一宕机了没有保存数据,可以通过日志进行重构)

--------------------------------------------
下载,编译,安装redis

官网下载redis==>点击跳转

redis一般是在linux系统上使用,将redis压缩包安装到linux系统上的步骤

将redis压缩包通过Xftp软件传输给linux系统的opt目录下的gz_package目录下,之后通过命令tar -zxvf redis… -C /opt,解压到opt目录下
redis解压后需要编译,进入redis目录下,输入命令make编译,最新版本redis已经安装了gcc的,如果报错gcc,原因是redis是用C语言写的,需要c语言的编译器,解决办法:在redis目录下输入命令yum -y install gcc,安装C语言gcc编译器,再次编译之前,需要将第一次编译的不完整的目录文件清空,执行命令make distclean,清空
编译完成后,在redis目录下执行命令make install,安装redis
安装完成,会自动将redis的命令复制到/usr/local/bin目录下,可以在任意目录下执行redis相关命令

----------------------------------------------
启动,关闭redis

启动redis,必须在redis目录下输入命令

启动redis,输入命令redis-server &,后台启动(推荐,注意redis-server是连着的),不加&是前台启动
redis默认端口是6379,启动redis成功!
如果修改了redis的配置文件,想要配置生效,在启动redis时需要指定配置文件,否则配置无效,进入redis目录,打开redis.conf,比如修改redis默认的端口号6379,然后保存退出,输入命令redis-server redis.conf &,指定配置文件启动redis成功!

关闭redis

方法一:
先查看redis的端口号(pid),输入命令ps -ef|grep redis
在通过命令kill -9 端口号,杀死进程
方法二:
通过命令redis-cli shutdown,关闭redis

------------------------------------------
redis的客户端:
连接redis,向redis发送命令并显示结果,redis-cli是redis自带的客户端,使用命令redis-cli就可以启动redis的客户端程序

redis客户端,相当于mysql:./mysql -uroot -proot

启动redis客户端有三种形式:

redis-cli:默认连接127.0.0.1:6379上的redis
redis-cli -p 端口号:连接127.0.0.1:端口号上的redis,指定端口号
redis-cli -h ip地址 -p 端口号:连接指定ip主机上的指定端口号的redis

退出客户端

输入命令exit或者quit

-------------------------------
redis的常用命令

测试redis的性能

redis-benchmark

查看redis服务是否正常运行

ping,如果正常,出现pong

查看redis的统计信息

info
查看redis指定的统计信息
info 信息段,比如info Replication

redis的数据库实例(就是数据库),redis的数据库只能由redis创建和维护,开发者不能修改和创建数据库,redis默认创建16个数据库,通过0-15编号来使用数据库,可以通过配置文件指定redis自动创建数据库的个数,默认情况下连接的是0编号的数据库

select index,切换编号数据库,比如select 15
dbsize,查看当前编号数据库key的总数
keys *,查看当前编号数据库所有的key
flushdb,清空当前编号数据库所有的key-value数据
flushall,清空所有编号数据库的key-value数据
config get *,查看redis中所有的配置信息
config get port,查看redis指定的port端口号配置信息

--------------redis中有关key的命令-----------------

查看数据库中的key

keys * ,查看数据库中所有的key
keys x*,查看以x开头的所有key
keys h*o,查看以h开头,以o结尾的key
keys h?o,查看以h开头,以o结尾,中间有一个字符的key
keys h[abce]llo,查看以h开头,以llo结尾,中间字符在abce其中一个的key
*匹配0个或多个字符,?匹配一个字符,[]匹配[]里面的一个字符

判断key在数据库中是否存在,存在返回1,不存在返回0

exists key
exists key1 key2 …,返回值是存在的key的数量

移动指定的key到指定的数据库实例

move key index,比如move key1 1

查看指定key的存在时间,单位是秒,如果没有设置时间返回-1,如果key不存在返回-2

ttl key,比如ttl key1

设置key的最大存在时间,单位是秒

expire key time,比如expire key1 20

查看指定key的数据类型

type key,比如type key1

重命名key

rename key newkey,比如rename key1 key2,将key1名改成key2

删除指定的key,返回值是实例删除的key数量

del key1 key2 …

-----------------redis中有关string类型数据的命令--------------------

将string类型的数据设置到redis中,如果key已存在,则覆盖value

set name zhangsan

从redis中获取string类型的数据

get name

追加字符串,返回追加之后的字符串长度,如果key不存在,会创建key-value,相当于set

append key1 value1

获取字符串数据的长度

strlen key1

将字符串数值进行加1运算,返回+1之后的数据,如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算,要求key对应的value必须是数值,否则报错

incr key1

将字符串数值进行减一运算,返回-1之后的数据,如果key不存在,首先设置一个key,值初始化为0,然后进行decr运算,要求key对应的value必须是数值,否则报错

decr key1

将字符串数据进行加N运算,返回加N之后的数据,如果key不存在,首先设置key,值初始化0,然后进行incrby运算,要求key的value必须是数值,否则报错

decrby age 8

闭区间获取字符串key从startIndex到endIndex的字符串组成的子字符串,下标从左到右,第一位下标为0,最后一位下标是-1,顺着是1,2,3…,倒着是-1,-2,-3…

getrange key1 0 -1,获取整个字符串

用value覆盖从下标为startIndex开始的字符串,能覆盖几个字符就几个字符

setrange key1 5 lisi,
覆盖字符串下标为5开始,覆盖成lisi,如果lisi的长度大于5后面的长度,就相当于拼接lisi,如果lisi的长度小于5后面的长度,只是覆盖5后面的4个字符,然后加上9下标开始的后面字符

设置字符串的同时,设置它的最大生命周期

setnx key1 20 value1

设置string类型的数据value到redis数据库中,当key不存在时设置成功,否则放弃设置,如果已经有了age,就放弃设置

setnx age 18

批量将string类型的数据设置到redis,如果key存在,就覆盖

mset key1 value1 key2 value2 … …

批量从redis中获取string类型的数据

mget key1 key2 …

批量设置string类型的数据value到redis数据库中,当所有的key都不存在时设置成功,只要有一个key已经存在,就放弃全部设置

msetnx key1 value1 key2 value2 … …

--------------------redis中有关list类型数据的操作命令---------------------
list类型:单key-多有序value,一个key对应多个value,多个value之间有顺序,最左侧是表头,最右侧是表尾,表头下标是0,表尾下标是-1

将一个或者多个值依次插入到列表的表头

lpush list01 1 2 3,结果:3 2 1

获取指定list列表中指定下标区间的元素

lrange list01 0 -1,结果:3 2 1

将一个或者多个值依次插入到列表的表尾

rpush list02 a b c,结果a b c

从指定列表中移除并且返回表头元素

lpop list02

从指定列表中移除并且返回尾元素

rpop list02

获取指定列表中指定下标的元素

lindex list01 2,结果3

获取指定列表的长度

llen list01

根据count值移除指定列表中跟value相等的数据,count>0从左侧移除一个跟value相等的数据,count<0从右侧,count等于0移除整个列表跟value相等的数据

lrem key count value,比如lrem list01 1 a,lrem list01 -1 a,lrem list01 0 a

截取指定列表中指定下标区间的元素组成新的列表,并且赋值给key

ltrim key startIndex enIndex,比如ltrim list01 0 -1

将指定列表中指定下标的元素设置为指定值

lset key index value,比如lset list01 1 10

将value插入到指定列表中位于pivot元素之前/之后的位置

linsert key before/after pivot value,比如linsert list01 before 10 50,linsert list01 after 10 60

-------------------set类型的操作命令-------------------
单key-多无序value,一个key对应多个value,value之间没有顺序,并且不能重复

将一个或者多个元素添加到指定的集合中,如果元素已经存在则会忽略,添加成功则返回元素的个数

sadd key value1 value2 …,比如sadd set01 a b c a,结果a b c

获取指定集合中所有的元素

smembers key,比如smembers set01

判断指定元素在指定集合中是否存在,存在返回1,不存在返回0

sismember key member,比如sismember set01 a

获取指定集合的长度

scard key,比如scard set01

移除指定集合中一个或者多个元素,不存在的元素则忽略,删除成功则返回个数

srem key member1 member2 …,比如srem set01 a b …

随机获取指定集合中的一个或多个元素,count>0随机获取的多个元素之间不能重复,count<0随机获取的多个元素之间可能重复

srandmember key count,比如srandmember set01 1,或者srandmember set01 -1

从指定集合中随机移除或者多个元素

spop key count,比如spop set01

将指定集合中的指定元素移动到另一个元素

smove source dest membe,比如smove set01 set02 a

获取第一个集合中有,但是其他集合中都没有的元素组成的新集合

sdiff key1 key2 …,比如sdiff set01 set02 …

获取所有指定集合中都有的元素组成的新集合

sinter key01 key02 …,比如sinter set01 set02 …

获取所有指定集合中所有元素组成的大集合

sunion key1 key2 …,比如sunion set01 set02 …

----------------redis中有关hash类型的操作命令------------------
单key:field-value,field-vaue,… studentzs:id-1001,name-zhangsan,…

将一个或者多个field-value设置到哈希表中

hset key field01 value01 field02 value02 … …,比如hset name zhangsan age 18

获取指定hash表中指定field的值

hget key field,比如hget hash01 id

批量将多个field-value对设置到哈希表中

hmset key filed1 value1 field2 value2 … …,比如hmset hash01 id 1001 name zhangsan age 18

批量获取指定哈希表中的field的值

hmget key field1 field2 …,比如hmget hash01 id name age

获取指定哈希表中所有的field和value

hgetall key,比如hgetall hash01

从指定哈希表中删除一个或者多个field

hdel key field1 field2 …,比如hdel hash01 name age

获取指定hash表中所有的field个数

hlen key,比如hlen hash01

判断指定哈希表中是否存在某一个field

hexists key field,比如hexists hash01 name

获取指定哈希表中所有的field列表

hkeys key,比如hkeys hash01

获取指定哈希表中所有的value列表

hvals key,比如hvals hash01

对指定哈希表中指定field值进行整数加法运算

hincrby key field int,比如hincrby hash01 age 5

对指定哈希表中指定field值进行浮点数加法运算

hincrbyfloat key field float,比如hincrbyfloat hash01 score 8.8

将一个field-value对设置到哈希表中,当key-field已经存在时则放弃设置

hsetnx key field value,比如hsetnx hash01 age 18

----------------------------redis中有关zset类型的操作命令------------------------
有序集合有下标,元素不能重复,每一个元素都关联一个分数,redis会根据分数对元素进行自动排序,分数可以重复

将一个或者多个member及其score值加入有序集合,如果元素已存在则把分数覆盖

zadd key scoe01 member01 score02 member02 … …,比如zadd zset01 20 z1 30 z2

获取指定有序集合中指定下标区间的元素

zrange key startIndex endIndex [withscores],比如zrange zset01 0 -1,或者zrange zset01 0 -1 withscores

获取指定有序集合中指定分数区间(闭区间)的元素

zrangebyscore key min max [withscores],比如zrangebyscore zset01 30 50 withscores

删除指定有序集合中一个或者多个元素

zrem key member1 member2 …,比如zrem zset01 z3 z4

获取指定有序集合中所有元素的个数

zcard key,比如zcard zset01

获取指定有序集合中分数在指定区间内的元素的个数

zcount key min max,比如zcount zset01 20 50

获取指定有序集合中指定元素的排名(排名从0开始)

zrank key member,比如zrank zset01 z4

获取指定有序集合中指定元素的分数

zscore key member,比如zscore zset01 z4

获取指定有序集合中指定元素的排名(按照分数从大到小的排名)

zrevrank key member,比如zrevrank zset01 z4

----------------------redis配置文件中关于网络的配置--------------------------

指定redis的端口,默认为6379

port

配置redis的ip地址

bind

如果配置了port和bind,连接redis时必须指定端口和ip

redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6380 shutdown

连接保活策略

tcp-keepaive

常规配置

loglevel:配置日志级别,开发阶段配置debug,上线阶段配置notice或者warning
logfile:指定日志文件,redis在运行过程中,会输出一些日志信息,默认情况下,这些日志信息会输出到控制台,我们可以使用logfile配置日志文件,使redis把日志信息输出到指定文件中
databases:配置redis服务默认创建的数据库实例个数,默认值是16

安全配置

requirepass:设置访问redis服务时所使用的密码,默认不使用,此参数必须在protected-mode=yes时才起作用,一旦设置了密码验证,客户端连接redis时,必须使用密码连接:redis-cli -h ip -p port -a pwd

----------------redis的事务--------------------------------

开启事务,将命令加入队列

multi
set key1 value1
set key2 value2

执行事务队列中所有的命令

exec

如果一组命令中,在加入队列中命令发生错误,那么队列中所有的命令都不执行

multi
set k1 v1
seta k2 v2
set k3 v3
exec
最终全部命令都执行失败

如果一组命令中,在加入队列中命令正常,但是在执行命令过程中发生了错误,则只会影响发生错误的命令,不会影响其他的命令

multi
set k1 v1
incr k3
set k2 v2
exec
最终incr k3执行失败,1,2正常执行

清除队列中所有的命令,并且结束整个事务:discard

multi
set k1 v1
set k2 v2
discard

监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本次事务放弃执行:watch

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值