redis的入门学习

来源:互联网 发布:java高级工程师课程 编辑:程序博客网 时间:2024/05/22 12:54

一、redis的概述

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis的特点
1. redis是远程的
2. redis是基于内存的,速度快,但占内存
3. redis是非关系型数据库

redis的应用场景
1. 缓存系统
2. 队列(list数据结构中有pop,push操作)
3. 数据存储,非关系型数据库

二、redis的安装和使用

2.1 redis的安装(Linux下)

  1. 可以直接从redis的官网进行下载:https://redis.io/download
  2. 或者直接使用命令下载,并安装
$ wget http://download.redis.io/releases/redis-4.0.2.tar.gz$ tar xzf redis-4.0.2.tar.gz$ cd redis-4.0.2$ make
  1. 需要注意的是:在安装redis之间需要安装gcc,如果没有安装,请先安装gcc,可以使用命令快速安装:

    yum install gcc

  2. 后台开启redis的服务,需要提前修改redis的配置文件redis.config(在redis的安装目录下),找到daemonize,将no改成yes,保存之后退出,就可以使用命令进行后台登录了:
    ./src/redis-server redis.config

  3. 安装PHP-redis的扩展

    • 查看PHP已安装扩展的命令:php -m

2.2 redis的安装(windows下)

  • 直接下载安装包,解压即可以使用了
  • 先打开redis-server.exe,再打开redis-cli.exe,就可以使用了。(是不是很简单,赶快往下学吧!)

apt-get install gcc

2.2 运行redis

在redis的安装目录下会出现src目录,可以在redis安装目录下直接运行redis
1. src/redis-server 前台开启redis服务端
2. src/redis-server redis.conf 后台开启redis服务器
3. src/redis-cli 开启redis客户端
4. 关闭redis,在客户端中输入shutdown命令,即可关闭,也可以通过kill进程id来关闭redis。
5. ps -ef | grep redis 查看redis运行进程
6. netstat -nl | grep 6379 redis的默认端口:6379

2.3 redis基本命令

  • 设置参数

    set [key] [value]

  • 获取参数

    get [key]

  • 获取所有的键

    keys *

三、redis的数据结构

redis的常用数据结构有5种:string字符串,hash哈希,list列表,set集合,sorted-set有序集合

3.1 redis数据结构之字符串

  • set [key] [value] 设置键值
  • get [key] 获取值
  • getset [key] [new value] 先获取再修改值
  • del [key] 删除键
  • incr [key] [+/-数字]
  • decr [key] [+/-数字]
  • incrby [key] [数字]
  • decrby [key] [数字]

3.2 redis数据结构之哈希

  • hset [hash] [key] [value] 设置键值
  • hset [hash] [key1] [value1] [key2] [value2]设置多对键值
  • hget [hash][key] 获取值
  • hgetall [hash]获取所有键值
  • hdel [hash] [key]删除键
  • hincr [hash] [key] [+/-数字]
  • hdecr [hash] [key] [+/-数字]
  • hincrby [hash] [key] [数字]
  • hdecrby [hash] [key] [数字]

3.3 redis数据结构之list

list主要分为ArrayList使用数组方式和LinkedList使用双向链表方式
* lpush mylist a b c 从左边添加元素
* rpush mylist 1 2 3 从右边添加元素
* lrange mylist 0 -1 从左边开始输出第0个到倒数第1个元素(-1表示最后一个元素)
* lpop mylist 弹出列表左边第一个元素
* rpop mylist 弹出列表右边第一个元素
* llen mylist 输出列表的长度
* lpushx mylist x 向已经存在的列表左边插入一个元素
* rpoplpush mylist1 mylist2 从列表1的右边弹出一个元素放入列表2的左边

