Redis的五大数据类型

Redis常用的五大数据类型
  1. String(字符串)
    String 是redis种最基本的类型,一个key对应一个value, string 类型 是二进制安全的,意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。string 是Redis 种最基本的数据类型,一个 redis 种字符串 value 最多可以是 512 M
  2. Hash(哈希,类似Java里的Map)
    Redis hash 是一个键值对集合,Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,类似于Java 种的Map<String,Object>
  3. List (列表)
    Redis List 是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边),他的底层实现是一个链表
  4. Set (集合)
    Redis的Set是string类型的无需集合。
  5. Zset (sorted set): 有序集合
    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,redis正式通过分数来为集合中的成员进行从小到大的排序,zset 的成员是唯一的,但分数(score)却可以重复

redis 官方文档手册

Redis 常用命令

选择数据库

select index # 选择 数据库索引

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> 

**Redis 键(key) **

# 先添加四条数据
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> set k4 v4
OK

# 展示所有的key
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"

# 判断某个key 是否存在
exists [keyname]
127.0.0.1:6379> exists k1 k2 k3
(integer) 3 
127.0.0.1:6379> exists k1
(integer) 1

# move key db ---> 当前库没有了,被移除到其他库了
127.0.0.1:6379>  move k1 2
(integer) 1
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k4"
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
1) "k1"

# ttl key 查看还有多少秒过期, -1 表示永不过期, -2 表示已经过期
127.0.0.1:6379> ttl k1
(integer) -1
# type key 查看你得key 是什么类型
127.0.0.1:6379> type k1
string

来自菜鸟教程以下
在这里插入图片描述

Redis(String)

set / get / del /append /strlen

127.0.0.1:6379> set k1 gss # 设置 k1 字符串为 gss
OK
127.0.0.1:6379> keys *  # 获取所有的key
1) "k1"
127.0.0.1:6379> get k1  # 获取 k1 的值
"gss"
127.0.0.1:6379> APPEND k1 znb   # 在k1字符串后面拼接 znb
(integer) 6
127.0.0.1:6379> get k1	# 获取k1的值
"gssznb"
127.0.0.1:6379> strlen k1 # 获取k1的长度
(integer) 6

Incr / decr / incrby / decry 一定是数字才行

127.0.0.1:6379> set k3 2 # 设置k3的值为2
OK
127.0.0.1:6379> incr k3  # k3的值 +1 
(integer) 3
127.0.0.1:6379> get k3 # 获取k3
"3"
127.0.0.1:6379> incr k3
(integer) 4
127.0.0.1:6379> DECR k3 # k3 的值减一
(integer) 3

127.0.0.1:6379> get k3 # 获取k3的值为 6 
"6"
127.0.0.1:6379> INCRBY k3 2  #k3的值 +2 
(integer) 8
127.0.0.1:6379> get k3 # 获取 k3 的值 为 8
"8"
127.0.0.1:6379> DECRBY k3 2 # K3的值 -2
(integer) 6
127.0.0.1:6379> get k3 # k3 的值为6
"6"

getrange 获取指定区间范围的值,类似 between…and 的关系 从 0 ~ -1 表示全部,
setrange 设置指定区间范围内的值,格式是 setrange key 具体指

127.0.0.1:6379> GETRANGE k4 0 -1  # 获取全部
"0123456789"
127.0.0.1:6379> getrange k4 0 3 # 获取 0-3
"0123"
127.0.0.1:6379> setrange k4 1 xxx # 设置从1开始往后。1-3 是x
(integer) 10
127.0.0.1:6379> get k4  
"0xxx456789"

settex(set with expire) 键 , 秒 , 值 / setnx(set if not exist)

127.0.0.1:6379> setex k4 10 v4 # 设置 k4 的值为 v4 设置过期时间 10秒钟
OK
127.0.0.1:6379> ttl k4  # 查看剩余几秒钟过期
(integer) 8
127.0.0.1:6379> get k4  # 获取 k4 的值
"v4"
127.0.0.1:6379> get k4 # 过了十秒钟后,再去查看
(nil)
127.0.0.1:6379> SETEX k4 10 v4  # 设置 k4 的值为 v4 设置过期时间 10秒钟
OK
127.0.0.1:6379> setnx k4 v4  # 设置k4的值v4 发现返回值为0 
(integer) 0
127.0.0.1:6379> setnx k4 v4 # 等待k4 的值过期。发现 返回值为1
(integer) 1

mset / mget / msetnx

