Redis教程

redis 5种数据结构的使方法

本文主要是介绍redis 5种数据结构的使方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

redis 5种数据结构的使方法

    • redis 数据结构
    • string 存储
    • hash 存储
    • list 存储
    • set 存储
    • zset 存储

redis 数据结构

redis 是 key-value 的数据结构,每条数据都是⼀个键值对,键的类型是字符串,键不能重复。

值的类型分为五种:

  1. 字符串 string:字符串类型是 Redis 中最为基础的数据存储类型,一个 key 对应一个 value。
    string 类型在 Redis 中是二进制安全的。这便意味着该类型可以接受任何格式的数据,比如 JPEG 图像数据或 JSON 对象描述信息等。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M。

  2. 哈希 hash:是一个键值 (key=>value) 对集合。特别适合用于存储对象。

  3. 列表 list:简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部 (左边) 或者尾部 (右边)。

  4. 集合 set:string 类型的无序集合。通过哈希表实现的,添加,删除,查找的复杂度都是 O (1)。

  5. 有序集合 zset:和 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数 (score) 却可以重复。

string 存储

# 设置键值: set key value
127.0.0.1:6379> set name xiaoming

# 设置键值过期时间,单位为秒: setex key1 seconds  value
127.0.0.1:6379> setex name 3 xiaoming
    
# 设置多个键值 mset key1 value1  key2 value2
127.0.0.1:6379> mset name xiaoming age 18

# 追加值 append key value
127.0.0.1:6379> append name ge
(integer) 10
127.0.0.1:6379> get name
"xiaomingge"

# 获取: 根据键获取值,不存在返回 null get key
127.0.0.1:6379> get name

# 获取: 根据多个键返回多个值 mget key1 key2
127.0.0.1:6379> mget name age
1) "xiaomingge"
2) "18"

# 查看所有键
127.0.0.1:6379> keys *
1) "name"
2) "age"

# 查找键,支持正则表达式: keys pattern
127.0.0.1:6379> keys n*
1) "name"


# 判断键是否存在,如果存在返回 1,不存在返回 0:exists key
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists aa
(integer) 0

# 查看键对应的类型
127.0.0.1:6379> type name
string

# 删除键及对应的值 del key1 key2
127.0.0.1:6379> del name age
(integer) 2

# 对已有的键设置过期时间 -1: 代表永不过期 -2:代表已过期删除
127.0.0.1:6379> set name a
OK
127.0.0.1:6379> expire name 20
(integer) 1
127.0.0.1:6379> ttl name
(integer) 17    # 过期时间还剩17秒 
127.0.0.1:6379> ttl name
(integer) -2    # 表示该键值已过期被删除

hash 存储

# 设置单个属性: hset key field value
127.0.0.1:6379> hset user name xiaoming
(integer) 1

# 设置多个属性: hmset key field1 value1 field2 value2
127.0.0.1:6379> hset user name xiaoming age 18
(integer) 1

# 获取指定键所有的属性: hkeys key
127.0.0.1:6379> hkeys user
1) "name"
2) "age"

# 获取一个属性的值: hget key field
127.0.0.1:6379> hget user name
"xiaoming"

# 获取多个属性的值: hmget key field1 field2
127.0.0.1:6379> hmget user name age
1) "xiaoming"
2) "18"

# 获取所有属性的值: hvals key
127.0.0.1:6379> hvals user
1) "xiaoming"
2) "18"

# 删除整个hash 键及其值,使用 del

# 删除属性,属性对应的值会被一起删除: hdel key diled1 dile2
127.0.0.1:6379> hdel user name age
(integer) 2

list 存储

# 在左侧插入数据: lpush key value1 value2 (倒序)
127.0.0.1:6379> lpush name a b
(integer) 2

# 在右侧插入数据: rpush key value1 value2 (正序)
127.0.0.1:6379> rpush name c d 
(integer) 4

# 在指定元素的前后插入新元素: linsert key before或after 现有元素 新元素
127.0.0.1:6379> linsert name before a  xiaoming   # 在 a 元素前面添加一个新元素 xiaoming
(integer) 5

# 获取 - 返回列表里指定范围内的元素: lrange key start stop, 第一个元素为 0,-1 表示最后一个元素
## 获取name 列表所有元素
127.0.0.1:6379> lrange name 0 -1
1) "b"
2) "xiaoming"
3) "a"
4) "c"
5) "d"

# 设置指定所以位置的元素值: lset key index value
## 索引从左侧开始,第⼀个元素为 0。索引可以是负数,表示尾部开始计数,如 - 1 表示最后⼀个元素
127.0.0.1:6379> lset name 4 a   # 这样设置相当于将索引wei 4 的元素 修改为 a
OK
127.0.0.1:6379> lrange name 0 -1
1) "b"
2) "xiaoming"
3) "a"
4) "c"
5) "a"    # 原先是 d  被修改

# 删除 - 删除指定元素:lrem key count value
## 将列表中前count次出现的值为value的元素移除,count > 0: 从头往尾移除,count < 0: 从尾往头移除,count = 0: 移除所有
127.0.0.1:6379> lrem name 0 b  # 删除元素 b
(integer) 1

set 存储

# 添加元素:sadd key member1 member2 ...
127.0.0.1:6379> sadd name 1 2
(integer) 2

# 获取所有的元素: smembers key
127.0.0.1:6379> smembers name
1) "1"
2) "2"

# 删除指定元素: srem key
127.0.0.1:6379> srem name 1
(integer) 1
127.0.0.1:6379> smembers name
1) "2"

zset 存储

# 添加: zadd key score1 member1 score2 member2
127.0.0.1:6379> zadd name 2 xiaom 1 xiaoh
(integer) 2

# 获取 - 返回指定范围内的元素: zrange key start stop
127.0.0.1:6379> zrange name 0 -1
1) "xiaoh"
2) "xiaom"

## 返回score值在min 和max 之间的成员: zrangebyscore key min max
127.0.0.1:6379> zrangebyscore name 1 2
1) "xiaoh"
2) "xiaom"

## 返回成员memberd score值: zscore key member
127.0.0.1:6379> zscore name xiaom
"2"

# 删除 - 删除指定元素: zrem key member1 member2 ...
127.0.0.1:6379> zrem name xiaom
(integer) 1

## 删除权重在指定范围内的元素: zremrangebyscore key min max
127.0.0.1:6379> zremrangebyscore name 0 2
(integer) 1
这篇关于redis 5种数据结构的使方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!