Redis-操作

常用命令

Http://redisdoc.com/

set K1 V1
get K1
DBSIZE -- 当前库里有多少个数据
select 2 -- 选择3号库(默认有16个)

KEYS * : 查询库里所有key
FLUSHDB : 删除当前库里所有数据
FLUSHALL : 删除所有库里数据

Key和五大类型常用方法

Key

keys * -- 显示所有key 
exists K1 -- 判断K1是否存在
move K1 2  -- 将K1剪切,黏贴到库2
expire K1 2  -- K1 2秒后过期(key也会消失,相当于删除)
ttl K1 -- 查看K1还有多少秒过期
type K1 -- 查看K1存储的值是什么类型

------不常用------
del K1  --删除K1
rename K1 K2 --把K1改名为K2
renamenx K1 K2 --仅当K2不存在时,将K1改名为K2
RANDOMKEY -- 从当前数据库中随随机回一个key

String

-- 单值单value
set/get/del/append/strlen

一定要是数字才能进行加减
Incr/decr k1  -- k1++/k1--
incrby/decrby k1 2 -- k1+=2 / k1-=2

getrange k1 0 -1 -- 取出k1所有值(0,2,取出k1的0,1,2位)
setrange k1 0 xxx ---从第0位开始把前三位换成xxx

setex(set with expire) k1 10 v1 -- 相当于set k1 v1 + expire k1 10
setnx(set if not exist) k1 v1 -- 相当于if (get k1 == null)set k1 v1

mset(more set) k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k2 v2  -- 注意:如果有一个存在,则全部失效


getset(先get再set)

List

-- 单值多value

有则插入,无则创建+插入
LPUSH list01 1 2 3 4 5 --先进后出 
RPUSH list02 1 2 3 4 5 --先进先出

lrange list01 0 -1 -- 5 4 3 2 1
lrange list02 0 2 -- 1 2 3

lpop/rpop -- 从第一个弹/从最后一个弹
lpop list01 -- 5
rpop list02 -- 5

lindex list01 0 -- 1 //按照索引下标获得元素(从顶到底)
llen list01 -- 5 //长度

ltem list03 2 3 --删除列表里面2个3

ltrim list01 1 3 -- 截取list01的第2到第4个元素,并将它们赋给list01
此时list01 = 4,3,2

rpoplpush list01 list02 --先rpop list01,再lpush list02,即将最后的值弹出来压入别的栈顶

lset list01 1 x -- 将list01的第二个值(index = 1)设为x
此时list01:5 x 3 2 1

linsert key before(/after) x java -- 5 java x 3 2 1 

Set

单值多value(不允许重复)

sadd set01 1 1 2 2 3 3 --只会加入123
smembers set01 -- 1 2 3
sismember set01 x -- 查看set里是否有x,有则返回1,没有则返回0
scard set01 -- 3 // 集合个数

srem set01 2 -- 将集合中value=2删掉
srandmember set01 2 -- 在set01中随机展示几个数
spop set01 -- 随机出栈
smove set01 set02 x ---将set01的x弹出并加入set02

---数学集合类---
差集:sdiff set01 set02 -- 显示 set01 中 set02 没有的
交集:sinter -- 显示 set01 和 set02 都有的
并集:sunion -- 显示 set01 和 set02 中所有元素,会去重

Hash

KV模式不变,但V是一个键值对(uer表里 name 对应张三)

hset user name z3
hget user name
hsetnx user name

hmset student name zs id 11 age 20
hmget student name id age

hgetall student -- name zs id 11 age 20

hdel student name -- 删除学生

hexists student name -- student里是否有name字段

hkeys student -- student所有key
hvals student -- student所有value

hincrby student age 1 -- student的age字段值+1
hincrebyfloat student score 0.5 -- student的socre字段+0.5

Zset(sorted set)

在set基础上,加一个socre值
之前set是 k1 v1 v2 v3
现在是zest k1 source1 v1 source2 v2

zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5

--排序--
zrange zset01 0 -1 -- v1 v2 v3 v4 v5
zrevrange zset01 0 -1 -- v5 v4 v3 v2 v1
zrange zset01 0 -1 withsocrce -- v1 60 v2 70 v3 80 v4 90 v5 100

zrangebysorce zset01 60 90 -- v1 v2 v3 v4(数字小到大)
zrevrangebysorce zset01 90 60 -- v4 v3 v2 v1(数字大到小)
zrangebysorce zset01 (60 (90 -- v2 v3
zrangebysorce zset01 60 90 limit 2 1 -- v3 // limit 开始index 取几个

--删除、其他--
zrem zset01 v5 -- 删除05
zcard zset01 -- 5 //个数

zcount zset01 60 80 -- 3 //大于60小于80的分数的数量,也可加括号

zrank zset01 v4 -- 3 //v4下标多少
ZREVRANK zset01 v4 -- 1 //v4逆序下标多少

Jedis

创建Jedis

import redis.clients.jedis.Jedis

Jedis jedis = new Jedis("192.168.199.131", 6379)

Jedis常用api

同redis的操作

Map<String, String> map = new HashMap<>();
map.put("address","gz");
map.put("Tel","13534567890");
map.put("name","zs");
jedis.hmset("hash2",map);
List<String> hmget = jedis.hmget("hash2", "Tel", "name");

Jedis事务

jedis.watch("k1");
Transaction multi = jedis.multi();
multi.select(4);
multi.set("k1","IDEA");
multi.exec()

JedisPool

  1. JedisConfig配置
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
    <!-- 最大空闲数 -->
    <property name="maxIdle" value="${redis.maxIdle}" />
    <!-- 最大空连接数 -->
    <property name="maxTotal" value="${redis.maxTotal}" />
    <!-- 最大等待时间 -->
    <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
    <!-- 连接超时时是否阻塞,false时报异常,ture阻塞直到超时, 默认true -->
     <property name="blockWhenExhausted" value="${redis.blockWhenExhausted}" /> 
    <!-- 返回连接时,检测连接是否成功 -->
    <property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>  
  1. 获取Jedis实例需要从JedisPool中获取
  2. 用完Jedis实力需要返还给JedisPool
  3. 如果Jedis在使用过程中出错,也需要还给JedisPool
  4. 代码展示
/**
 * 单例模式
 */
public class JedisPoolUtil {
    private static volatile JedisPool jedisPool = null;
    private JedisPoolUtil(){
    }
    public static JedisPool getJedisPoolInstance(){

        synchronized (JedisPoolUtil.class){
            if(null == jedisPool){
                JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

                jedisPoolConfig.setMaxIdle(32);
                jedisPoolConfig.setMaxWaitMillis(100*1000);
                jedisPoolConfig.setTestOnBorrow(true);
                // ...
                jedisPool = new JedisPool(jedisPoolConfig,"192.168.199.131",6379);
            }
        }
        return jedisPool;
    }
    public static void release(JedisPool jedisPool, Jedis jedis){
        if(null != jedis)
            jedisPool.returnResourceObject(jedis);
    }
}

上面连接池,下面应用

JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
    Jedis jedis = null;
    try{
        jedis = jedisPool.getResource();
        jedis.set("aa","bb");
    }catch(Exception e){
        e.printStackTrace();
    }
    finally {
        JedisPoolUtil.release(jedisPool,jedis);
    }
}
发布了45 篇原创文章 · 获赞 1 · 访问量 541

猜你喜欢

转载自blog.csdn.net/BNMZY/article/details/105303550
今日推荐