1.redis相关介绍:
(1)Redis 是一个高性能的 开源的、C语言写的Nosql(非关系型数据库),数据保存可以存储在内存中或者磁盘中。
(2)Redis 是以key-value形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,redis严格上不是一种数据库,应该是一种数据结构化存储方法的集合。--数组 list set map ...
数据结构:数组,list,set,map等
redis提供了一下操作方法,我们使用这些方法就可以对存入字符串,组织成各种类型数据库结构(string,list,set,map等).
小结:
(1) redis开源 高性能nosql数据库,数据可以存储在内存或磁盘上面
(2) Redis 主要key-value结构形式存储,redis底层支持各种类型的数据存储结构
包括 list set map string等
2.特点以及优势:
1.数据保存在内存,存取速度快,并发能力强
2.它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。
3.redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。
4.它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
5.Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
6.支持持久化,可以将数据保存在硬盘的文件中
7.支持订阅/发布(subscribe/publish)功能 QQ群
总结:
1) 数据存储:存放在内存,还支持持久化.-存取速度快,并发能力强,数据安全性高
2) 支持value类型
3) 支持多个语言客户端
4) 还支持集群(支持高并发,海量数据)
1.1. Mysql、Memcached和Redis的比较
mysql |
redis |
memcached |
|
类型 |
关系型 |
非关系型 |
非关系型 |
存储位置 |
磁盘 |
磁盘和内存 |
内存 |
存储过期 |
不支持 |
支持 |
支持 |
读写性能 |
低 |
非常高 |
非常高 |
redis支持数据存储类型比memcached多
存储过期:
一个数据存储是为他设置过期时间,时间一到数据就没有. 道具,会员,优惠券,订单,红包等
redis和memcached的系统点和不同点? 你有用过memcached?
相同点:都是key-valueNosql,数据存储在内存中,读写效率高,都支持存储过期.
不同点:
(1) redis支持持久化
(2) redis支持存储类型更多
3.安装Redis服务端
1.Redis 的官方下载站是 http://redis.io/download,可以去上面下载最新的安装程序下来
2.下载32或64:https://github.com/microsoftarchive/redis/releases
绿色软件不需要安装,直接使用
3.启动服务:redis-server.exe redis.windows.conf(带配置文件启动),也可以直接打开
4.基本操作
对字符串操作
set key value
get key
mset /mget
incr decr incrBy decrBy
(2)对key的操作
keys *
expire key seconds
ttl key
del key
flushall 清库 (0-15个)
flushdb 清当前库
select index
(3)对list操作
lpush(rpush) key value1/value2...
lpop(rpop) key 弹出一个值
lrange key start stop 搜索查询
lrem key count value 移出
lindex key index
ltrim key start stop (对集合进行修剪)
(4)set操作
sadd key members 添加值
srem key member 删除值
smembers key 查看可以对应的值
(5)hash操作
hset key name value --设置key value
hget key name --通过key获取值
hmset key name1 key1 name2 key2 --批量设置
hmget key name1 name2 --批量获取
hkeys --获取所有的key
hvals --获取所有的value
hgetall --获取所有的key和value
以后使用比较多的结构:
string /list /map(hash) /set ---常用
5.设置密码:
(1)在配置文件
redis.windows.conf --添加 requirepass 123,注意不能有空格
(2)在启动的时候 redis-server.exe redis.windows.conf
(3)auth 123
4.在idea中使用redis
1.创建一个普通java项目
2.导包:
3.测试:创建一个测试类测试
(1)普通测试,测试string
@Test public void testRedis()throws Exception{ //获取jedis对象,参数为服务器ip,默认端口6379,连接时间 Jedis jedis = new Jedis("127.0.0.1", 6379, 1000); //初始化密码 jedis.auth("123"); //设置值 jedis.set("name", "小飞"); //取值 System.out.println(jedis.get("name")); //关闭jedis对象 jedis.close(); }
连接池创建jedis对象
@Test public void testRedisPool()throws Exception{ //获取jedis的连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig(); //设置最大连接对象 config.setMaxIdle(2); //设置连接的条数 config.setMaxTotal(10); //获取连接池对象 JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123"); //获取jedis对象 Jedis jedis = jedisPool.getResource(); jedis.set("age", "18"); System.out.println(jedis.get("age")); System.out.println(jedis.get("name")); //get 获取 System.out.println(jedis.keys("*")); //查看所有key System.out.println(jedis.del("name")); //删除key System.out.println(jedis.get("name")); //get //获取 System.out.println(jedis.set("name","xxxxx")); //修改 System.out.println(jedis.get("name")); //get*/ jedis.close(); jedisPool.destroy(); }
(3)测试list和set
@Test public void testRedisListAndSet()throws Exception{ //获取jedis的连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig(); //设置最大连接对象 config.setMaxIdle(2); //设置连接的条数 config.setMaxTotal(10); //获取连接池对象 JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123"); //获取jedis对象 Jedis jedis = jedisPool.getResource(); //清空当前库 jedis.flushDB(); /*(1)给list添加值 jedis.lpush("users","周杰伦","双节棍","张无忌","流川枫"); //去除所有的value为周杰伦的值 jedis.lrem("users", 0, "周杰伦"); System.out.println(jedis.lrange("users",0,-1));*/ //(2)set操作,添加值 jedis.sadd("students","x","o","xx","oo","x"); System.out.println(jedis.smembers("students")); }
(4) 测试hash和排序
@Test public void testRedisHash()throws Exception{ //获取jedis的连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig(); //设置最大连接对象 config.setMaxIdle(2); //设置连接的条数 config.setMaxTotal(10); //获取连接池对象 JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123"); //获取jedis对象 Jedis jedis = jedisPool.getResource(); //清空当前库 jedis.flushDB(); /* //添加值 jedis.hset("student", "name", "关羽"); //取值打印 System.out.println(jedis.hget("student", "name"));*/ //排序 jedis.lpush("nums","1","3","5","9","2","6"); System.out.println(jedis.lrange("nums", 0, -1)); //升序 System.out.println(jedis.sort("nums")); //降序,获取排序参数 SortingParams sortingParams = new SortingParams(); sortingParams.desc();//将参数设置为降序 System.out.println(jedis.sort("nums", sortingParams)); System.out.println("=================================================="); //根据首字母排序 jedis.lpush("everyNames","hong","dong","huang","am","fi"); SortingParams sortingParams1 = new SortingParams(); sortingParams1.alpha(); sortingParams1.asc();//按字母升序a,b,c System.out.println(jedis.sort("everyNames",sortingParams1)); jedis.close(); jedisPool.destroy(); }
(5)测试事务
@Test public void testTransaction()throws Exception{ //获取jedis的连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig(); //设置最大连接对象 config.setMaxIdle(2); //设置连接的条数 config.setMaxTotal(10); //获取连接池对象 JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123"); //获取jedis对象 Jedis jedis = jedisPool.getResource(); //清空当前库 jedis.flushDB(); jedis.set("name", "anjela"); jedis.set("age", "18"); //开启事务,获取事务对象 Transaction transaction = jedis.multi(); //对值加1操作 transaction.incr("name");//失败 transaction.incr("age");//成功 //提交事务,返回操作结果集 List<Object> list = transaction.exec(); System.out.println(list); jedis.close(); jedisPool.destroy(); }
5.redis持久化配置
持久化:坚持多久?no ,指把数据保存到磁盘的过程就称为持久化
5.1. RDB模式
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
如何关闭 rdb 模式:
save ""
# save 900 1 //至少在900秒的时间段内至少有一次改变存储同步一次
# save xxx
# save 60 10000
5.2. AOF追加模式
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
如何开启aof模式:
appendonly yes //yes 开启,no 关闭
# appendfsync always //每次有新命令时就执行一次fsync
#这里我们启用 everysec
appendfsync everysec //每秒 fsync 一次
# appendfsync no //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)
其它的参数请大家看redis.conf配置文件详解