DXP BLOG
首页
  • JDk
  • Spring系列
  • 微服务
  • Json
  • Netty
  • Bug
  • Mysql
  • Postgresql
  • 达梦
  • activemq
  • rabbitmq
  • rocketmq
  • redis
  • Vue
  • React
  • Angular
  • Javascript
  • Typescript
linux
  • 协议
  • 加解密
  • 分类
  • 标签
  • 归档
Gitee (opens new window)

董新平

一个普普通通的代码程序猿
首页
  • JDk
  • Spring系列
  • 微服务
  • Json
  • Netty
  • Bug
  • Mysql
  • Postgresql
  • 达梦
  • activemq
  • rabbitmq
  • rocketmq
  • redis
  • Vue
  • React
  • Angular
  • Javascript
  • Typescript
linux
  • 协议
  • 加解密
  • 分类
  • 标签
  • 归档
Gitee (opens new window)
  • Redis

    • Redis基础
    • Windows下Redis安装
    • 编译安装Redis
    • Redis数据类型
      • 数据类型查看方式
      • String
        • bitmap类型
      • list
      • set
      • zset
      • hash
  • 中间件
  • Redis
dongxinping
2024-01-20
目录

Redis数据类型

# Redis数据类型

Redis 作为 K-V 类型的缓存中间件,其 value 一共有5中数据类型。 string, set, list, sorted-set(zset), hash.

# 数据类型查看方式

可以通过 type 命令查看对应value的类型,例如: type key, 输出结果即为上面的类型中的一种。

hset stu name zhangsan
type stu
==> hash
1
2
3

可以通过 object encoding 来查看value的编码方式。

object encoding stu
==> listpack
1
2

# String

string是最常用的数据结构, 也是可以用最高的一种数据结构。set name lisi,或者批量操作mset, 即标识存储了一个key为name, 值为 lisi 的键值对, 与我们java中常用的map结构有点类似

# set key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
set name lisi
type name
==> string
object coding name
==> embstr # 在字节长度小于44个字节时,其编码方式为 embstr, 当大于时则为 raw
1
2
3
4
5
6
  • EX 表示多少秒后过期,等同命令: SETEX
  • PX 表示多少毫秒后过期,等同命令:PSETEX
  • NX 只新增,没有时则设置
  • XX 只修改,存在时才设置

# bitmap类型

bitmap也属于string类型的操作,可以通过 setbit(设置bit位为1), bitcount(统计1的数量), bitpos(定位查找), bitop(与或非操作) 等对值做一些二进制操作,在设置时,是按照从左右到的字节数去设置的。

127.0.0.1:6379> setbit bt 0 1
(integer) 0
127.0.0.1:6379> setbit bt 1 1
(integer) 0
127.0.0.1:6379> setbit bt 11 1
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> get bt
"\xc0\x1
1
2
3
4
5
6
7
8
9
10

输出结果解析成二进制就是 1100 0000 0001 0000, 也就是说 setbit 的 offset 表示的是从左往右的偏移量, 忘掉 我们的所谓的大端小端问题

# list

list是一个双向链表结构, 在其 key 中会存储相关的 head 和 tail 节点,因此我们可以看见他的list操作命令会有 left 与 right的区分,他们的效率是一样的, 也正是因为这个数据结构,我们可以拿 list 作为 队列或者栈的实现。

# set

无序集合, 类似与java中的 HashSet

  • sinter<store>交集,加上 store 则表示将结果放入新的集合中。
  • sunion<store>并集,加上 store 则表示将结果放入新的集合中。
  • srandmenber key count 表示取N个随机元素,如果count为负数,表示可以重复取,整数表示不能重复

# zset

有序集合, zadd k score member, 会按照 score 值排序,且不允许重复的成员。内部通过跳跃表实现高效搜索排序(logN)

# hash

hash结构的值类似与java中的hashmap, 可以用来表述java中的对象,例如: hset num101 name 张三 age 18 sex 1, 通过 hgetall num101 即可查看全部的成员属性了。

上次更新: 2024/01/20, 21:48:18
编译安装Redis

← 编译安装Redis

最近更新
01
Atomic
12-27
02
编译安装Redis
12-27
03
Windows下Redis安装
11-16
更多文章>
dongxinping | Copyright © 2022-2024 Dongxinping | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式