redis smembersmap_Redis(三)数据类型

之前的文章中说了Redis的常见应用场景和特性,在特性章节中也大致说了数据结构契合场景。因为我想在更深入、更全面的学习Redis之前,了解场景和特性,才能在学习时更加全面且理解更透彻:

redis的什么特性支持这些应用场景?

为什么这些场景下使用redis会带来好处?

数据类型

Redis数据结构大体上是一种key-value形式,根据value的不同数据类型,将其分为以下几种。其中Bitmap并不是一种新的数据类型,它其实是将String类型的每一位限制成0或1实现,详见Bitmaps文档。

数据类型

描述

操作命令

应用场景

String

value是String

set、get、incr、incrby、setnx、 setex、

k-v分布式缓存、分布式锁、 过期值、分布式session

List

value是List列表

lpush、lpop、lrange、 rpush、rpop、 lindex、llen、lrem、 brpop

任务队列、消息队列、最新信息

Hash

value是Hash映射表

hset、hget、hdel、 hexists、hgetall、 hincby、hkeys、hlen、 hmset

对象缓存

Set

value是无序的Set集合

sadd、smembers、sismembers、 scard、sinter、sdiff、sunion、 spop、srem

文章tag

Sorted Set

value是有序的Set集合

zadd、zcard、zcount、zincrby、 zrange、zrangebylex、 zrangebyscore、zrank、 zrem、zrevrange

排行榜

Bitmap

value是0/1

setbit、getbit、bitcount、 bittop

用户状态、用户在线时间

除了以上几种,Redis还支持hyperloglogs和geospatial类型,由于不是很常用,这里不做介绍。具体可以参考方Introduction to Redis文档。

每种数据类型除了各自相应的读写删命令,这些数据类型还有共性命令。为何共性,因为这些共性命令是作用在key上,上面也说到了,redis的数据结构大体上是key-value结构。

exists命令

1.语法:

exists key [key...]

2.用途:

用于检测指定key是否存在

del命令

1.语法

del key [key...]

2.用途

删除指定key

expire和pexpire命令

1.语法

expire key seconds

pexpire key millseconds

2.用途

expire用于设置key的过期时间,单位秒。pexpire也是用于设置key的过期时间,单位毫秒

keys命令

1.语法

keys pattern

2.用途

用于查找指定模式的key,支持glob-style pattern。详情参考KEYS pattern文档

简单的命令操作

Redis提供了操作的命令行redis-cli,在下载的redis包中的bin目录下。在启动了redis-server的前提下,直接运行redis-cli即可进入redis命令行:

$ redis-cli

127.0.0.1:6379>

127.0.0.1:6379>

下面通过redis-cli命令行来认识下redis中的常用数据类型

1.String类型

// set命令设置k-v

127.0.0.1:6379> set key value

OK

// get命令获取指定key的值

127.0.0.1:6379> get key

"value"

//setnx如果key存在则不设置,否则设置

127.0.0.1:6379> setnx key value

(integer) 0

127.0.0.1:6379> setnx key1 value1

(integer) 1

//setex设置k-v和过期时间

127.0.0.1:6379> setex key2 60 value2

OK

127.0.0.1:6379> ttl key2

(integer) 56

127.0.0.1:6379> ttl key2

(integer) 54

//incr指定key的值自增长

127.0.0.1:6379> set key3 5

OK

127.0.0.1:6379> incr key3

(integer) 6

//incrby指定key的值增长幅度

127.0.0.1:6379> incrby key3 100

(integer) 106

2.List类型

//lpush从左边推入value至list中

127.0.0.1:6379> lpush list value1 value2 value3

(integer) 3

//lrange按范围获取list中的value,

//第一个表示起始索引,第二个表示结束索引。-1表示所用

127.0.0.1:6379> lrange list 0 -1

1) "value3"

2) "value2"

3) "value1"

//rpop表示从右边弹出一个value

127.0.0.1:6379> rpop list

"value1"

//lindex获取指定位置的vlaue

127.0.0.1:6379> lindex list 0

"value3"

//llen获取list的大小

127.0.0.1:6379> llen list2

(integer) 8

