1. 程式人生 > >學習筆記--Redis

學習筆記--Redis

有一個 快照 option key 可擴展 分離 -s ktr expire

Redis

NoSQL概述

什麽是NoSQL

  • NoSQL = Not Only SQL
  • 非關系型的數據庫

為什麽需要NoSQL

  • High performance 高並發讀寫
  • Huge Storage 海量數據的高效率存儲和訪問
  • High Scalability && High Availability 高可擴展性和高可用性

NoSQL數據庫的四大分類

  • 鍵值存儲
  • 列存儲
  • 文檔存儲
  • 圖形存儲

NoSQL特點

  • 易擴展
  • 靈活的數據模型
  • 大數據量,高性能
  • 高可用

Redis概述

高性能鍵值對數據庫,支持的鍵值數據類型

  • 字符串類型
  • 散列類型
  • 列表類型
  • 集合類型
  • 有序集合類型

Redis應用場景

  • 緩存
  • 任務隊列
  • 應用排行榜
  • 網站訪問統計
  • 數據過期處理
  • 分布式集群架構中的session分離

Redis安裝

linux下安裝redis

  • 安裝gcc-c++
  • make
  • make PREFIX=/home/programs/redis install
  • 復制redis.conf
  • 修改redis.conf
  • 啟動./bin/redis-server ./redis.conf
  • 關閉 ./bin/redis-cli shutdown

Jedis

簡單示例

依賴

        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.0</version>
        </dependency>

示例

/**
* Jedis的測試
* Created by qy_lu on 2018/1/7.
*/
public class JedisTest1 {

    private static final String HOST = "192.168.31.100";
    private static final int PORT = 6379;

    /**
    * 單實例的測試
    */
    @Test
    public void test1() {
        // 1.設置IP地址和端口
        Jedis jedis = new Jedis(HOST, PORT);
        // 2.保存數據
        jedis.set("name", "imooc");
        // 3.獲取數據
        String value = jedis.get("name");
        System.out.println(value);
        // 4.釋放資源
        jedis.close();
    }


    @Test
    /**
    * 使用連接池
    */
    public void test2() {
        // 獲得連接池的配置對象
        JedisPoolConfig config = new JedisPoolConfig();
        // 設置最大連接數
        config.setMaxTotal(30);
        // 設置最大空閑連接數
        config.setMaxIdle(10);

        // 獲得連接池
        JedisPool jedisPool = new JedisPool(config, HOST, PORT);
        // 獲得核心對象
        Jedis jedis = null;
        try {
            // 通過連接池獲得連接
            jedis = jedisPool.getResource();
            // 設置數據
            jedis.set("name", "zhangsan");
            // 獲取數據
            String value = jedis.get("name");
            System.out.println(value);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 釋放資源

            if (jedis != null) {
                jedis.close();
            }
            if (jedisPool != null) {
                jedisPool.close();
            }
        }
    }
}

Redis的數據結構

key

  • 不要太長
  • 不要太短
  • 統一的命名規範

存儲String

賦值

set company imooc      
get company
getset company baidu   //取company的值並將company的值設為baidu
del company
incr person   //將person遞增1,空為0再遞增
decr person  //將person遞減1
incrby num 5  //將num加5
decrby num 5   //將num減5
append num 5  //在num末尾追加字符5

存儲Hash

hset myhash username jack
hset myhash age 18
hmset myhash2 username rose age 21
hget myhash username
hmget myhash username age
hgetall myhash
hdel myhash username
del myhash
hincrby myhash age 5  //myhash中的age的值增加5
hexists myhash username  //myhash中是否存在username
hlen myhash  //獲取myhash中key的數量
hkeys myhash  //獲取myhash中所有的key
hvals myhash  //獲取myhash中所有的val

存儲list

lpush mylist a b c        //從左邊壓入元素
rpush mylist2 a b c    //從右邊壓入元素
lrange mylist 0 5       //列出索引位置在0(start)和5(end)之間的元素
lrange mylist 0 -1     //也可以用-1表示從末端算起第幾位
lpop mylist     //從左邊彈出一個元素
rpop mylist   //從右邊彈出一個元素
llen mylist   //獲取列表的元素數量
lpushx mylist x    //將元素插入到列表的頭部,若mylist不存在則不插入
lrem mylist 2 3     //從前往後刪除2個3
lrem mylist -2 3     //從後往前刪除2個3
lrem mylist 0 3     //刪除列表裏所有的3
lset mylist 3 x   //將索引為3的位置的值設置為x
linsert mylist before b 11   //在第一個b之前插入11
linsert mylist after b 22  //在第一個b之後插入22
rpoplpush mylist1 mylist2   //將mylist1的最右邊元素彈出並壓入mylist2的最左邊

存儲set

sadd myset a b c  //增加
srem myset a b  //刪除
smembers myset   //查看所有
sismember myset a   //a是否存在myset中
sdiff mya1 myb1    //mya1和myb1的差集,mya1中有的,myb1中沒有的元素
sinter mya1 myb1  //求交集
sunion mya1 myb1  //求並集
scard myset   //集合中元素數量
srandmember myset  //隨機返回一個元素
sdiffstore  my1 mya1 myb1   //將mya1和myb1的差集存到my1
sinterstore my1 mya1 myb1   //將mya1和myb1的交集存到my1
sunionstore my1 mya1 myb1   //將mya1和myb1的並集存到my1

存儲Sorted-set

zadd mysort 70 zs 80 ls 90 ww    //增加給定評分的值
zadd mysort 100 zs   //新的評分會覆蓋舊的
zscore mysort zs   //獲得zs的分數
zrem mysort ls ww    //刪除元素
zcard mysort   //元素數量
zrange mysort 0 -1     //列出元素
zrange mysort 0 -1 withscores   //列出元素並帶分數
zrevrange mysort 0 -1 withscores    //按分數從大到小列出元素
zremrangebyrank mysort 0 4  //刪除範圍內的元素
zremrangebyscore mysort 80 100   //按分數範圍刪除元素
zrangebyscore mysort 0 100  //列出分數範圍內的元素
zrangebyscore mysort 0 100 withscores    //列出分數範圍內的元素並帶分數
zrangebyscore mysort 0 100 withscores limit 0 2     //列出分數範圍內的前n個元素並帶分數
zincrby mysort 3 ls   //給ls的分數增加3
zcount mysort 80 100   //分數範圍內的元素數量

keys通用操作

keys *
keys my?
del my1 my2 my3
exists my1
exists mya1
rename key1 key2
expire key1 1000   //設置過期時間
ttl key1  //剩余時間
type key1  //key1的類型

Redis特性

多數據庫

0 - 15數據庫實例

select 0  //使用0號數據庫
select 1
move myset 1   //將myset移動到1號數據庫

事務

multi    //開啟事務
exec     //命令被原子化執行
discard     //回滾

Redis持久化

  • RDB持久化
  • AOF持久化
  • 無持久化
  • 同時使用RDB和AOF持久化

    RDB持久化

    默認使用RDB
    將內存快照定時寫到硬盤
    只有一個文件
    redis.conf配置

    AOF持久化

    記錄操作日誌
    redis.conf配置

Spring Data Redis

Maven配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qyluo.redis</groupId>
    <artifactId>redis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>redis-demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

學習筆記--Redis