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

原文地址:https://www.cnblogs.com/liuzhipeng/p/8108862.html