Redis 数据结构(五大数据类型)命令总结
-
Java 操作Redis
Jedis 导入依赖(maven项目)
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
Redis 开发商 提供了一个java版本支持,jedis类也可以获得java和Redis的连接
Jedis jedis = new Jedis("192.168.59.150", 6379);
jedis.set("str", "abcdefg");
String str = jedis.get("str");
System.out.println(str);
jedis.close();
Jedis连接池配置
最大连接数 :连接池中连接存在最多的个数,如果访问超过这个个数
多余的连接需要等待,连接池不会再创建新的连接
最大空闲数 :8 池子中默认有5条连接 同时来了7个请求,连接池需要
创建15条更多的连接,请求结束后,释放这些连接
最小空闲数 :池子默认的连接个数
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(20);
config.setMaxIdle(10);
config.setMinIdle(6);
JedisPool pool = new JedisPool(config,"192.168.59.150",6379);
Jedis jedis = pool.getResource();
System.out.println(jedis.get("str"));
封装工具类,读取配置文件的方式
JedisPoolUtils 工具类
private static JedisPool jedisPool =null;
static {
//读取properties配置文件
InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
System.out.println("配置文件读取失败!");
}
String host = pro.getProperty("redis.host");
Integer port = Integer.valueOf(pro.getProperty("redis.port"));
Integer maxIdle= Integer.valueOf(pro.getProperty("redis.maxIdle"));
Integer minIdle = Integer.valueOf(pro.getProperty("redis.minIdle"));
Integer maxTotal = Integer.valueOf(pro.getProperty("redis.maxTotal"));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle);
jedisPool= new JedisPool(config, host, port);
/* System.out.println(host);
System.out.println(port);
System.out.println(maxTotal);
System.out.println(maxIdle);
System.out.println(minIdle);*/
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
public static void release(Jedis jedis){
if ( jedis !=null){
jedis.close();
}
}
测试代码
Jedis jedis = JedisPoolUtils.getJedis();
JedisPoolUtils.release(jedis);
System.out.println(jedis.get("str"));
维护Redis key 是有规范的
详情请看: 阿里巴巴规约
-
字符串
增 set
删 del
改 incr decr incrBy decrBy append
查 get
赋值、取值
Del key 删除 例如 del username
数值 增减
Incr num 自增 decr num 自减
扩展命令
Incrby num 11 加11
Decrby num 11 减11
拼接字符串
append +key+ 字符串 例如:append num fdw
-
hash 哈希表
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象
赋值
hset myhash user tom //给单个字段赋值,
HMSET myhash2 user jerry age 18 //给多个字段赋值
取值
hget myhash user 获取单个字段的值
HMGET myhash2 user age 获取多个字段的值
取全部的值
HGETALL key HGETALL myhash2
删除
hdel key fields 例如:hdel myhash name
删除全部
Del key 例如:del myhash
增加 一个数(10)
HINCRBY KEY field num 例如:HINCRBY myhash age 10
减少 一个数(-10)
HINCRBY KEY field -num 例如:HINCRBY myhash age -10
判断指定的key中的field是否存在
返回 1 表示存在 返回0 表示不存在
HEXISTS key field 例如:HEXISTS myhash name
获取key所包含的field的数量
hlen key
获取key所包含的field
hkeys myhash
-
List
底层使用链表实现 集合 增加和删除速度比较快
有序的列表,按照插入的顺序,可以重复的
赋值
lpush key value [value ...] 例如:LPUSH list a b c d e
查看 list所有的值start、stop可 为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推
LRANGE key start stop 如:LRANGE list 0 -1
在list尾部添加值
rpush key value1、value2… 如:RPUSH list 1 2 3
弹栈(从头部弹出元素)
LPOP key 例如: LPOP list
弹栈 从尾部弹出元素
RPOP key
lpushx key value:仅当参数中指定的key存在时(如果与key管理的list中没 有值时,则该key是不存在的)在指定的key所关联的list的头部插入value。
Lpushx list tom
rpushx key value:在该list的尾部添加元素
Rpushx list Jerry
lrem key count value:删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。
LREM list 1 a
lset key index value:设置链表中的index的脚标的元素值,0代表链表的头元 素,-1代表链表的尾元素
LSET list 2 xxxx //替换下标为2 的值
linsert key before|after pivot value:在pivot元素前或者后插入value这个 元素。
LINSERT list before 2 yyyy
rpoplpush resource destination:将链表中的尾部元素弹出并添加到头部
RPOPLPUSH list list2
llen key:返回指定的key关联的链表中的元素的数量。
LLEN list
-
Set
无序的,没有重复的 查询快
sadd key value1、value2…:向set中添加数据,如果该key的值已有则不会重复添加
smembers key:获取set中所有的成员
scard key:获取set中成员的数量
sismember key member:判断参数中指定的成员是否在该set中,1表示存 在,0表示不存在或者该key本身就不存在
srem key member1、member2…:删除set中指定的成员
SREM set dd ee
srandmember key:随机返回set中的一个成员
SRANDMEMBER set
sdiff key1 key2:返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集。
SDIFF set set2 //返回set2中存在但 set中不存在的member
sdiffstore destination key1 key2:将key1、key2相差的成员存储在 destination上
SDIFFSTORE set3 set set2
sinter key[key1,key2…]:返回交集。
SINTER set set2
sinterstore destination key1 key2:将返回的交集存储在destination上
sinterstore set3 set set2
sunion key1、key2:返回并集
SUNION set set2
sunionstore destination key1 key2:将返回的并集存储在destination上
sunionstore set3 set set2
SCARD key 返回set成员数量
SRANDMEMBER key 随机返回set中一个成员
-
Sort Set
有序的,不可重复的
比分的权重来实现有序
应用场景: 游戏排名
添加元素
zadd key score member score2 member2 … :将所有成员以及该成员的 分数存放到sorted-set中
ZADD mysort 100 a 80 b 50 c
获得元素
zcard key:获取集合中的成员数量
zcard mysort
返回指定成员分数ZSCORE key member
ZSCORE mysort a
删除元素
zrem key member [member ...] 删除指定成员
zrem mysort a
范围查询
ZRANGE key start stop获取集合中脚标为start-stop的成员
ZRANGE mysort 0 -1
ZRANGE mysort 0 -1 WITHSCORES 返回成员及其分数(默认从小到大)
ZREVRANGE key start stop [WITHSCORES]从 大到小排序
ZREVRANGE mysort 0 -1 withscores
从小到大删除 两个成员
ZREMRANGEBYRANK mysort 0 1
ZREMRANGEBYSCORE key min max 根据分数删除从min到max的成员
ZREMRANGEBYscore mysort 25 75
按分数从小到大 分页查询
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE mysort 25 100 limit 0 3 //显示mysort中25到57的成员 第一页的3条数据
ZINCRBY key increment member指定有序集合中的成员增加指定分数
ZINCRBY mysort 25 e
ZCOUNT key min max 获取分数min到max的成员
ZCOUNT mysort 20 100
ZRANk key member 返回成员在集合中的排名
ZRANk mysort f (从小到大)
ZREVRANk key member (从大到小)
上一篇: 【Redis学习笔记】Redis跳表简析(插入过程)
下一篇: Flink作业转换-JobGraph