[TOC]java
NOSQL几种类型
Berkeley
开源是嵌入式数据库,有极好的并发伸缩,支持事务及嵌套事务,海量数据存储等重要特性。用于存储数据方面有极高的价值。,然而该产品的Licence为GPL,这就意味着它不是在全部状况下都是免费的,而且通常状况下不能单独使用
MongoDB
和Berkeley不一样的是MongoDB能够单独使用,主要用于高并发的论坛博客使用,这些论坛博客主要特征是并发高、多读少写、数据量大、逻辑关系简单,以及文档做为数据主要源。和Berkeley同样该产品的Licence为GPL
##Redis 典型的NoSQL数据库服务器,和BerkeleyDB相比它能够独立运行本身的服务器主机。它除了key/vale以外还支持List、set和OrderedSet等数据结构。它是Apache Licence 彻底免费的。它是持久化的,若是服务器宕机也不会致使数据消失。 ##memcache 数据缓存服务器。他们之间最大的区别,memcache知识提供了存储服务,一旦服务器宕机,以前砸内存中缓存的数据全局消失。一次能够看出memcache没有提供任何形式的数据持久化功能。而Redis提供了这样的功能。linux
#Redis 安装 ##下载 可以使用wget 注解从网站下载也可在windows下下载完成经过ft'p传到指定目录下 wget http://download.redis.io/releases/redis-4.0.1.tar.gz 默认下载到当前目录。 ##解压 tar 使用tar -zxf redis-4.0.1.tar.gz 解压c++
移动(可选) mv
若是你想给redis 安装到指定目录下,使用mv命令移动 mv /edis-4.0.1 /service/redis
mv:从哪->到哪redis
编译 make
由于redis 用的是c语言编写,因此还须要编译一下才能安装。 若是提示找不到yum 要先安装 gcc-c—++使用 yum install gcc-c++spring
安装
进入到redis解压目录,使用 make install prefix=安装路径 安装完毕。 ##启动服务端 使用默认配置文件 方法1 进入到解压路径目录下(到bin目录下) 或者直接指定所有路,不然找不到redis-service 命令的。 想不明白想一想windows执行命令。数据库
[root@linux bin]# ls redis-benchmark redis-check-rdb redis-sentinel redis-check-aof redis-cli redis-server [root@linux bin]# redis-server
修改配置文件
vim redis.conf port 端口 daemonize yes 配置为守护进程,后台启动 bind 配置指定IP访问,若是指定全部人访问 注释掉bind 而且关闭保护模式 protected-mode 改为no requirepass 设置密码 客户端使用 auth 密码 才能够访问vim
root@linux ~]# redis-cli -p 8989 127.0.0.1:8989> set name lihai (error) NOAUTH Authentication required. 127.0.0.1:8989> auth lixiaohai OK 127.0.0.1:8989> set name lixiaohai OK 127.0.0.1:8989> get name "lixiaohai" 127.0.0.1:8989>
启动服务器 并指定配置文件(方法2)
- 先到解压包里面找到redis.confg
[root@linux bin]# cd ../../gz [root@linux gz]# ls redis-3.2.8 redis-3.2.8.tar.gz [root@linux gz]# ls redis-3.2.8 00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
- 从当前目录复制到你想存放的目录,建议放到redis/bin下
[root@linux redis-3.2.8]# cp redis.conf ../../redis/bin/ [root@linux redis-3.2.8]# cd ../../redis/bin/ [root@linux bin]# ls dump.rdb redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
- 启动redis 并使用特定的配置文件
[root@linux bin]# redis-server redis.conf
##启动客服端windows
- 链接本机的6379端口 方法1
cd /java/redis/redis/bin [root@linux bin]# ls redis-benchmark redis-check-rdb redis-sentinel redis-check-aof redis-cli redis-server [root@linux bin]# redis-cli 127.0.0.1:6379>
- 链接指定主机,指定端口 (/java/redis/redis/bin 个人redis 安装目录)
[root@linux bin]# cd /java/redis/redis/bin [root@linux bin]# ls dump.rdb redis-check-aof redis-cli redis-sentinel redis-benchmark redis-check-rdb redis.conf redis-server [root@linux bin]# redis-cli -h localhost -p 6379 localhost:6379> get name "xiaohaili" localhost:6379>
测试数是否可用
127.0.0.1:6379> set name xiaohaili OK 127.0.0.1:6379> get name "xiaohaili" 127.0.0.1:6379>
关闭
- 从客户端直接使用shutdown
localhost:6379> shutdown not connected>
- 从服务端直接关闭 redis-cli shutdown
[root@linux bin]# cd /java/redis/redis/bin [root@linux bin]# ls dump.rdb redis-check-aof redis-cli redis-sentinel redis-benchmark redis-check-rdb redis.conf redis-server [root@linux bin]# redis-cli shutdown [root@linux bin]#
查看redis进程
ps aux|grep redis [root@linux bin]# ps aux|grep redis root 10045 0.0 0.0 112708 972 pts/1 R+ 11:31 0:00 grep --color=auto redis [root@linux bin]#
使用redis操做
redis 数据类型
Redis数据就是以key-value形式来存储的,key只能是字符类型,value能够是如下五种类型,String,List,Sorted-Sets,Hash
String类型
简介
字符串类型是Redis最为基础的数据存储类型,它在Redis是二进制安全的,这便意味着该类型能够接受任何格式的数据,如JPEG图像格式或者JSON对象格式,在Redis中字符串类型的Value最多能够容纳数据长度是512M
操做
- set 和get
set key value [Ex seconds] [PX milliseconds] [NX|XX] Ex 秒 PX 毫秒 NX 当key不存在的时候起做用 XX 当key存在时候才起做用 注意:EX PX NX|XX 不能同时使用 ttl key 查看过 期时间数组
127.0.0.1:8989> set xiaokey xiaovalue ex 100 OK 127.0.0.1:8989> get xiaokey "xiaovalue" 127.0.0.1:8989> ttl xiaokey (integer) 90 127.0.0.1:8989> ttl xiaokey (integer) 87 127.0.0.1:8989>
- select 1-15 切换数据库,redis默认提供16个数据库 ,数据库名用数字表示。索引从0开始 select 1 切换到第二个数据库
- exists key 判断是否存在当前key,若是存在返回1,不存在返回0
- append 追加 append key value 若是当前key存在追加value,不存在建立key和value
- strlen 查看值得长度 strlen key
- flushdb 清空数据库
- incr
incr key 递增 每次key的vlaue递增1 - decr decr key 递减 每次key递减1
- incrby 设置递增步数 incrby key 5 每次给key值递增5
- desrby 每次递减步数 desrby key 6 每次给key的递减6 *getset 取到一个key 并把这个key付给一个新值
- setex setex key seconds value 添加一个key 并指定过时时间
- setnx setnx key vlaue 只有当一个key不存在的时候执行 *setbit 设置指定位置的值
- getbit 获取指定位的bit值
- mset 一次性能够设置多个key value mset key1 "hellow word" key2 "no"
- mget 一次性获取多个 mget key1 key2
- msetnx
一次性获取多个,可是key不存在的时候才执行(一个key存在全部key都存储失败)
List类型
概述
在Redis中,List类型是按照顺序插入排序的字符串链表。和数据结构中的普通链表同样,咱们能够再其头部和尾部添加新的元素。在出让时,若是该键并不存在,Redis姜维该键建立一个新的链表。与此相比,若是链表中全部的元素均被移除,name该键也将会从数据库中删除。List能够包含的最大元素数量是4292967295,。 从插入和删除的效率视角看,若是咱们在链表的两头插入或者删除,这将会是效率很是高的。即便链表中已经存储了百万数据记录,该操做能够在常亮内完成。然而须要说明的是没若是元素插入或者删除在做用于链表中间,name效率很是低。
操做
- lpush 建立一个key,而后将参数中的values从左到右插入
lpush mykey a b c d e f (integer) 6
- rpush 建立一个key,而后将参数的values 从右开始插入
lpush mykeyright a b c d e f (integer) 6 127.0.0.1:8989> lrange mykeyright 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f"
- rpushx 当一个key已存在的时候从右边开始增长
lrange mykeyright 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 7) "g"
- lpushx key存在的时候插入,不存在时候不插入。
lpushx mykey 1 (integer) 9 127.0.0.1:8989> lpushx mykeynotexit 1 2 3 (error) ERR wrong number of arguments for 'lpushx' command
- lrange 根据key 取出list数据
lrange mykey 0 3 1) "f" 2) "e" 3) "d" 4) "c"
取出全部 -1 表明全部缓存
lrange mykey 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a"
- lpop 取出列表里面第一个元素并删除(从左开始)
lpop mykey 127.0.0.1:8989> llen mykey (integer) 7 127.0.0.1:8989> lpop mykey "123" 127.0.0.1:8989> llen mykey (integer) 6
rpop 取出列表里面的第一个元素并删除(从右到左)
127.0.0.1:8989> lrange mykey 0 -1 1) "d" 2) "dd" 3) "cc" 4) "c" 127.0.0.1:8989> rpop mykey "c" 127.0.0.1:8989> lrange mykey 0 -1 1) "d" 2) "dd" 3) "cc" 127.0.0.1:8989>
rpoppush 从右取出第一个并删除,放到另一个列表(从左边放进去)
127.0.0.1:8989> lpush mykey a b (integer) 2 127.0.0.1:8989> lpush mykey1 e d (integer) 2 127.0.0.1:8989> lrange mykey 0 -1 1) "b" 2) "a" 127.0.0.1:8989> lrange mykey1 0 -1 1) "d" 2) "e" 127.0.0.1:8989> rpoplpush mykey mykey1 "a" 127.0.0.1:8989> lrange mykey1 0 -1 1) "a" 2) "d" 3) "e"
- llen 取出列表长度
llen mykey (integer) 6
- lrem 删除指定个数的关键词
lrem key 个数 关键词 127.0.0.1:8989> lpush mykey a b c d e f a b c d e f a b c d e f (integer) 18 127.0.0.1:8989> lrem mykey 2 b (integer) 2 127.0.0.1:8989> lrange mykey 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "a" 6) "f" 7) "e" 8) "d" 9) "c" 10) "a" 11) "f" 12) "e" 13) "d" 14) "c" 15) "b" 16) "a"
- lindex 取出指定索引的元素
lindex mykey 2 "d"
- lset 设置指定索引的值
lset mykey 2 ss OK 127.0.0.1:8989> lindex mykey 2 "ss"
- ltrim 去除指定位置两边的元素
lpush mykey a b c d e f (integer) 6 127.0.0.1:8989> ltrim mykey 2 4 OK 127.0.0.1:8989> lrange mykey 0 -1 1) "d" 2) "c" 3) "b"
- linsert 在指定数值先后面插入元素
linsert mykey after d dd 在d后面插入dd lrange mykey 0 -1 1) "d" 2) "c" 3) "b" 127.0.0.1:8989> linsert mykey after d dd (integer) 4 127.0.0.1:8989> lrange mykey 0 -1 1) "d" 2) "dd" 3) "c" 4) "b" linsert mykey before c cc 在c前面插入cc 127.0.0.1:8989> linsert mykey before c cc (integer) 5 127.0.0.1:8989> lrange mykey 0 -1 1) "d" 2) "dd" 3) "cc" 4) "c" 5) "b"
Set 类型
概述
在Redis中,咱们能够将Set类型看做为没有排序的字符集合(java set同样)也能够在该类型的数据值上执行添加,删除或判断某一元素是否存在等操做。Set可包含的最大元素数量是4294967295. 和List类型不一样的是,Set结合中不能够出现重复的元素。和List类型相比,Set类型在功能上还存在着一个很是重要的特性,即在服务器端完成多个Sets之间的聚合计算操做,如unions并,intersections交和differences差。因为这些操做均在服务端完成,所以效率极高,并且也节省了大量的网络IO开销。
操做
- sadd 给set结合里面插入集合元素,若是已经存在再也不插入
127.0.0.1:8989> sadd setkey a b c (integer) 3 127.0.0.1:8989> sadd setkey a d (integer) 1 127.0.0.1:8989> smembers setkey 1) "d" 2) "a" 3) "c" 4) "b"
- smembers 查看指定set key里面的元素
127.0.0.1:8989> smembers setkey 1) "d" 2) "a" 3) "c" 4) "b"
- sismember 判断某一个元素是否在set结合里面
127.0.0.1:8989> sismember setkey a (integer) 1 127.0.0.1:8989> sismember setkey ggg (integer) 0
*scard 获取结合里面个数
127.0.0.1:8989> scard setkey (integer) 4
- srandmember 随机放回集合中的元素 ,默认返回一个,可指定数量
127.0.0.1:8989> SRANDMEMBER setkey 3 1) "d" 2) "b" 3) "c" 127.0.0.1:8989> SRANDMEMBER setkey "d"
- spop 随机取出来指定元素并删除。
127.0.0.1:8989> sadd setkey a b c (integer) 3 127.0.0.1:8989> smembers setkey 1) "a" 2) "c" 3) "b" 127.0.0.1:8989> spop setkey "a" 127.0.0.1:8989> smembers setkey 1) "c" 2) "b" 127.0.0.1:8989>
- srem 移除指定元素
127.0.0.1:8989> smembers setkey 1) "c" 2) "b" 127.0.0.1:8989> srem setkey c (integer) 1 127.0.0.1:8989> smembers setkey 1) "b"
- smove 把一个key里面指定的元素移动到另一个数组
127.0.0.1:8989> sadd setkey a b c (integer) 3 127.0.0.1:8989> sadd setkey1 d f (integer) 2 127.0.0.1:8989> smove setkey setkey1 c (integer) 1 127.0.0.1:8989> SMEMBERS setkey1 1) "d" 2) "c" 3) "f"
- sdiff 取出多个结合里面值不一样的数据
127.0.0.1:8989> sadd setkey a b c (integer) 3 127.0.0.1:8989> sadd setky1 d c (integer) 2 127.0.0.1:8989> sadd setkey2 b c d (integer) 3 127.0.0.1:8989> sdiff setkey setkey1 setkey2 1) "a"
- sdiffstore 对比结合不一样的值,并放到一个新的结合
127.0.0.1:8989> sadd setkey a b c (integer) 3 127.0.0.1:8989> sadd setky1 d c (integer) 2 127.0.0.1:8989> sadd setkey2 b c d (integer) 3 127.0.0.1:8989>SDIFFSTORE setkeysdiff setkey setkey1 setkey2 (integer) 1 127.0.0.1:8989> SMEMBERS setkeysdiff 1) "a"
- sinter 去多个集合中的交集
127.0.0.1:8989> sadd setkey a b (integer) 2 127.0.0.1:8989> sadd setkey1 a c (integer) 2 127.0.0.1:8989> sadd setkey2 a e (integer) 2 127.0.0.1:8989> sinter setkey setkey1 setkey2 1) "a"
- sinterstore 取它们的交集,并把集合存放到一个新的key中
127.0.0.1:8989> sadd setkey a b (integer) 2 127.0.0.1:8989> sadd setkey1 a c (integer) 2 127.0.0.1:8989> sadd setkey2 a f (integer) 2 127.0.0.1:8989> sinterstore newkey setkey setkey1 setkey2 (integer) 1 127.0.0.1:8989> SMEMBERS newkey 1) "a"
- sunion 取结合中的并集
127.0.0.1:8989> sadd setkey a b (integer) 2 127.0.0.1:8989> sadd setkey1 a c (integer) 2 127.0.0.1:8989> sadd setkey2 a f (integer) 2 SUNION setkey setkey1 setkey2 1) "a" 2) "f" 3) "c" 4) "b"
- sunionstore 取集合中的并集并放到一个新的集合中
SUNIONSTORE newkeys setkey setkey1 setkey2 (integer) 4 127.0.0.1:8989> smembers newkeys 1) "a" 2) "f" 3) "c" 4) "b"
Sorted-Sets 类型
概述:
Sorted-Sets和Sets类型极为类似,也成为Zset,它们都是字符集合,都不能够重复,它们之间的区别在于Sorted-Sets中的每个成员都会有一个分数(score)与之关联,Redis正式经过分数啦为集合中的成员进行从小到大的排序。然而须要额外指出的是,尽管Sorted-Sets中的成员必须是惟一的。可是分数(score)确实能够重复的。 在Sorted-Set中 添加、删除或者更新一个成员都是很是快速的操做。因为Sorted-Sets总的成员在集合中的位置是有序的,所以,即便是访问位于集合中的成员也是效率很是高的。事实上,Redis具备的这一特性在不少其余类型的数据库中是很难实现的。换句话说,在该点上想要达到和Redis一样的效率,在其余数据库中进行模建是很是困难的。
操做
- zadd 给zset里面添加数据,默认排序是由分数从小到大排序
127.0.0.1:8989> zadd zsetkey 8 aa (integer) 1 127.0.0.1:8989> zadd zsetkey 6 bb (integer) 1 127.0.0.1:8989> zadd zsetkey 10 cc (integer) 1 127.0.0.1:8989> zrange zsetkey 0 -1 1) "bb" 2) "aa" 3) "cc"
- zrange 获取元素 按索引分值从低到高 查看全部分数
127.0.0.1:8989> zrange zsetkey 0 -1 1) "bb" 2) "aa" 3) "cc" //查看数值并显示分数 127.0.0.1:8989> zrange zsetkey 0 -1 withscores 1) "bb" 2) "6" 3) "aa" 4) "8" 5) "cc" 6) "10"
- zrevrange 按索引分值从高到低
127.0.0.1:8989> zadd setkey 10 aa (integer) 1 127.0.0.1:8989> zadd setkey 20 bb (integer) 1 127.0.0.1:8989> zadd setkey 3 cc (integer) 1 127.0.0.1:8989> zadd setkey 8 dd (integer) 1 127.0.0.1:8989> ZREVRANGE setkey 0 -1 1) "bb" 2) "aa" 3) "dd" 4) "cc"
-
zrevrangebyscore 按分数从高到低
-
zcard 查看集合中元素的个数
zcard zsetkey (integer) 3
- zcount 查看集合中个数,可指定条件
//获取zsetkey 分数在5-20之间的个数 zcount zsetkey 5 20 (integer) 3
- zrank 查看某个元素所在集合的索引
zrank zsetkey aa (integer) 1
- zscore 根据指定数值查看分数
zscore zsetkey aa "8"
- zincrby 根据指定值增长分数值
127.0.0.1:8989> zadd setkey 8 aa (integer) 1 127.0.0.1:8989> zadd setkey 9 bb (integer) 1 127.0.0.1:8989> zincrby setkey 10 bb "19" 127.0.0.1:8989> zrange setkey 0 -1 withscores 1) "aa" 2) "8" 3) "bb" 4) "19"
- zrangebyscore 根据分数获取 由低到高获取
// 获取分数1-20之间 ZRANGEBYSCORE setkey 1 20 1) "aa" 2) "bb" // 获取分数1-20之间 并显示2条 ZRANGEBYSCORE setkey 1 20 limit 1 2 1) "bb" 2) "cc"
- ZREVRANGEBYSCORE 根据分数获取 由高到低获取
ZREVRANGEBYSCORE setkey 20 8 1) "bb" 2) "aa" 3) "dd"
- zrevrank 根据数值获取集合索引 从高到低
zrevrank setkey dd (integer) 2
- zremrangebyscore 删除指定分数元素
// 删除1-14分的数据 返回删除个数 127.0.0.1:8989> ZREMRANGEBYSCORE setkey 1 14 (integer) 3 127.0.0.1:8989> zrange setkey 0 -1 1) "dd" 2) "ff"
- ZREMRANGEBYRANK 根据索引删除元素 //删除0到1索引之间的元素 返回删除个数
ZREMRANGEBYRANK setkey 0 1 (integer) 2
Hash类型
概述:
能够将Redis中的Hash类型当作具备String key和String value的map容器。因此该类型很是适合存储于对象的信息。如username、password和Age等。若是Hash中包含不多的字段,那么该类型也将仅占用不多的磁盘空间。每个Hash能够存储4294967295个键值对。
操做
- hset 新增
127.0.0.1:8989> hset hkey name tom (integer) 1 127.0.0.1:8989> hset hkey age 10 (integer) 1 127.0.0.1:8989> hset hkey sex '男' (integer) 1 127.0.0.1:8989> hget hkey name "tom"
- hget 根据file获取值
127.0.0.1:8989> hget hkey name "tom"
- hlen 判断集合里面的个数
127.0.0.1:8989> hset hkey name tom (integer) 1 127.0.0.1:8989> hset hkey age 10 (integer) 1 127.0.0.1:8989> hset hkey sex '男' (integer) 1 127.0.0.1:8989> hlen hkey (integer) 3
- hexists 判断是否存在
hexists hkey name (integer) 1
- hdel 在指定key中根据file删除
hdel hkey name (integer) 1
- hsetnx 这指定key中file不存在的时候才生效
127.0.0.1:8989> hset hkey name tom (integer) 1 127.0.0.1:8989> hset hkey age 10 (integer) 1 127.0.0.1:8989> hsetnx hkey name tom (integer) 0
- hincrby 对指定数值进行增加
127.0.0.1:8989> hget hkey age "30" 127.0.0.1:8989> hincrby hkey age 10 (integer) 40 127.0.0.1:8989> hget hkey age "40" 127.0.0.1:8989>
- hmset 一次性设置多个值
hmset hashkey name toms age 10 sex '男' OK 127.0.0.1:8989> hgetall hashkey 1) "name" 2) "toms" 3) "age" 4) "10" 5) "sex" 6) "\xe7\x94\xb7"
- hmget 一次性获取多个值
hmget hashkey name age 1) "toms" 2) "10"
- hgetall 获取全部key和value
hgetall hashkey 1) "name" 2) "toms" 3) "age" 4) "10" 5) "sex" 6) "\xe7\x94\xb7"
- hkeys 取出全部的key
127.0.0.1:8989> hkeys hashkey 1) "name" 2) "age" 3) "sex"
- hvals 取出全部的value 127.0.0.1:8989> hvals hashkey
- "toms"
- "10"
- "\xe7\x94\xb7"
其余命令
keys
keys * 获取全部的key 也可使用通配符 keys s*
del
删除 指定key del key
exists
判断key是否存在
move
把当前数据库中的key 移动到指定位置
move zset 2 (integer) 1 127.0.0.1:8989> select 2 OK 127.0.0.1:8989[2]> exists zset
rename 修改key名
127.0.0.1:8989[2]> rename zset newzset OK
ttl 查看key的过时时间
presist 设置一个key永不过时
expire 设置过时时间
type 查看key的类型
randomkey 随机获取一个key
事务
multi 开始事务
exec 提交事务
discard 回滚事务
主从请求
概述
在Redis中配置Master-Slave模式很是简单,Redis中主从复制的特色和优点
- 同一个Master能够同步多个Slaves
- Slaves一样能够接受其余Slaves的链接和同步请求,能够有效地肥仔Master的同步压力,因此能够将Redis的Replicaiton架构视为图结构
- Master Server是以非租塞的方式为Slaves提供服务,因此在Master-Slave同步期间,客户端仍然能够提交查询或者修改请求 *Slave Server一样是以非租塞的方式完成数据库同步,在同步期间,若是有客户端提交查询请求,Redis则放回同步以前的数据
- 为了分在Master的读操做压力,Slave服务器能够为客户端提供只读的操做服务,写服务仍然必须有Master完成。即使如此,系统的伸缩性仍是获得了很大的提升。
- Master能够将数据保存操做交给Slaves完成,从而避免在Master中要有独立的进程来完成此操做。
配置
- 配置
- 在从服务器上使用以下命令
salveof ip 端口号 服务器重启以后再也不从主服务器上配置,
- 在从服务器上使用以下命令
- 在conf配置 永久生效 slaveof ip 端口 若是主服务器有密码,须要指定密码 masterauth 密码
持久化
概述
Redis 提供了持久化方式
- RDB 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
- AOF 该机制将以日志的形式记录服务器所处理的每个写操做。在Redis服务器启动之初会读取该配置文件来从新构造数据库,保证启动后数据库的数据是完整的。
RDB
- Redis database 经过单文件的方式来持久化
- RDB是默认的持久化方式,默认存储在启动redis服务器时所在当前目录下dump.rdb文件中,通常都会修改存储在一个固定的目录下 编辑redis.conf 文件 dbfilename :文件名(默认是dump.rdb) 能够修改 #dir ./默认位置 dir /路径 保存咋指定位置。
持久化的机制
- 在数据库关闭时会持久化(须要注意的是数据库宕机时不会生成,数据可能会丢失)
- 知足特定条件时会持久化 编辑配置文件 save 900 1 //在900秒内,只要有1个key发生变化,就会dump持久化
- RDB 优缺点 缺点:可能会丢失数据 优势:效率比较高
AOF
- Append Only File 经过操做日志的方式持久化 编辑配置文件 appendonly yes appendfilename 默认appendonly.aof 能够修更名字 dir 修改目录 appendfsync
- always 每次写操做都会同步 慢 可是安全
- no 放到内存中,不会持久存储 快 但不安全 容易丢失
- everysec 美妙存储一次。
- AOF 优缺点 缺点: 效率比较差 优势:丢失数据量比较少。
在Java中使用redis
-
使用Jedis Jedis是一个封装了redis的java客户端,继承了redis的一些命令操做,提供了链接池管理功能。
-
使用Spring data Redis 简称SDR,在spring应用中读写Redis数据库更简单