127.0.0.1:6379> keys *
1) "k3"
2) "k4"
3) "k1"
127.0.0.1:6379> mget k1 k2 k3 k4  # 虽然没有k2 但是为显示为nil  批量获取
1) "gssznb"
2) (nil)
3) "6"
4) "v4"
127.0.0.1:6379> FLUSHDB # 清空DB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  # 批量添加
OK

127.0.0.1:6379> msetnx k1 v1-1 k2 v2-2 k3 v3-3 k4 v4-4 # 如果存在那么就不再添加
(integer) 0
127.0.0.1:6379> keys *  # 获取发现k4 没有获取到
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> get k1  # 获取k1 发现值没有被修改
"v1" 
127.0.0.1:6379> msetnx k4 v4-4   # 单独设置k4 可以设置
(integer) 1
127.0.0.1:6379> msetnx k1 v1-1 k2 v2-2 k3 v3-3 k4 v4-4 k5 v5
(integer) 0
# 总结 msetnx 设置多个值,如果有一个值已经存在,那么久无法设置
Redis 列表(List)

lpush / rpush / lrange

127.0.0.1:6379> RPUSH list01 3 4 5   # 按照从左到右的顺序添加
(integer) 3
127.0.0.1:6379> LRANGE list01 0 -1  # 获取全部的值  0  -1 
1) "3"
2) "4"
3) "5"

127.0.0.1:6379> lpush list02 1 2 3 4 5 6 # 按照从右到左的顺序添加
(integer) 6
127.0.0.1:6379> LRANGE list02 0 -1  
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"

127.0.0.1:6379> LRANGE list02 0 3  # 获取下表 0 - 3 的值
1) "6"
2) "5"
3) "4"
4) "3"

lpop / rpop

127.0.0.1:6379> rpush list01 0 1 2 3 4 5 6  # 从左到右添加0-6 七个元素 
(integer) 7
127.0.0.1:6379> LRANGE list01 0 -1     # 展示所有
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
127.0.0.1:6379> lpop list01	  # lpop 移除最左边的一个元素
"0"
127.0.0.1:6379> lpop list01	  # lpop 移除最左边的一个元素
"1"
127.0.0.1:6379> LRANGE list01 0 -1   # 展示元素发现少了 0 1
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
127.0.0.1:6379> rpop list01   # rpop 移除最右侧的一个元素。
"6"
127.0.0.1:6379> LRANGE list01 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> FLUSHDB 
OK

lindex

127.0.0.1:6379> FLUSHDB  # 清空数据库
OK
127.0.0.1:6379> rpush list01 0 1 2 3 4 5 6  # 添加元素
(integer) 7
127.0.0.1:6379> LINDEX list01 2   # 获取下标 2 的元素。值为 2
"2"
127.0.0.1:6379> LINDEX list01 3	  # 获取下标 3 的元素。值为 3
"3"

llen

127.0.0.1:6379> LLEN list01  # 获取list  list01 的长度
(integer) 7

lrem 删除 n 个 key

127.0.0.1:6379> RPUSH list02 1 1 2 2 2 3 3 3 4 4 4 4  
(integer) 12
127.0.0.1:6379> lrem list02 2 3   # 删除 2 个 3
(integer) 2
127.0.0.1:6379> LRANGE list02 0 -1  # 发现list 的值 中少了 2个3
 1) "1"
 2) "1"
 3) "2"
 4) "2"
 5) "2"
 6) "3"
 7) "4"
 8) "4"
 9) "4"
10) "4"

itrim key 开始index 结束 Index, 截取指定范围的值后再赋值给key

127.0.0.1:6379> RPUSH list03 0 1 2 3 4 5 6 7 8 9  
(integer) 10
127.0.0.1:6379> LRANGE list03 0 -1
 1) "0"
 2) "1"
 3) "2"
 4) "3"
 5) "4"
 6) "5"
 7) "6"
 8) "7"
 9) "8"
10) "9"
127.0.0.1:6379> LTRIM list03 0 4  # 截取原来的list 从 0 到 4 ,在重新赋值给list03
OK 
127.0.0.1:6379> LRANGE list03 0 -1 # 查询list03
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"

rproplpush 从源list中的最右边的数据添加到目标list的最左边

