(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等
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支持存储类型更多
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
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(); }
持久化:坚持多久?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配置文件详解
原文:https://www.cnblogs.com/19930909a/p/12069631.html