zoukankan      html  css  js  c++  java
  • Java学习日记之Redis

    Redis

      一、概念

        redis是一款高性能的NOSQL的非关系型数据库

      二、下载安装

        1.官网:https://redis.io

         2.中文网:https://www.redis.net.cn

         3.解压后可直接使用:

          * redis.windows.conf:配置文件

          * redis-cli.exe:redis的客户端

          * redis-server.exe:redis的服务器端

      三、命令操作

         1.redis的数据结构:

          * redis存储的是key,value格式的数据,其中key都是字符串,value有五种不同的数据类型

            * value的数据类型:

              1) 字符串类型:string

              2) 哈希类型:hash:map

              3) 列表类型:list:linkedlist格式

              4) 字符串类型:set:

              5) 字符串类型:sortedset

         2.字符串类型 string

              1) 存储:set key value

              2) 获取:get key

              3) 删除:del key

    127.0.0.1:6379> set usename zhangsan
    OK
    127.0.0.1:6379> get usename
    "zhangsan"
    127.0.0.1:6379> set pwd 123
    OK
    127.0.0.1:6379> get pwd
    "123"
    127.0.0.1:6379> del pwd
    (integer) 1
    127.0.0.1:6379> get pwd
    (nil)  //表示为空

         3.哈希类型 hash

                1) 存储:hset key field value

              2) 获取:

                  * hget key field:获取指定的field对应的值

                  * hgetall key :获取所有的field和value

              3) 删除:hdel key field

    127.0.0.1:6379> hset myHash username zhangsan
    (integer) 1
    127.0.0.1:6379> hset myHash username lisi
    (integer) 0
    127.0.0.1:6379> hset myHash pwd 123
    (integer) 1
    127.0.0.1:6379> hget myHash pwd
    "123"
    127.0.0.1:6379>
    127.0.0.1:6379> hdel myHash username
    (integer) 1
    127.0.0.1:6379> hget myHash username
    (nil)

         4.列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)

                1) 存储:

                  *lpush key value:将元素加入列表左边

                  *rpush key value:将元素加入列表右边

              2) 获取:

                  * lrange key start end:范围获取[ 获取所有:0 -1 (-1代表最后一个、-2代表倒数第二个,以此类推) ]

              3) 删除:

                  *lpop key :删除列表最左边的元素,并将该删除的元素返回

                  *rpop key :删除列表最右边的元素,并将该删除的元素返回

    127.0.0.1:6379> lpush myList a
    (integer) 1
    127.0.0.1:6379> lpush myList b a
    (integer) 3
    127.0.0.1:6379> rpush myList c
    (integer) 4
    127.0.0.1:6379> lrange myList 0 -1
    1) "a"
    2) "b"
    3) "a"
    4) "c"
    127.0.0.1:6379> rpop myList
    "c"
    127.0.0.1:6379> lpop myList
    "a"
    127.0.0.1:6379> lrange myList 0 -1
    1) "b"
    2) "a"
    127.0.0.1:6379> llen myList
    (integer) 2

         5.哈希类型 set:不允许重复元素

                1) 存储:sadd key value

              2) 获取:smembers key:获取set集合中所有元素

              3) 删除:srem key value:删除set集合中的某个元素

    127.0.0.1:6379> sadd mySort a b c
    (integer) 3
    127.0.0.1:6379> smembers mySort
    1) "c"
    2) "b"
    3) "a"
    127.0.0.1:6379> sadd mySort cc ss
    (integer) 2
    127.0.0.1:6379> smembers mySort
    1) "c"
    2) "b"
    3) "a"
    4) "cc"
    5) "ss"
    127.0.0.1:6379> srem mySort ss
    (integer) 1
    127.0.0.1:6379> smembers mySort
    1) "cc"
    2) "a"
    3) "b"
    4) "c"
    127.0.0.1:6379> srem mySort b
    (integer) 1
    127.0.0.1:6379> smembers mySort  //更改后再次查询顺序也随之改变
    1) "a"
    2) "c"
    3) "cc"

         6.哈希类型 sortedset:不允许重复元素,且元素有顺序

                1) 存储:zadd key score value

              2) 获取:zrange key start end

              3) 删除:zrem key value

    127.0.0.1:6379> zadd mySet 1 one
    (integer) 1
    127.0.0.1:6379> zadd mySet 2 two
    (integer) 1
    127.0.0.1:6379> zadd mySet 3 three
    (integer) 1
    127.0.0.1:6379> zrange mySet 0 -1
    1) "one"
    2) "two"
    3) "three"
    127.0.0.1:6379> zadd mySet 0 zore
    (integer) 1
    127.0.0.1:6379> zrange mySet 0 -1
    1) "zore"
    2) "one"
    3) "two"
    4) "three"
    127.0.0.1:6379> zrem mySet one
    (integer) 1
    127.0.0.1:6379>  zrange mySet 0 -1
    1) "zore"
    2) "two"
    3) "three"
    127.0.0.1:6379> zrange mySet 0 -1 withscores
    1) "zore"
    2) "0"
    3) "two"
    4) "2"
    5) "three"
    6) "3"

        7.通用命令

                1) keys *:查询所有的键

              2) type key:获取键对应的value的类型

              3) del key:删除指定的key value

      四、持久化

        1.redis是一个内存数据库

              当redis服务器重启,或者电脑重启,数据会丢失。我们可以将redis内存中的数据持久化保存到硬盘中。

        2.redis持久化机制

              1)RDB:默认方式(可能会丢失数据)

                * 在一定的间隔时间中,检测key的变化情况,然后持久化数据

                1. 编辑 redis.windows.conf

                  #   after 900 sec (15 min) if at least 1 key changed

                  save 900 1


                  #   after 300 sec (5 min) if at least 10 keys changed    

                  save 300 10

                  #   after 60 sec if at least 10000 keys changed
                  save 10 1

                2. 在命令行中输入 redis-server.exe redis.windows.conf 打开服务器端(持久化将会创建 dump.rdb 文件记录)

                3.重启redis服务器,查看持久化的数据

              2)AOF:(影响性能)

                * 日志方式的记录,可以记录每一条命令的操作。在每一次命令操作后,持久化数据

                1. 编辑 redis.windows.conf

                  appendonly no(关闭aof状态) -->  appendonly yes(打开aof状态)

                  # appendfsync always:每一次操作都进行持久化
                  appendfsync everysec:每隔一秒进行一次持久化
                  # appendfsync no:不进行持久化

                2. 在命令行中输入 redis-server.exe redis.windows.conf 打开服务器端(持久化将会创建 appendonly.aof 文件记录)

                3.重启redis服务器,查看持久化的数据

      五、Java客户端 Jedis

        * Jedis:一款Java操作redis数据库的工具

        * 使用步骤

          1. 下载jedis的jar包

            commons-pool2-2.3.jar

            jedis-2.7.0.jar

          2. 使用

            * Jedis jedis = new Jedis("localhost", 6379); //创建Jedis对象

            或 Jedis jedis = new Jedis(); //调用空构造器 默认 host:localhost, port:6379

            * 调用Jedis对象中的方法(方法名称和五种数据类型的命令操作一致

              以存储为例:

              String:jedis.set("name","zhangsan");

              Hash:jedis.hset("user","uname","zs");

              List:jedis.lpush("mylist","a","b","c");

              Set:jedis.sadd("myset","a","b");

              SortedSet:jedis.zadd("mySortedSet",90,"zs");

        * jedis连接池:JedisPool

          *使用:

            0.创建一个配置对象
                    JedisPoolConfig poolConfig = new JedisPoolConfig();

               //根据要求配置连接池的属性
                      poolConfig.setMaxTotal(50);
                    poolConfig.setMaxIdle(10);

               //将配置完的poolConfig加到jedisPool构造器参数中

              JedisPool jedisPool = new JedisPool(poolConfig,"localhost",6379);

            1.创建 JedisPool连接池对象
                   JedisPool jedisPool = new JedisPool();

            2.调用方法 getResource()方法获取Jedis连接

              Jedis jedis = jedisPool.getResource();

  • 相关阅读:
    [ASP.NET] 使用 ASP.NET SignalR 添加实时 Web
    [ORM] Entity Framework(2) CodeFirst进阶
    [ORM] Entity Framework(1) CodeFirst快速入门
    [C#] 谈谈异步编程async await
    [Solution] NPOI操作Excel
    消息队列二
    消息队列一
    redis成长之路——(七)
    redis成长之路——(六)
    redis成长之路——(五)
  • 原文地址:https://www.cnblogs.com/bird7/p/12764861.html
Copyright © 2011-2022 走看看