127.0.0.1:6379> flushdb   #清空数据库
OK
127.0.0.1:6379> RPUSH list01 1 2 3 4 # 添加元素
(integer) 4
127.0.0.1:6379> RPUSH list02 5 6 7 8 # 添加元素
(integer) 4
127.0.0.1:6379> RPOPLPUSH list01 list02  # 将list01 列表的最后一个数据添加到list02 数据的最前面
"4"
127.0.0.1:6379> LRANGE list01 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> LRANGE list02 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"

lset key index value

127.0.0.1:6379> lset list01 2 x  # 将下标 2 的元素更换为x
OK
127.0.0.1:6379> LRANGE list01 0 -1
1) "1"
2) "2"
3) "x"

linsert key before/after v1 v2 将v2添加到 v1的前面或者后面

127.0.0.1:6379> linsert list01 after x java  # 添加java 添加到x的后面。
(integer) 4
127.0.0.1:6379> LRANGE list01 0 -1
1) "1"
2) "2"
3) "x"
4) "java"

是一个字符串链表,left,right都可以插入添加,如果不存在,创建新的链表,如果已经存在,新增内容。如果值移除,对应的键也就消失了。链表的操作无论是尾和头的效率都极高,但假如是对中间元素进行操作,效率就很低了。

Redis 集合 (Set)

sadd/smembers /sismember

127.0.0.1:6379> sadd set01 1 1 2 2 3 3  # set01 的集合中添加
(integer) 3
127.0.0.1:6379> SMEMBERS set01 # 去重 只添加了 1 2 3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SISMEMBER set01 1 # 获取是否存在
(integer) 1

scard key 获取集合中有多少个元素

127.0.0.1:6379> SISMEMBER set01 1
(integer) 1

srem key value 移除元素

127.0.0.1:6379> srem set01 1 2 # 从set01中移除 1 2 
(integer) 2
127.0.0.1:6379> SMEMBERS set01
1) "3"

srandmember key 随机出几个数字

127.0.0.1:6379> sadd set01 1 2 3 4 5 6 7 8 9 0 11
(integer) 10
127.0.0.1:6379> SRANDMEMBER set01 4  # 随机选择 4 个值
1) "11"
2) "4"
3) "1"
4) "8"

spop key 随机出栈

127.0.0.1:6379> spop set01 2  # 随机选择两个元素 出栈
1) "7" 
2) "0"
127.0.0.1:6379> SMEMBERS set01  # 发现 7 和 0 消失不见
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "8"
8) "9"
9) "11"

smove key key2 在key1 里的某个值,作用是将key1 里面的值复制给key2

127.0.0.1:6379> smove set01 set02 1 # 将 set01 里的元素1 移动到 set02 中
(integer) 1
127.0.0.1:6379> SMEMBERS set01
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
6) "8"
7) "9"
8) "11"
127.0.0.1:6379> SMEMBERS set02
1) "1"

数学集合类:差集(SDIFF),交集(SINTER),并集(SUNION)

127.0.0.1:6379> SADD set01 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SADD set02 1 2 3 x b
(integer) 2

差集: 前者和后者不一样的地方。

127.0.0.1:6379> SDIFF set01 set02
1) "4"
2) "5"

交集: 前者和后者一样的地方

127.0.0.1:6379> SINTER set01 set02
1) "1"
2) "2"
3) "3"

并集:前者后者合并后的元素

127.0.0.1:6379> SUNION set01 set02
1) "x"
2) "4"
3) "1"
4) "2"
5) "b"
6) "5"
7) "3"
Redis 哈希(Hash)

hset / hget / hmset / hmget / hgetall / hdel

127.0.0.1:6379> hset user id 11  # user 类似于java中的 map 变量名, id 为 key, 11 为值
(integer) 1
127.0.0.1:6379> hget user id  # 获取 user 中 key 为 id 的值
"11"
127.0.0.1:6379> hset user name z3  # 设置 user hash 的 key name 为 z3
(integer) 1
127.0.0.1:6379> hget user name  # 获取 user 中的 name  的值
"z3"
127.0.0.1:6379> hmset customer id 11 name l4 age 26  # 直接批量设置
OK
127.0.0.1:6379> hmget customer id name age  # 获取 id name age
1) "11"
2) "l4"
3) "26"
127.0.0.1:6379> HGETALL customer # 直接获取 全部   
1) "id"		# key
2) "11" 	# value
3) "name"	# key
4) "l4"		# value
5) "age"	# key
6) "26"		# value
127.0.0.1:6379> hdel customer id  # 单独删除 customer 的 id 
(integer) 1
127.0.0.1:6379> HGETALL customer  # 查看	
1) "name"
2) "l4"
3) "age"
4) "26"

