datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...

1.支持的数据类型

redis 支持 String、hash、list、set、Sort set这几种数据类型,可用于缓存、事件发布订阅、高速队列等场景。

String是最常用的数据类型,它能够存储任何类型的字符串,当然也包括二进制、JSON化的对象、甚至是base64编码之后的图片。在Redis中一个字符串最大的容量为512MB。

Hash常用作存储结构化数据、比如论坛系统中可以用来存储用户的Id、昵称、头像、积分等信息。如果需要修改其中的信息,只需要通过Key取出Value进行反序列化修改某一项的值,再序列化存储到Redis中,Hash结构存储,由于Hash结构会在单个Hash元素在不足一定数量时进行压缩存储,所以可以大量节约内存。这一点在String结构里是不存在的。

List的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis 内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。另外,可以利用 lrange 命令,做基于 Redis 的分页功能,性能极佳,用户体验好。

set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,这个时候就可以选择使用set。

可以按照某个条件的权重进行排序,比如可以通过点击数做出排行榜的数据应用。

2 String 常用命令

2.1赋值与取值

SET key value

GET key

2.2 向尾部追加值

APPEND key value

APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于SET key value。返回值是追加后字符串的总长度。

2.3 获取字符串长度

STRLEN key

STRLEN命令返回键值的长度,如果键不存在则返回0。

2.4 同时设置/获取多个键值

MSET key value [key value …]

MGET key [key …]

2.5 删除key的值

del key

2.6 判断key否存在

exists key

2.7 若key不存在,则存储

setnx key

2.8 设置key的有效期,并存储数据

setex key 时间(seconds) 新value

2.9 getrange 截取value

GETRANGE KEY_NAME start end

3 hash 常用命令

hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。

3.1 赋值与取值

HSET key field value 一次只能设置一个字段值

HGET key field 一次只能获取一个字段值

HMSET key field value [field value ...] 一次可以设置多个字段值

HMGET key field [field ...] 一次可以获取多个字段值

HGETALL key

16c918c9d3c5f0bbd284618a8adf68ee.png

3.2 判断字段是否存在

HEXISTS key field

当字段不存在时赋值,类似HSET,区别在于如果字段已经存在,该命令不执行任何操作。

3.3 只获取字段名或字段值

HKEYS key

HVALS key

3.4 获取字段数量

HLEN key

3.5 jedis的简单应用

public static void testHash() {

Jedis jedis = RedisUtil.getJedis();

try {

Map student = new HashMap();

pairs.put("name", "zhangsan");

pairs.put("age", "10");

pairs.put("sex", "Female");

jedis.hmset("test", student)

List name = jedis.hmget("student", "name");// 结果是个泛型的LIST

System.out.println(name);

jedis.hdel("student","age"); //删除map中的某个键值

System.out.println(jedis.hmget("student", "age")); // 因为删除了,所以返回的是null

System.out.println(jedis.hlen("student")); // 返回key为user的键中存放的值的个数

System.out.println(jedis.exists("student"));// 是否存在key为user的记录

System.out.println(jedis.hkeys("student));// 返回map对象中的所有key

System.out.println(jedis.hvals("student"));// 返回map对象中的所有value

Iterator iter = jedis.hkeys("student").iterator();

while (iter.hasNext()) {

String key = iter.next();

System.out.println(key + ":" + jedis.hmget("student", key));

}

System.out.println(jedis.hkeys("student"));

System.out.println(jedis.hvals("student"));

System.out.println(jedis.hgetAll("student"));

// 清空数据

System.out.println(jedis.flushDB());

// 添加数据

jedis.hset("student2", "key", "value");

jedis.hset("student2", "key1", "value1");

jedis.hset("student2", "key2", "value2");

// 判断某个值是否存在

System.out.println(jedis.hexists("student2", "key"));

// 获取指定的值

System.out.println(jedis.hget("student2", "key")); // 批量获取指定的值

System.out.println(jedis.hmget("student2", "key", "key1"));

// 删除指定的值

System.out.println(jedis.hdel("student2", "key"));

// 为key中的域 field 的值加上增量 increment

System.out.println(jedis.hincrBy("student2", "key", 123l));

// 获取所有的keys

System.out.println(jedis.hkeys("student2"));

// 获取所有的values

System.out.println(jedis.hvals("student2"));

} catch (Exception e) {

e.printStackTrace();

} finally {

RedisUtil.getPool().returnResource(jedis);

}

}

4 list 常用命令

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。

列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

4.1 向列表两端增加元素

LPUSH key value [value ...]

RPUSH key value [value ...]

4.2 从列表两端移除元素

LPOP key

RPOP key

4.3 获取列表中元素的个数

LLEN key

4.4 获取列表片段

LRANGE key start stop

4.5 将一个元素从一个列表转移到另一个列表中

RPOPLPUSH source destination

移动的元素遵循被移除列表的先进先出原则

4.6 删除

LTRIM KEY_NAME START STOP

5 set 常用命令

在集合中的每个元素都是不同的,且没有顺序。

3fb9198c750220a2f5d4b1c5b59dcfa8.png

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的Redis内部是使用值为空的散列表实现,所有这些操作的时间复杂度都为0(1)。

Redis还提供了多个集合之间的交集、并集、差集的运算。

5.1 增加/删除元素

SADD key member [member ...]

SREM key member [member ...]

5.2 获取集合中所有的元素

SMEMBERS key

判断元素是否在集合中,无论集合中有多少元素都可以极速的返回结果。

SISMEMBER key member

6 sorted set

在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。

在某些方面有序集合和列表类型有些相似。

1、二者都是有序的。

2、二者都可以获得某一范围的元素。

但是,二者有着很大区别:

1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。

2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。

3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)

4、有序集合要比列表类型更耗内存。

6.1 增加元素

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

ZADD key score member [score member ...]

6.2 获取元素的分数

ZSCORE key member

6.3 获得排名在某个范围的元素列表

元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

ZRANGE key start stop [WITHSCORES]

元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

ZREVRANGE key start stop [WITHSCORES]

如果需要获得元素的分数的可以在命令尾部加上"WITHSCORES"参数

6.4 获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

6.5 增加某个元素的分数,返回值是更改后的分数。

ZINCRBY key increment member

6.6 获得集合中元素的数量

ZCARD key

6.7 获得指定分数范围内的元素个数

ZCOUNT key min max

6.8 获取元素下标

zscore key member

6.9 删除元素

zrem key member

6.10 按照排名范围删除元素

ZREMRANGEBYRANK key start stop

6.11 按照分数范围删除元素

ZREMRANGEBYSCORE key score score

6.12 获取元素的排名

从小到大

ZRANK key member

从大到小

ZREVRANK key member

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值