随着访问量的提高,关系型数据库多多少少遇到了瓶颈,为了克服这一问题,NoSQL(Not Only SQL)应运而生,它同时具有了高性能、可扩展性强、高可用等优势。 java
redis是如今受欢迎的NoSQL数据库之一,是由C语言开发的,包含多种数据结构,支持网络,基于内存,可选持久性的键值对存储数据库。linux
* redis支持多种数据结构 * redis经过key-value的形式存储数据 * redis支持数据的持久化 * redis支持主从模式,能够配置集群 * 基于内存运行,性能高效
附一个官网地址,奇妙连接redis
redis虽然也有Windows版,可是仍是推荐在linux系统下安装。数据库
tar -zxvf redis-6.2.1.tar.gz -C dir
。进入解压后的src目录中,执行make
命令,此命令编译C,可是须要gcc支持,没有可使用yum提早下载gcc。安全
make distclean
将以前编译的内容清除。make install
命令将可执行文件拷贝到/usr/local/bin
。主要有如下三种方式服务器
redis-server
网络
redis-server &
数据结构
redis-server redis.conf &
并发
主要有一下两种方式app
kill -9 pid
redis-cli shutdown
redis-cli -h ipadress -p port shutdown
。redis默认带有客户端为redis-cli
链接方式为 redis-cli -h ipadress -p port -a password
,若是redis安装在本机且端口为默认的6379能够直接使用redis-cli
链接。
退出客户端只须要执行exit
命令。
redis-benchmark
命令,参数具体以下表ping
命令,须要在客户端中执行,链接正常返回PONG
。info
命令,须要在客户端中执行,也能够在后面加指定内容信息,例info cpu
。select index
命令切换数据库实例。dbsize
命令。flushdb
。flushall
。config get *
,也能够执行某条配置,例config get port
。redis本质上仍是数据库,职能是储存数据,针对于程序处理后的数据,redis提供了多种数据类型存储。
特色:单key对应单个value
特色:单key对应多个value,value容许重复且有序(按插入顺序排序)
特色:单key对应多个value,value不容许重复且无序。
特色:单key对应多个filed-value对。
特色:单key对应多个value,每一个value对应一个score值,value不容许重复且有序(按照score从小到大排序)
<font color=red>全部操做命令都在客户端中使用。</font>
keys *
*
匹配一个或多个字符 ?
匹配一个字符 []
匹配一个字符且字符须要在[]中提早定义。exists key1 [key2 ...]
move key index
ttl key
expire key seconds
type key
rename key newkey
del key1 [key2 ...]
set key value
get key
append key value
set
incr key
decr key
incrby key offset
decrby key offset
strlen key
getrange key startIndex endIndex
getrange key 0 -1
setrange key startIndex value
setex key seconds value
setnx key value
mset key1 value1 [key2 value2 ...]
mget key1 [key2 ...]
msetnx key1 value1 [key2 value2 ...]
lpush key value1 [value2 ...]
lpush k1 1 2 3
,插入结果为3 2 1lrange key startIndex endIndex
lrange key 0 -1
rpush key value1 [value2 ...]
lpop key [count]
lindex key index
llen key
rpop key [count]
lrem key count value
在指定列表中删除count个与value相等的值。
sadd key member1 [member2 ...]
smembers key
sismember key member
scard key
srem key member1 [member2 ...]
srandmember key count
在指定集合中随机获取count个值。
spop key count
smove source dest member
sdiff key1 key2 [key3 ...]
sinter key1 key2 [key3 ...]
sunion key1 key2 [key3 ...]
hset key field1 value1 [field2 value2 ...]
hget key field
hmset key field1 value1 [field2 value2 ...]
hmget key field1 [field2 ...]
hgetall key
hdel key field1 [field2 ...]
hlen key
hexists key field
hkeys key
hvals key
hincrby key field int
hincrbyfloat key field float
hsetnx key field value
zadd key score1 member1 [score2 member2 ...]
zrange key startIndex endIndex [withscores]
zrange key 0 -1
zrevrange
命令,参数不变。zrangebyscore key min max [withscores]
zrevrangebyscore
命令,参数不变。zrem key member1 [member2 ...]
zcard key
zrank key member
zrevrank
命令,参数不变。zcount key min max
zscore key member
redis的配置文件模板在解压目录根目录的redis.conf,这里简单说几个配置。
1. requirepass 配置访问密码,默认不使用密码。 2. 若是配置了密码,须要将protected-mode设置成yes
redis是基于内存的数据库,防止意外丢失数据,redis支持数据的持久化,将内存中的数据存到磁盘,下次redis服务启动的时候再从磁盘读取到内存中。
RDB策略是redis默认的持久化策略。
在指定的时间间隔内,redis服务执行指定次数的写操做,会自动触发一次持久话操做。
RDB策略默认的时间间隔是,1分钟内10000次,5分钟内10次,15分钟内1次。
具体配置略。
AOF策略采用操做日志的方式来记录每一次写操做,每次redis启动时,都会从新执行一遍记录的操做指令。
部分配置:
appendfsync AOF异步策略
redis为了追求执行的高效性,牺牲了事务的原子性。redis的事务是将一系列命令放在一块儿,将命令序列化以后依次执行,只能实现部分原子性。
redis的事务是将一系列命令先压入命令队列再执行,若是在压入命令队列时出现错误,则事务被放弃,事务内的全部命令都不执行;如果在执行事务的过程当中出现错误,则只有出错的命令没法执行,其他命令正常执行。
multi
exec
discard
watch key
unwatch
redis同时还提供了客户端之间交互的功能,可是大部分此功能都是由消息中间件完成,因此只作了解。
subscribe ch1 [ch2 ...]
publish ch1 message
psubscribe ch1*
redis支持集群模式,提供了主机数据更新后根据配置和策略自动同步到从机的master/slave机制,master服务以写为主,slave只能进行读操做。
主要实现了,主写从读,读写分离
info replication
命令查看redis服务的主从角色。设置主从关系,设从不设主。
主机宕机,从机上位操做步骤
slaveof no one
断开当前的主从状态。redis的主从模式实现了功能,可是主机宕机以后须要手动从新设置主从状态,并且咱们没法预测主机当时时间,为了解决这个问题redis提供了哨兵模式。
哨兵模式主要是经过哨兵程序监控主机状态,当发现主机宕机以后,在从机中选举一个新的主机。
哨兵程序的配置模板在reids根目录的sectinel.conf
具体配置略。
简略配置,新建一个配置文件,只加入以下配置。
sentinel monitor dc-redis ipadress port num
随后启动哨兵
redis-sentinel sentinel.conf
启动哨兵以后,当主机再发生宕机,则会进行选举出现新的主机,当原主机修复以后,自动成为新主机的从机。
jedis是redis官方推出的java控制redis的工具,主要是将redis的操做指令封装成了java方法,此处暂略。
redis的starter中对原有的API进行了修改,因此使用方法上和操做命令略有不一样,此处暂略。