Redis介紹(六)

來源:互聯網
上載者:User

標籤:計數   開發   dev   in-memory   ase   tst   串連數   更新   efault   

Redis介紹
Redis 是一個速度非常快的非關聯式資料庫,它可以儲存鍵(key)與 5 種不同類型的值(value)之間的映射(mapping),可以將儲存在記憶體的索引值對資料持久化到硬碟,可以使用複製特性來擴充讀效能,還可以使用用戶端分區來擴充寫效能。為了滿足高效能,Redis 採用記憶體(in-memory)資料集(dataset)。根據使用情境,可以通過每隔一段時間轉儲資料集到磁碟,或者追加每條命令到日誌來持久化。持久化也可以被禁用,如果只是需要一個功能豐富,網路化的記憶體緩衝。
支援的資料類型包括:
    string(字串)    hash(雜湊)    list(列表)    set(集合)    zset(sorted set:有序集合)
優勢:
Redis 的優勢包括它的速度、它對富資料類型的支援、它的操作的原子性,以及它的通用性:    A、效能極高,它每秒可執行約 100,000 個 set 以及約 100,000 個 get 操作。    B、豐富的資料類型,Redis 對大多數開發人員已知道的大多數資料類型提供了原生支援,這使得各種問題得以輕鬆解決。    C、原子性,因為所有 Redis 操作都是原子性的,所以多個用戶端會並發地訪問一個 Redis 伺服器,擷取相同的更新值。    D、豐富的特性,Redis 是一個多效用工具,有非常多的應用情境,包括緩衝、訊息佇列(Redis 原生支援發布/訂閱)、       短期應用程式資料(如 Web 會話、Web 頁面命中計數)等。
spring-boot-starter-data-redis
Spring Boot 提供了對 Redis 整合的組件包: spring-boot-starter-data-redis 。spring-boot-starter-data-redis 依賴於 spring-data-redis  和 jedis 。A、Jedis:Jedis 是 Redis 的 Java 版用戶端實現,是官方推薦的 Java 版用戶端。它封裝了對 Redis 的各種操作,   並且支援事務、管道及有 Jedis 自身實現的分布式。B、Spring Data:Spring Data 是 Spring 架構中的一個主要項目,目的是為了簡化構建基於 Spring 架構應用的數   據訪問,包括非關聯式資料庫、Map-Reduce 架構、雲資料服務等,另外也包含對關聯式資料庫的訪問支援。C、Spring Data Redis :Spring Data Redis 是 Spring Data 項目中的一個主要模組,實現了對 Jedis 用戶端   API 的高度封裝,使對 Redis 的操作更加便捷。他們之間的關係:        Jedis -> Spring Data Redis -> Spring Data -> spring-boot-starter-data-redis        所以 Spring Data Redis 和 Jedis 具備的功能,spring-boot-starter-data-redis 都會有。
案例示範POM.XML *****我們使用的是1.5.8版本
    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.8.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-data-redis</artifactId>        </dependency>        <dependency>            <groupId>org.apache.commons</groupId>            <artifactId>commons-lang3</artifactId>            <version>3.6</version>        </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-devtools</artifactId>            <optional>true</optional>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <configuration>                    <fork>true</fork>                </configuration>            </plugin>        </plugins>    </build>
