赞
踩
是完全开源的,使用C语言编写的,遵守BSD协议,是一个高性能的(key-value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库
中文网站:http://www.redis.cn/download.html
英文网站:https://redis.io/download
下载、解压、编译Redis
$ wget http://download.redis.io/releases/redis-6.0.6.tar.gz
$ tar xzf redis-6.0.6.tar.gz
$ cd redis-6.0.6
$ make
由于可能系统上没有 gcc 在make这一步时就会报错
使用yum install gcc-c++
安装 gcc,完成后使用gcc -v
出现版本号查看版本号需要5.3以上,否则
#升级到 5.3及以上版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
#注意:scl命令启用只是临时的,退出xshell或者重启就会恢复到原来的gcc版本。
#如果要长期生效的话,执行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
先 使用make distclean
命令清除上次make失败的文件和目录,再次make安装完成
进入redis的src文件夹下cd /opt/environment/redis-6.0.6/src/
使用./redis-server
指令启动redis
./redis-server &
指令按回车即可由于 redis 默认并不会加载自己的配置文件,所以当我们对配置文件进行了修改时,每次启动则需要带上配置文件的地址
./redis-server redis.conf &
启动服务/opt/environment/redis-6.0.6/src/redis-server /opt/environment/redis-6.0.6/redis.conf &
使用redis客户端关闭,向服务器发出关闭指令
切换到redis-6.0.6/src/目录,执行./redis-cli shutdown
进行关闭
推荐使用这种方式,redis先完成数据操作,然后再关闭
方式二:使用进程关闭命令
kill <pid>
或者kill -9 <pid>
强行关闭redis-cli 是Redis 自带的基于命令行的Redis 客户端,用于与服务端交互,我们可以使用该客户端来执行redis的各种命令
方式一:
./redis-cli
命令
方式二:
./redis-cli -h <ip地址> -p <端口号>
使用前提:
在防火墙中配置 6379端口,对这个端口放行
firewall-cmd --zone=public --add-port=6379/tcp --permanent
systemctl restart firewall.service
远程连接redis需要修改redis主目录下的redis.conf配置文件
bind ip 绑定ip此行注释
protected-mode yes 保护模式改为no
先使用cp redis.conf bak_redis.conf
命令将redis.conf 配置文件备份
使用vim redis.conf
命令进入配置文件修改如下图两处位置
重新启动redis 并指定配置文件;进入redis的src/目录下使用./redis-server ../redis.conf &
使用远程客户端进行连接
因为我们redis还没有设置密码,所以上图 Auth 不用填写直接连接
当操作数据库时,出现如下图,是因为redis 默认设置了定时将数据存储到磁盘中,以免数据丢失
ping
:沟通命令,查看状态
dbsize
:返回当前数据库的key的数量
select <库索引>
命令先指定库再进行查看redis默认使用16个库,索引从0到15,对数据库的个数的修改,在redis.conf文件中
databases 16
可以直接进行修改
flushdb
:删除当前数据库quit
and exit
:都可以退出redis客户端keys [pattern]
:查找所有符合模式pattern的key; pattern可以使用通配符
exists key [key...]
:判断key是否存在
expire key [seconds]
:设置key的生存时间,超过时间key自动销毁,单位是秒
ttl key
:以秒为单位,返回key的剩余生存时间
tpe key
:查看key所存储值的数据类型
返回值:
del key [key...]
:删除指定的一个key或多个key
string
字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据、序列化后的数据、JSON对象、甚至是一张图片,最大内存为512M
hash
Redis hash 是一个string类型的 field 和 value 的映射表,hash 特别适合用于存储对象
Map<String,String> data = new HashMap<>();
data.put("username","zhangsan"); //此时的key 称为 field
data.put("times","5");
data.put("region","北京");
Map<String,Map<String,Object>> map = new HashMap<>();
//此时的key 在redis中就是真正的key
map.put("loginUser",data); //此时这个map 就是redis 中的 hash 类型
list
set
zset
在 Redis 中 对于每种数据类型都有专属的执行命令
set key value
:在当前数据库中创建一个字符串的 key 和 valueget key
:获取指定key对应的value,如果没有则返回 nilincr key
:将指定key的value进行+1并返回操作
decr key
:与 incr 相反,将指定 key 的value 进行-1操作,其属性与 incr 相同append key value
:将value值追加到指定key的value值的末尾并返回value值的长度
strlen key
:返回指定key所存储的字符串值的长度
getrange key start end
:截取指定key中 start 到 end 直接的子串,是双闭的
getrange key 0 -1
setrange key offset value
:使用value覆盖指定key的value值,从offset开始mset key value [key value...]
:同时创建一个或多个key-value 数据,成功返回OKmget key [key...]
:同时获取多个key对应的value值,结果按先后顺序排列若没有key 返回 nilhset key field value
:将哈希表 key 中的域 field 的值设为 value,如果 key 不存在,则创建新的 hash 表进行赋值,如果有 field则进行覆盖操作
返回值:
hget key field
:获取一个hash对应的field值,没有返回 nil
hmset key field value [field]
:同时创建一个或多个field-value 设置到哈希表中
hmget key field [field...]
:返回 hash 表 key 中 对应的一个或多个 field 的值
hgetall key
:获取哈希表 key 中所有的 域和值,以列表的形式返回,key不存在,返回空 hash
hdel key field [field...]
:删除 hash 中指定的一个或多个 field,如果field 不存在,则直接忽略,返回成功删除的field的数量
hkeys key
:返回 hash 表中所有的field 值hvals key
:返回 hash 表中field 所有的value 值hexists key field
:判断 hash 表中指定key的 field值是否存在
list添加元素时可以指定头部和尾部,所以当一些命令以 [l]开头表示指向的头部(左边),而以[r]开头表示指向尾部(右边)
lpush key value [value...]
:将一个或多个 value 插入到列表 key 的表头(最左边)
lpush mylist a b c
:此时列表排列顺序是 c b arpush mylist a b c
:此时列表的顺序是 a b clrange key start stop
:取出从下标以start开始到stop结束的元素
lrange key 0 -1
:取出全部元素lindex key index
:取出list中key 指定下标的元素,没有返回 nilllen key
:返回list的长度,返回则返回0lrem key count value
:根据参数count的值,删除列表中与参数 value 相同的元素,成功返回修改个数
lset key index value
:将列表 key 下标为 index 的元素替换为 value,成功返回OK
linsert key BEFORE|ALFTER pivot value
:将值value 插入到列表 key 当中位于值 pivot 之前或之后的位置, key 不存在,pivot 不在列表中,不执行任何操作
sadd key member [member]
:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入
smembers key
:获取集合 key 中的所有成员元素,不存在的 key 视为空集合sismember key member
:判断 member 元素是否是集合 key 的成员
scard key
:返回 key 元素长度srem key member [member]
:删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略
srandmember key [count]
:只提供 key,随机返回集合中一个元素,
当提供了 count 时
spop key [count]
:随机从集合中删除一个元素,count 是删除的元素个数,count 不能为负数
zadd key score member [score member...]
:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果member 存在集合中,则将原则覆盖, score 可以是整数或者浮点数
zrange key start stop [WITHSCORES]
:查询有序集合,指定区间的内的元素,集合成员按score值从小到大来排序
zrevrange key start stop [withsores]
:返回有序集合 key 中,指定区间内的成员,成员的位置按 score 值的降序排列,其他属性与zrange相同
zrem key member [member...]
:删除一个或多个集合 key 中 指定 member
zcard key
:获取有序集合 key 的元素成员个数
zrangebyscore key min max [withscores] [LIMIT offset count]
:获取有序集合 key 中,所有 score 值,介于 min 和 max 之间(闭区间)的成员,有序成员是按升序排序
zrevrangebyscore key min max [withscores] [LIMIT offset count]
:
zcount key min max
:返回有序集 key 中,score 值再 min 和max 之间(闭区间)的成员数量
事务是指一系列操作步骤。这一系列的操作步骤要么完全地执行,要么完全地不执行。Redis 事务(transaction)是一组命令的集合,至少是两个以上的命令,red 事务保证这些命令被执行时中间不会被任何其他操作打断,而redis 没有回滚操作
multi
:标记一个事务的开始。事务内的多条命令会按照先后顺序被放进一个队列当中,返回值总是返回 OK
exec
:执行所有事务块内的命令;返回值:事务内的所有执行语句内容,事务被打断(影响)返回 nil
discard
:取消事务,放弃执行事务块内的所有命令,总是返回ok
watch
:监视一个或多个事务,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断
unwatch
:取消 WATCH 命令对所有 key 的监视
事务执行exec命令后,执行队列命令,命令执行错误,事务提交
持久化可以理解为存储,就是将数据存储到磁盘,如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。
Redis 的数据存储在内存中,内存是瞬时的,如果linux宕机或重启,又或者 Redis 崩溃或重启,所有的内存数据都会丢失,为解决这个问题, Redis 提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。
Redis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。
RDB 保存了在某个时间点的数据集(全部数据)存储在一个二进制文件中,只有一个文件。默认是dump.rdb。RDB技术非常适合做备份,可以保存最近一个小时,一天,一个月等的全部数据,存储数据是在单独的进程中写文件,不影响 Redis 的正常使用。RDB 恢复数据时比其他 AOF 速度快。
实现方式:
在配置文件redis.conf 中搜索 SNAPSHOTTING,查找在注释开始和结束直接的关于 RDB的配置说明。配置 SNAPSHOTTING 地方有三处。
save <seconds> <changes>
配置步骤:
查看ps -ef|grep redis
,如果redis服务启动,先停止服务
修改redis.conf文件,修改前先备份,执行cp redis.conf bak_redis.conf
重启服务即可
总结:
优点:由于存储的是数据快照文件,恢复数据很方便,也比较快
缺点:
Append-only File (AOP),Redis 每次接受到一条改变数据的命令时,它将把该命令写到一个 AOF文件中,当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据
如何实现:
AOF 方式的数据持久化,仅需在 redis.conf 文件中配置即可
操作步骤:
./redis-server --slaveof <master-ip> <master-port>
在启动时指定当前服务器成为某个主 Redis服务的从Slave编辑 Master 配置文件
编辑 Master 的配置文件 redis6380.conf:在空文件加入如下内容
include /opt/environment/redis-6.0.6/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb
配置项说明:
编辑 Slave 配置文件
编辑 Slave 的配置文件 redis6381.conf 和 redis6382.conf:在空文件加入如下内容
redis6381.conf
include /opt/environment/redis-6.0.6/redis.conf
daemonize yes
port 6381
pidfile /var/run/redis_6381.pid
logfile 6381.log
dbfilename dump6381.rdb
slaveof 127.0.0.1 6380
配置项说明:
启动服务:
src/redis-server redis6380.conf
src/redis-server redis6381.conf
src/redis-server redis6382.conf
然后使用src/redis-cli -p 6380
启动主服务器,启动后可以通过 info replication
查看信息
使用另外一个窗口再启动一个客户端src/redis-cli -p 6381
,启动后使用info replication
查看信息
在主服务器上添加数据,从服务器同时也能得到和主服务系统的数据结构,但是使用从服务器添加数据时报错,不能写,只能读数据
当 Master 服务出现故障,需手动将slave 中的一个提升为 master,剩下的 slave 挂至新的 master 上(冷处理:机器挂掉了,再处理)
命令:
slaveof no one
:将一台 slave 服务器提升为 Masterslaveof 127.0.0.1 6381
:将 slave挂至新的 master上src/redis-server redis6380.conf
:启动服务器;src/redis.cli -p 6380
:启动客户端slaveof 127.0.0.1 6381
挂至新的 master 即可Sentinel 哨兵是 redis 官方提供的高可用方案,可以用它来监控多个 Redis 服务实例的运行情况。 Redis Sentinel 是一个运行再特殊模式下的 Redis 服务器,Redis Sentinel 是在多个Sentinel进程环境下互相协作工作的,哨兵个数只能是奇数
Sentinel 系统有三个主要任务:
配置自己的端口号
配置开始的 master 端口号和票数
src/redis-sentinel sentinel26381.conf
:启动一个哨兵src/redis-sentinel sentinel26382.conf
src/redis-sentinel sentinel26383.conf
当主服务器发生宕机,或崩溃时,哨兵发现进行投票,然后再自己选举一个认为性能较好的slave变成 master
服务器修好后,重启服务器,哨兵会自动将此服务器挂至到他们新选举的 master上,变为 slave
使用 info replication
进行检查
Redis 默认是没有密码的,任意用户都可以访问,我们可以开启使用密码才能访问Redis ,设置Redis 的访问密码,修改redis.conf中requirepass密码。密码要比较复杂,不容易破解,而且需要定期修改,因为redis速度相当快,所以一台比较好的服务器下,一个外部的用户可以在一秒钟进行 150K次的密码尝试,需要指定非常非常强大的密码来防止暴力破解
开启访问密码设置
vim redis.conf
修改配置文件,找到requirepass 去掉注释,requirepass 空格后就是密码src/redis-cli -a password
即可,或者先进入客户端之后 使用auth password
,否则即使进入客户端了也没有任何权限修改 redis.conf 文件,把 # bind 127.0.0.1 前面的注释 # 去掉,然后把127.0.0.1改成允许访问你redis服务器的ip 地址,表示只允许该ip进行访问,多个ip使用空格分隔
修改 redis的端口,这一点 很重要,使用默认的端口非常危险,redis.conf中修改port6379将其修改为自己指定的端口(可随意范围在1024-65535)端口1024是保留给操作系统使用的
修改默认端口后,启动客户端使用src/redis-cli -p newPort
使用 Redis 官方推荐的 Jedis,在Java应用中操作 Redis,Jedis 几乎涵盖了 Redis的所有命令,操作 Redis 的命令在 Jedis中以方法的形式出现。
下载:
使用前提:
更多详细操作 参考https://my.oschina.net/HJCui/blog/751842
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。