3.4 redis数据结构之set

  • sadd myset a b c 创建序列并添加元素(如果集合中已经有的元素,不会重复添加)
  • smemebers myset 输出集合中的所有元素
  • sismember myset a 判断元素a是否为序列中的元素(0-否,1-是)
  • sdiff/sdiffstore myset1 myset2 求两者的差集(差集的一点注意事项。sdiff ma2 mb2 和sdiff mb2 ma2结果是不一样。前者是ma2-mb2=c 后者的结果:mb2-ma2=1 2;)
  • sinter/sinterstore myset1 myset2 求两者的并集
  • sunion/sunionstore myset1 myset2 求两者的交集
  • srandmember myset 从集合中随机获取一个元素

存储set的使用场景
1. 跟踪一些唯一性数据
2. 用于维护数据对象之间的关联关系

3.5 redis数据结构之sorted-set

1. sorted-set和set的区别:
sorted-set中的成员在集合中的位置是有序的

2. 存储sorted-set的使用场景
1. 游戏积分排名
2. 微博热点排名
3. 构建索引数据

  • zadd mysort [score] [name] 创建并添加元素(包括分数和名称)
  • zscore mysort [name] 获取有序集合中某个人的分数
  • zcard mysort 获取有序集合的长度

四、redis的通用操作命令

  • keys * 查看所有键
  • keys my* 查看所有以my开头的键
  • del [key] 删除键
  • exists [key] 判断键是否存在
  • rename [kew_name] [key_newname] 修改键的名称
  • expire [key] [number] 设置键的有效期
  • ttl [key] 查看键的有效期
  • type [key] 查看键的所属类型
  • flushall 清除数据库中所有键值

五、redis的特性

  • 多数据库(1个客户端可以提供16个数据库,默认连接的是0号数据库)
    1. select [number] 切换数据库
    2. move [key] [number] 移动键到其他数据库中
  • 支持事务
    1. exec 提交事务
    2. discard 事务回滚
    3. multi 开启事务

六、redis的持久化

持久化:将在内存中的数据存放到硬盘中

6.1 持久化的方式

  • RDB持久化:默认支持,在指定的时间间隔将内存中的快照写入硬盘一次;

    1. 优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件),开机时间短。

    2. 劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的。也就是积攒的数据比较多,一旦懵逼,就彻底懵逼了

  • AOF持久化:以日志的形式,记录每一个操作,服务器启动后就会自动构建数据库
    1. 优势:通过日志记录每一个操作,更安全。
    2. 劣势:效率较低,开机时间较长。
  • 无持久化:需要手动配置
  • *

七、使用Jedis来操作redis

1、导入JAR包
commons-pool2-2.4.2.jar,jedis-2.9.0.jar

2、编写代码

package com.imooc.redis;import org.junit.Test;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class redisDemo {    @Test    /**     * redis的单实例     */    public void demo1(){        //1.设置IP地址和端口        Jedis jedis = new Jedis("127.0.0.1", 6379);        //2.保存数据        jedis.set("age", "25");        //3.获取数据        String s = jedis.get("age");        System.out.print(s);        //4.释放资源        jedis.close();    }    @Test    /**     * 连接池的方法连接     */    public void demo2(){        //1、获得连接池的配置对象        JedisPoolConfig config = new JedisPoolConfig();        //设置最大连接数        config.setMaxTotal(30);        //设置最大空闲连接数        config.setMaxIdle(10);        //获得连接池        JedisPool pool = new JedisPool(config,"127.0.0.1",6379);        //获得核心对象        Jedis jedis = null;        try {            //通过连接池获得连接            jedis = pool.getResource();            //设置数据            jedis.set("name", "imooc");            //3.获取数据            String s = jedis.get("name");            System.out.print(s);        } catch (Exception e) {            e.printStackTrace();        } finally{            //释放资源            if(jedis != null)                jedis.close();            if(pool != null)                pool.close();        }    }}

八、总结

  1. NoSQL(非关系型数据库):

    • redis:key/value键值对存储数据库

    • mongodb:文档型数据库

    • hbase:列式数据库

  2. redis数据结构: String Hash Set SortedSet List

  3. redis事务:multi exec discard

  4. redis 持久化: rdb内存快照 aof命令日志

原创粉丝点击