User類:
    public class User implements Serializable{        private Long id;        private String userName;        private String password;        private String email;        private String nickname;        private String regTime;                //setter、getter方法省略    }
RedisConfig類:
    @Configuration    @EnableCaching  //開啟緩衝    public class RedisConfig extends CachingConfigurerSupport{            @Bean        public KeyGenerator keyGenerator(){                return new KeyGenerator() {                @Override                public Object generate(Object targe, Method method, Object... params) {                    StringBuilder sb=new StringBuilder();                    sb.append(targe.getClass().getName());                    sb.append(method.getName());                    for(Object obj:params){                        sb.append(obj.toString());                    }                    return sb.toString();                }            };        }            @Bean        public CacheManager cacheManager(RedisTemplate redisTemplate){            RedisCacheManager rcm = new RedisCacheManager(redisTemplate);            rcm.setDefaultExpiration(60);            return rcm;        }    }
application.properties
    # Redis 資料庫索引(預設為0)    spring.redis.database=0      # Redis 伺服器位址    spring.redis.host=192.168.0.71    # Redis 伺服器串連端?口    spring.redis.port=6379      # Redis 伺服器串連密碼(預設為空白)    spring.redis.password=    # 串連池最?大串連數(使?用負值表?示沒有限制)    spring.redis.pool.max-active=8      # 串連池最?大阻塞等待時間(使?用負值表?示沒有限制)    spring.redis.pool.max-wait=-1      # 串連池中的最?大空閑串連    spring.redis.pool.max-idle=8      # 串連池中的最?小空閑串連    spring.redis.pool.min-idle=0      # 連線逾時時間(毫秒)    spring.redis.timeout=10000
TestRedisTemplate測試類別:
    @RunWith(SpringRunner.class)    @SpringBootTest    public class TestRedisTemplate {        @Autowired        private RedisTemplate redisTemplate;            @Test        public void testString(){            redisTemplate.opsForValue().set("kid","doudou");            Assert.assertEquals("doudou",redisTemplate.opsForValue());        }            //建立一個 User 對象,放到緩衝中,再取出來        @Test        public void testObj() throws InterruptedException{            User user=new User("[email protected]", "expire", "youknow", "expire","2020");            ValueOperations<String,User> operations=redisTemplate.opsForValue();            operations.set("expire",user,100, TimeUnit.MICROSECONDS);            Thread.sleep(1000);            boolean exists=redisTemplate.hasKey("expire");            if(exists){                System.out.println("exists is true");            }else{                System.out.println("exists is false");            }        }            @Test        public void testDelete() {            ValueOperations<String, User> operations=redisTemplate.opsForValue();            redisTemplate.opsForValue().set("deletekey", "ityouknow");            redisTemplate.delete("deletekey");            boolean exists=redisTemplate.hasKey("deletekey");            if(exists){                System.out.println("exists is true");            }else{                System.out.println("exists is false");            }        }            @Test        public void testHash() {            HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();            hash.put("hash","you","you");            String value=(String) hash.get("hash","you");            System.out.println("hash value :"+value);        }            @Test        public void testSet() {            String key="set";            redisTemplate.delete(key);            SetOperations<String, String> set = redisTemplate.opsForSet();            set.add(key,"it");            set.add(key,"you");            set.add(key,"you");            set.add(key,"know");            Set<String> values=set.members(key);            for (String v:values){                System.out.println("set value :"+v);            }        }            @Test        public void testSetMore() {            SetOperations<String, String> set = redisTemplate.opsForSet();            String key1="setMore1";            String key2="setMore2";            set.add(key1,"it");            set.add(key1,"you");            set.add(key1,"you");            set.add(key1,"know");            set.add(key2,"xx");            set.add(key2,"know");            Set<String> diffs=set.difference(key1,key2);            for (String v:diffs){                System.out.println("diffs set value :"+v);            }                String key3="setMore3";            String key4="setMore4";            set.add(key3,"it");            set.add(key3,"you");            set.add(key3,"xx");            set.add(key4,"aa");            set.add(key4,"bb");            set.add(key4,"know");            Set<String> unions=set.union(key3,key4);            for (String v:unions){                System.out.println("unions value :"+v);            }        }                @Test        public void testZset(){            String key="zset";            redisTemplate.delete(key);            ZSetOperations<String, String> zset = redisTemplate.opsForZSet();            zset.add(key,"it",1);            zset.add(key,"you",6);            zset.add(key,"know",4);            zset.add(key,"neo",3);                Set<String> zsets=zset.range(key,0,3);            for (String v:zsets){                System.out.println("zset value :"+v);            }                Set<String> zsetB=zset.rangeByScore(key,0,3);            for (String v:zsetB){                System.out.println("zsetB value :"+v);            }        }    }

Redis介紹(六)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.