redis入门

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.它提供了JavaC/C++C#PHPJavaScript等客户端,使用很方便。

5.Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

6.支持持久化,可以将数据保存在硬盘的文件中

7.支持订阅/发布(subscribe/publish)功能 QQ

总结:

1) 数据存储:存放在内存,还支持持久化.-存取速度快,并发能力强,数据安全性高

2) 支持value类型

3) 支持多个语言客户端

4) 还支持集群(支持高并发,海量数据)

1.1. MysqlMemcachedRedis的比较

mysql

redis

memcached

类型

关系型

非关系型

非关系型

存储位置

磁盘

磁盘和内存

内存

存储过期

不支持

支持

支持

读写性能

非常高

非常高

redis支持数据存储类型比memcached

存储过期:

一个数据存储是为他设置过期时间,时间一到数据就没有. 道具,会员,优惠券,订单,红包

redismemcached的系统点和不同点?   你有用过memcached?

 相同点:都是key-valueNosql,数据存储在内存中,读写效率高,都支持存储过期.

 不同点:

(1) redis支持持久化

(2) redis支持存储类型更多

 3.安装Redis服务端

1.Redis 的官方下载站是 http://redis.io/download,可以去上面下载最新的安装程序下来

http://redis.cn/

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配置文件详解

 

原文地址:https://www.cnblogs.com/19930909a/p/12069631.html