zoukankan      html  css  js  c++  java
  • redis 非关系型数据库

    redis

    redis是NOSQL系列的非关系型数据库;NOSQL表示not only sql,就是非关系型数据库。

    非关系型数据库:

    • 存储的是key和value形式(redis),还有文档形式(MongoDB),等等。数据之间没有关系。
    • 数据存储在内存中,提高检索效率(redis做缓存)

    redis应用场景:

    • 缓存(商品、新闻)
    • 任务队列(车票、抢购)
    • 排行榜
    • 等等

    redis的数据结构:

    • redis存储的是键值对,其中key都是字符串,value有5中不同的数据结构
    • 字符串类型 string
    • 哈希类型 hash:
    • 列表类型 list
    • 集合类型 set
    • 有序集合类型 sortedset

    安装

    下载从redis官方,或者redis中文网;解压后可以直接使用,其中的文件有:

    • redis.windows.conf 配置文件
    • redis-server.exe 服务器端
    • redis-cli.exe 客户端(先打开服务器端,再打开客户端 自动连接)

    命令操作

    1. 字符串

      • 存储set key value
      • 获取get key
      • 删除del key
      set username zhangsan
      get username
      del username
      
    2. 哈希类型 (field和value相当于哈希的键值对,可以存储多个)

      • 存储hset key field value
      • 获取hget key field
      • 获取所有hgetall key
      • 删除hdel key field
      hset id1 username zhangsan
      hset id1 age 23
      hget id1 username
      hdel id1 age
      hdel id1
      
    3. 列表类型(可以从左边或右边添加)

      • 添加lpush key value 或者rpush key value
      • 获取lrange key start end ,如lrange mylist 0 -1表示获取所有元素
      • 删除lpop key或者rpop key
    4. 集合类型

      • 存储sadd key vlaue
      • 获取smembers key
      • 删除srem key value
    5. 有序集合

      • 存储zadd key score value 按照score排序
      • 获取zrange key start end
      • 删除zrem key value

    通用命令

    1. keys * 查询所有键
    2. type key获取键的类型
    3. del key删除键值对

    持久化

    redis是一个内存数据库,当redis服务重启,数据会丢失,因此可以将数据保存到硬盘,叫持久化。但是不能保证绝对安全,因为持久化是按时间等设置的。

    持久化机制:

    1. RDB:默认方式,不需要进行配置,默认就使用这种机制(产生一个rdb文件)
      • 使用方式:在一定的间隔时间内,检测key的变化情况,然后持久化数据
        • 打开redis.windows.conf文件,
        • 修改/添加 save 900 1(表示如果1个key发生改变,900秒持久一次)
        • 用命令启动redis:redis-server.exe redis.windows.conf
    2. AOF:日志记录的方式,可以记录每一条命令的操作,可以每次命令操作后,持久化数据,产生一个aof文件。对性能有影响,使用方式:
      • 修改配置文件redis.windows.conf,将appendonly no改成appendonly yes
      • 修改appendfsync
        • appendfsync everysec 默认,每秒持久化一次
        • appendfsync always 每一次操作都进行持久化
        • appendfsync no 不持久化
      • 用命令启动redis:redis-server.exe redis.windows.conf

    Java操作

    Jedis:一款java操作redis数据库的工具。

    使用步骤:

    1. 导入jedis的jar包
    2. 获取连接 Jedis jedis = new Jedis("localhost", 6379); (指定IP和端口)
    3. 操作 jedis.set("username", "zhangsan"); (和命令操作差不多)
    4. 关闭连接 jedis.close();

    特殊操作

    存储过期时间,存储一段时间自己消失,如手机验证码:

    jedis.setex("activecode", 20, "asdf") (存储20秒,键值对为activecode:asdf)

    jedis连接池

    jedis自带连接池,作用和jdcb连接池一样。

    使用:

    1. 创建连接池对象JedisPool jdisPool = new JedisPool("localhost", 6379);
    2. 调用方法,获取jedis连接Jedis jedis = jedisPool.getResource();
    3. 操作
    4. 关闭连接jedis.close(); (归还到连接池中)
    5. 关闭连接池

    连接池创建时,可以指定配置参数,如下:(具体配置参考配置文件)

    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50); // 最大连接
    config.setMaxIdle(10); // 最大空闲连接
    JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
    

    jedis工具类

    把配置存在一个配置文件,然后把连接池、创建连接对象等操作放在工具类里面。

    步骤:

    1. 将配置文件jedis.properties放在src目录下,修改配置文件。
    2. 创建JedisPoolUtils工具类,代码如下:
    public class JedisPoolUtils {
        private static JedisPool jedisPool;
    
        static {
            // 读取配置文件
            InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
            Properties pro = new Properties();
            try {
                pro.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 创建配置对象
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
            config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
            // 初始化连接池
            jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
        }
    
        public static Jedis getJedis() {
            return jedisPool.getResource();
        }
    
        public static void close(Jedis jedis) {
            jedis.close();
        }
    }
    

    案例:下拉框中的省份,使用ajax+redis技术

    1. html代码:
      • 下拉框使用ajax技术(js代码):当选择下拉框时,从findProvinceServlet中查找所有省份;
    2. findProvinceServlet代码:
      • 调用ProvinceService查询所有省份
      • 将数据序列化json格式
      • 响应数据
    3. ProvinceService代码:
      • 先从redis缓存中查找,如果有直接返回,否则调用ProvinceDao从数据库中查找
    4. ProvinceDao代码:
      • 从mysql数据库中查询所有省份
  • 相关阅读:
    调用Win32 API netapi32.dll 实现UNC(网络共享)连接的管理(一)
    一个重写Page基类的例子
    36进制进位算法例子
    关于.net 中调用script的alert后 css失效的办法
    Javascript:keyCode键码值表
    Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
    在.NET程序中正确使用String类型
    Sql Server中自动序号的方法
    托管和非托管的关系和区别
    Oracle 格式化
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13515012.html
Copyright © 2011-2022 走看看