hlen 获取长度

127.0.0.1:6379> hlen customer  # 获取 customer 的长度
(integer) 2

hexists 判断是否存在

127.0.0.1:6379> hexists customer id  # 判断是否存在id, 不存在返回 0 
(integer) 0
127.0.0.1:6379> hexists customer name# 判断是否存在name,存在范围 1
(integer) 1

hkeys / hvals

127.0.0.1:6379> hmset user id 11 name gss age 23
OK
127.0.0.1:6379> hgetall user
1) "id"
2) "11"
3) "name"
4) "gss"
5) "age"
6) "23"
127.0.0.1:6379> hkeys user  # 获取user 中 所有的 key
1) "id"
2) "name"
3) "age"
127.0.0.1:6379> hvals user # 获取 user 中 所有的value
1) "11"
2) "gss"
3) "23"

hincrby / hincrbyfloat

127.0.0.1:6379> hincrby user birth 195  # 添加整型
(integer) 195
127.0.0.1:6379> hincrbyfloat user score 91.5  # 添加小数
"91.5"
127.0.0.1:6379> hvals user
1) "11"
2) "gss"
3) "23"
4) "195"
5) "91.5"

hsetnx

127.0.0.1:6379> hsetnx user age 11  # 如果存在,则不添加
(integer) 0
127.0.0.1:6379> hkeys user  # 查看key
1) "id"
2) "name"
3) "age"
4) "birth"
5) "score"
127.0.0.1:6379> hsetnx user email 118@qq,com
(integer) 1
127.0.0.1:6379> hkeys user  # 查看key
1) "id"
2) "name"
3) "age"
4) "birth"
5) "score"
6) "email"
Redis 有序集合 (ZSet)

在Set 的基础上,加上了一个 score值,在之前 set 是 k1,v1,v2,v3。 现在zset 是 k1 , score1 v1 ,score2 v2
zadd/zrange

127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5  # 添加值
(integer) 5
127.0.0.1:6379> ZRANGE zset01 0 -1  # 获取所有的值
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6379> ZRANGE zset01 0 -1 withscores  # 带分数查询
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"

zrangebyscore key 开始 结束 min max

  1. withscores 带分数查询
  2. ( 不包含
  3. limit 的作用是返回限制
127.0.0.1:6379> zrangebyscore zset01 60 100  # 按分数排序,从 60 -100
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6379> zrangebyscore zset01 (60 (90 withscores  # 查询分数 大于 60 小于 90 并且带分数查询
1) "v2"
2) "70"
3) "v3"
4) "80"
127.0.0.1:6379> zrangebyscore zset01 (60 (90 withscores limit 1 2 # 查询分数大于60小于90带分数查询,并且 从 1 一个值开始查询到第二个
1) "v3"
2) "80"

zrem key 某score 下面对应得value 作用是删除元素

127.0.0.1:6379> zrem zset01 v1 v2 # 删除 元素 v1 v2 
(integer) 2
127.0.0.1:6379> zrange zset01 0 -1 withscores # 查看值
1) "v3"
2) "80"
3) "v4"
4) "90"
5) "v5"
6) "100"

zcard / zcount key score 区间 / zrank key values,作用是获得下标值 /zscore key 对应值,获得分数

127.0.0.1:6379> zcard zset01  # 查看元素总数
(integer) 3
127.0.0.1:6379> ZCOUNT zset01 60 90  # 查看范围 60 - 90 (包括 60 和 90)的总数
(integer) 2
127.0.0.1:6379> ZCOUNT zset01 (60 (90   # 查看范围 60 - 90 (不包括 60 和 90)的总数
(integer) 1
127.0.0.1:6379> zrank zset01 v4  # 获取 v4 的下表
(integer) 1
127.0.0.1:6379> zscore zset01 v4 # 获取 v4 的分数
"90"

zrevrank key values 作用是逆序获得下标
zrerange 逆序展示
zrevrangebyscore 按照分数从高到低排序

127.0.0.1:6379> zrevrank zset01 v4  # 逆序获取 v4 的下标
(integer) 1

127.0.0.1:6379> zrevrange zset01 0 -1 # 逆序展示 zset01
1) "v5"
2) "v4"
3) "v3"
127.0.0.1:6379> zrange zset01 0 -1  # 正常显示
1) "v3"
2) "v4"
3) "v5"
127.0.0.1:6379> zrevrangebyscore zset01 100 60
1) "v5"
2) "v4"
3) "v3"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值