//brpop阻塞从右边弹出元素。参数5指定阻塞超时时间,0表示永久

127.0.0.1:6379> brpop list2 5

(nil)

(5.04s)

3.Hash类型

//hset设置映射表的k-v

127.0.0.1:6379> hset map name lxy

(integer) 1

//hmset同时设置多个映射表的k-v

127.0.0.1:6379> hmset map age 11 sex male

OK

//hgetall获取映射表的所有k-v

127.0.0.1:6379> hgetall map

1) "name"

2) "lxy"

3) "age"

4) "11"

5) "sex"

6) "male"

//hget获取映射表的指定k的v

127.0.0.1:6379> hget map age

"11"

//hlen获取映射表的大小

127.0.0.1:6379> hlen map

(integer) 3

//hexists探测映射表的指定k是否存在

127.0.0.1:6379> hexists map address

(integer) 0

//hdel删除映射表指定k-v

127.0.0.1:6379> hdel map name

(integer) 1

//hincrby幅度增长映射表指定k的v

127.0.0.1:6379> hincrby map age 20

(integer) 31

4.Set类型

//sadd向set中添加v,无重复

127.0.0.1:6379> sadd set v1 v2 v3 v4 v4 v5

(integer) 5

//scard探测set元素个数

127.0.0.1:6379> scard set

(integer) 5

//smembers获取set所用元素

127.0.0.1:6379> smembers set

1) "v4"

2) "v1"

3) "v2"

4) "v3"

5) "v5"

//探测指定set是否存在某个元素

127.0.0.1:6379> sismember set v8

(integer) 0

//sinter计算多个set的交集

127.0.0.1:6379> sinter set set1

1) "v3"

2) "v5"

//sunion计算多个set的并集

127.0.0.1:6379> sunion set set1

1) "v6"

2) "v2"

3) "v3"

4) "v9"

5) "v4"

6) "v1"

7) "v7"

8) "v5"

9) "v8"

//计算第一个set与其他set的差集

127.0.0.1:6379> sdiff set set1

1) "v2"

2) "v4"

3) "v1"

5.Sorted Set类型

//zadd想sorted set中添加元素

127.0.0.1:6379> zadd ss 0 v0 1 v1 3 v4 4 v3 5 v5

(integer) 5

//zcard计算sorted set的元素个数

127.0.0.1:6379> zcard ss

(integer) 5

//zcount统计指定score范围的元素个数

127.0.0.1:6379> zcount ss 0 1

(integer) 2

//zrange获取指定索引范围的元素

127.0.0.1:6379> zrange ss 0 3

1) "v0"

2) "v1"

3) "v4"

4) "v3"

5.Bitmap类型

//setbit设置指定bit位v

127.0.0.1:6379> setbit user 1 0

(integer) 0

127.0.0.1:6379> setbit user 2 1

(integer) 0

127.0.0.1:6379> setbit user 3 1

(integer) 0

127.0.0.1:6379> setbit user 4 0

(integer) 0

//getbit获取指定bit位的v

127.0.0.1:6379> getbit user 2

(integer) 1

//统计指定key的bit位为1的个数

127.0.0.1:6379> bitcount user

(integer) 2

6.通用键

//expire设置k的过期时间

127.0.0.1:6379> expire user 5

(integer) 1

127.0.0.1:6379> ttl user

(integer) 1

127.0.0.1:6379> exists user

(integer) 0

//keys探测redis中存在哪些k

127.0.0.1:6379> keys *

1) "sk"

2) "name"

3) "ss"

4) "map"

5) "set"

6) "m"

7) "set1"

8) "list"

9) "k"

//del删除指定的k

127.0.0.1:6379> del name sk map

(integer) 3

以上是以命令的方式学习理解redis的数据结构,但是在日常开发中基本上是使用某种语言的redis客户端与redis交互操作。

redis支持丰富的各种语言的客户端,单独对java而言就存在很多种选择,jedis是一个非常不错和普遍被使用的java版本redis client。开源地址xetorthio/jedis,对于jedis的使用api,可以参考其开源项目中的丰富测试类jedis/src/test/java/redis/clients/jedis/tests/commands/

参考

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值