zoukankan      html  css  js  c++  java
  • redis的学习笔记

    参考: http://www.redis.cn/

    redis常用数据结的存取数据方法

    字符串类型  string

    散列类型  hash

    列表类型  list

    集合类型   set

    有序集合类型 sortedset

     应用场景

    缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)

    分布式集群架构中的session分离。

    聊天室的在线好友列表。

    任务队列。(秒杀、抢购、12306等等)

    应用排行榜。

    网站访问统计。

    数据过期处理(可以精确到毫秒)

    redis安装环境

    gcc:yum install gcc-c++

    http://download.redis.io/releases/redis-3.0.0.tar.gz

    将redis-3.0.0.tar.gz拷贝到/usr/local下

      tar -zxvf redis-3.0.0.tar.gz  

    cd /usr/local/redis-3.0.0

      make

    cd /usr/local/redis-3.0.0

       make PREFIX=/usr/local/redis install

    cd /usr/local/redis

       mkdir conf

       cp /usr/local/redis-3.0.0/redis.conf  /usr/local/redis/bin

    启动,

    daemonize yes 以后端模式启动。

    ./bin/redis-server ./redis.conf

    停止

    ./bin/redis-cli shutdown

    连接

    ./redis-cli -h 192.168.200.137 -p 6379

    192.168.200.137:6379> ping

    PONG

    192.168.200.137:6379> set name zhangsan 

    ok

    192.168.200.137:6379>  get name

    "zhangsan"

    多数据库

    192.168.200.137:6379> select 1

    ok

    192.168.200.137:6379> get name

    (nil)

    注:flushall 会清空当前实例, 也就是清空0~15的数据库

    Jedis连接redis单机

    pom坐标:

       <dependency>

              <groupId>redis.clients</groupId>

              <artifactId>jedis</artifactId>

              <version>2.7.0</version>

          </dependency>

    commons-pool12-2.3.jar

    jedis-2.7.0.jar

    @Test
        public void testJedisSingle() {
    
            Jedis jedis = new Jedis("192.168.101.3", 6379);
            jedis.set("name", "bar");
            String name = jedis.get("name");
            System.out.println(name);
            jedis.close();
    
        }
    
    
    @Test
        public void pool() {
            JedisPoolConfig config = new JedisPoolConfig();
            //最大连接数
            config.setMaxTotal(30);
            //最大连接空闲数
            config.setMaxIdle(2);
            
            JedisPool pool = new JedisPool(config, "192.168.101.3", 6379);
            Jedis jedis = null;
    
            try  {
                jedis = pool.getResource();
                
                jedis.set("name", "lisi");
                String name = jedis.get("name");
                System.out.println(name);
            }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                if(jedis != null){
                    //关闭连接
                    jedis.close();
                }
            }
            
        }

     jedis与spring整合

    <!-- 连接池配置 -->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <!-- 最大连接数 -->
            <property name="maxTotal" value="30" />
            <!-- 最大空闲连接数 -->
            <property name="maxIdle" value="10" />
            <!-- 每次释放连接的最大数目 -->
            <property name="numTestsPerEvictionRun" value="1024" />
            <!-- 释放连接的扫描间隔(毫秒) -->
            <property name="timeBetweenEvictionRunsMillis" value="30000" />
            <!-- 连接最小空闲时间 -->
            <property name="minEvictableIdleTimeMillis" value="1800000" />
            <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
            <property name="softMinEvictableIdleTimeMillis" value="10000" />
            <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
            <property name="maxWaitMillis" value="1500" />
            <!-- 在获取连接的时候检查有效性, 默认false -->
            <property name="testOnBorrow" value="true" />
            <!-- 在空闲时检查有效性, 默认false -->
            <property name="testWhileIdle" value="true" />
            <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
            <property name="blockWhenExhausted" value="false" />
        </bean>
        
        <!-- redis单机 通过连接池 -->
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close">
            <constructor-arg index="0" ref="jedisPoolConfig"></constructor-arg>
            <constructor-arg index="1" value="192.168.101.3"></constructor-arg>
            <constructor-arg index="2" value="7001"></constructor-arg>
        </bean>
    private ApplicationContext applicationContext;
    
        @Before
        public void init() {
            applicationContext = new ClassPathXmlApplicationContext(
                    "classpath:applicationContext.xml");
        }
    
        @Test
        public void testJedisPool() {
        JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
                try  {
                jedis = pool.getResource();
                
                jedis.set("name", "lisi");
                String name = jedis.get("name");
                System.out.println(name);
            }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                if(jedis != null){
                    //关闭连接
                    jedis.close();
                }
            }
        }

    命令

    --String  SDS(simple dynamic string)即简单动态字符串

    递增, 递减, 追加, 长度, 

    set key value

    get key      当键不存在时返回空结果。(nil)

    incr key      返回递增后的值, 不支持递增会报错, incr key [num]

    decr key

    append  key value  向值的末尾追加value,返回加后字符串的总长度

    strlen key      获取值的长度

    mset key1 value [key2 value ...]

    mget key1 key2 key3...

    --Hash

    设置字段值, 字段是否存在, 字段值自增, 带条件设置字段值, 获取字段名, 获取字段值, 获取字段个数

    hset key field value  HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1当执行更新操作时返回0.

    get key field

    hmset key field1 value1 [field2 value2....]

    hmget key field1 [dield2]

    hgetall key

    hexists key field    判断字段是否存在返回1, 不存在返回0

    hsetnx key field value  当字段不存在时赋值返回1,类似HSET,区别在于如果字段已经存在,该命令不执行任何操作返回0。

    hincrby user age 5   将用户的年龄加2

    hdel key field1 [dield2...]

    hkeys key

    hvals key

    hlen key

    --List 列表 有序不唯一

    向左或右添加value, 从左或右弹出value, 获取个数, 查看某一段

    获取某个位置的value, 设置某个位置的value

    只保留某一段, 插入都某个value的前或后面, 移动元素到另一个列表

    lpush key value [value....]

    rpush key value [value....]

    lpop key

    rpop key

    llen key 

    lrange key 2 -1    取出一个片段索引2到最后

    lrem key count value  删除count个vlaue, 正从前开始,负从后开始,0删除所有值为value的字段

    lindex key index    获取指定索引的value值

    lset key index value  设置指定索引的value值

    ltrim key start stop   只保留列表指定片段

    linset key before|after value anthervalue  从左往右查找value, 把anthervalue插入before或者after

    rpoplpush source destination  将元素从一个列表转移到另一个列表中

    --set 集合 无须唯一

    加入, 删除, 判断是否存在,  获取个数

    集合之间的交集, 并集, 差集

    sadd key member [member...]  有改变返回有效的个数, 否则返回0个

    srem key member [member..]  返回成功随机删除的个数, 否则返回0个

    smembers key

    sismember  key value  是否存在value, 返回1, 不存在返回0

    sdiff key1 key2     返回key1中独有的元素key1-key2

    sinter set1 set2     返回set1和set2的交集

    sunion setA setB     返回setA 和 setB的并集(出重复的元素)

    scard key        获取个数

    spop key        从集合中随机选择一个元素弹出

    --sorted set  有序集合类型为集合中的每个元素都关联一个分数

    添加, 获取元素分数, 根据索引范围查, 根据分数范围查

    给元素加分数,  获取元素个数, 获取某个分数范围的个数

    zadd key score member [score member ...]

    zscore key member      获取 元素 分数

    zcount key min max      获取 分数范围内 元素个数

    zrank key member         获取 元素 索引 

    zrevrank key member      获取 元素 倒排索引

    zincrby key score member   给member加incremen分数, 返回加后的分数

    zrange key start stop [withscores]  分数从小到大 索引从start到stop之间的所有元素(包含两端的元素)

    zrevrange key start stop      分数从大到小 索引从start到stop之间的所有元素(包含两端的元素)

    zrangebyscore key min max withscores limit 0 5   分数从min到max的元素, 从0个开始查5个  

            

    zcard key            获取元素的个数

    zremrangebyrank key start stop  按排序范围删除

    zremrangebyscore key min max  按分数范围删除

    --keys

    expire key seconds  设置key的生存时间

    ttl key        查看剩余的时间

    persist key      清楚生存时间

    pexpire key milliseconds  生存时间设置单位为: 毫秒

    keys my*

    exists key

    del key

    rename key

    type key

    dbsize  当前数据库的key的个数

    info

    flushdb

    flushall

  • 相关阅读:
    打包和调试静态库(2)
    打包和调试静态库(1)
    Xcode7--免证书真机调试
    开发者账号申请附录
    AFN3.0封装
    MPMoviePlayerController属性,方法,通知整理
    排序算法03--选择排序
    排序算法02--冒泡排序
    遇到别人留下的storyboard的,你需要一个引导图,但是不知道怎么跳转.
    将UIview描画成虚线等.
  • 原文地址:https://www.cnblogs.com/liuzhipeng/p/8108862.html
Copyright © 2011-2022 走看看