Redis之2022最全五大基本数据类型相关知识及shell命令(String、List、Set、Hash、Zset)

Redis之五大基本数据类型相关知识及shell命令

一、介绍

引用Redis官网上一段话,Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和地理空间(geospatial) 索引半径查询。Redis 内置了 复制(replication), LUA脚本(Lua scripting), LRU驱动事件(LRU eviction), 事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel) 和自动 分区(Cluster)提供高可用性(high availability)

二、RedisKey的基本shell命令

1、查看所有的key

keys *

2、给指定key值赋value值

set key值 value值

例如

set name xg

3、得到该key的value值

get key值

例如

get name

4、判断当前的key是否存在

exists key值

例如

exists name

5、移除当前的key

move key值 1

例如

move name 1

6、设置key的过期时间,单位是秒

expire key值 10

例如

expire age 10

7、查看当前key的剩余时间

ttl key值

例如

ttl age

8、查看当前key的类型

type key值

例如

type age

三、String数据类型shell命令

1、字符串操作

1.1 追加字符串,如果当前key不存在,就相当于setkey

append key值 "value值"

例如

append name zhangsan
或者
append name "zhangsan"

1.2 获取字符串的长度

strlen key值

例如

strlen name

1.3 字符串范围

(1)截取0到3的字符串,闭区间 [0,3]

getrange key值 起始位置 终止位置

例如

getrange name 0 3

(2)获得该字符串

getrange key值 0 -1

例如

getrange name 0 -1

1.4 替换指定位置开始的字符串

setrange key值 2 字符串

例如

setrange name 2 wee

2、数据操作

2.1 自增一

incr key值

例如

incr age

2.2 自减一

decr key值

例如

decr age

2.3 设置步长,指定增量

用完后,原来的值就加10

incrby key值 步长值

例如

incrby age 10

2.4 设置过期时间

设置key值为xxx,30秒后过期

setex key值 时间值 "value值"

例如

setex name 30 "zhangsan"

2.5 不存在才设置

如果key值不存在,创建该key,如果存在,则创建失败

setnx key值 "value值"

例如

setnx name "zhangsan"

2.6 同时设置多个值

mset key值1 value值1 key值2 value值2 key值3 value值3

例如

mset k1 v1 k2 v2 k3 v3

2.7 同时获得多个值

mget key值1 key值2 key值3

例如

mget k1 k2 k3

2.8 多个赋值时,不存在才设置

msetnx是一个原子性的操作

msetnx key值1 value值1 key值2 value值2

例如

msetnx k1 v1 k2 v2

3、对象

3.1 设置一个user:1 对象 值为json字符串来保存一个对象

set user:{
    
    id}:{
    
    filed}

例如

set user:1 {
    
    name:zhangsan, age:3}

3.2 getset方法

如果存在值,获取原来的值,并设置新的值
如果不存在值,则返回nil

getset key值 value值

例如

getset name zhangsan

4、使用场景

计数器
统计多单位的数量
粉丝数
对象缓存存储

四、List数据类型shell命令

1、介绍

在redis里面,可以将list做成栈、队列、阻塞队列。
而且所有的list命令都是用l开头的,不区分大小写

2、列表操作

2.1 将一个值或者多个值,插入到列表头部(左)

lpush 列表名 数据

例如

lpush list one

2.2 将一个值或者多个值,插入到列表尾部(右)

rpush 列表名 数据

例如

rpush list two

2.3 通过区间获取具体的值

lrange 列表名 起始位置 结束位置

例如

lrange list 0 2

2.4 获取list所有的值

lrange 列表名 0 -1

例如

lrange list 0 -1

2.5 移除列表的第一个元素

lpop 列表名

例如

lpop list

2.6 移除列表的最后一个元素

rpop 列表名

例如

rpop list

3、下标操作

3.1 通过下标获得list中的某一个值

lindex 列表名 下标名

例如

lindex list 1

3.2 返回列表的长度

llen 列表名

例如

llen list

3.3 移除列表集合中指定个数的value(精确匹配)

lrem 列表名 个数 value值

例如

lrem list 1 one

3.4 通过下标截取指定的长度。(list被改变了,截断只剩下截取的元素)

ltrim 列表名 起始位置 结束位置

例如

ltrim list 1 2

3.5 移除列表的最后一个元素,将他移动到新的列表中

rpoplpush 原列表名 新列表名

例如

rpoplpush list list2

3.6 将列表中指定下标的值替换为另一个值(更新操作)

判断表是否存在,如果不存在,更新就报错,如果存在,更新当前下标的值。

lset 列表名 下标名 value值

例如

lset list 0 name

4、插入操作

将某个具体的value插入到列表中某个值的前面或后面

linsert 列表名 before 已存在的值 即将插入的值

linsert 列表名 after 已存在的值 即将插入的值

例如

linsert list before one three

linsert list after one three

5、注意

实际为链表,before Node after, left, right都可以插入值
如果key值不存在,创建新的链表
如果key值存在,新增内容
如果移除了所有的值,空链表,也代表不存在
在两边插入或者改动值,效率最高,中间元素,相对效率会低一点
消息排队,消息队列(lpush rpop)
栈(lpush lpop)

五、Set集合

1、set集合相关操作

1.1 set集合中添加数据

sadd set集合名 数据

例如

sadd myset one

1.2 查看set集合的所有值

smembers set集合名

例如

smembers myset

1.3 判断某个值是否在set集合中

sismember set集合名 数据

例如

sismember myset one

1.4 获取set集合中的内容元素个数

scard set集合名

例如

scard myset

1.5 移除set集合中的指定元素

srem set集合名 数据

例如

srem myset one

2、随机操作

2.1 随机抽取出一个元素

srandmember set集合名

例如

srandmember myset

2.2 随机抽出指定个数的元素

srandmember set集合名 个数 

例如

srandmember myset 2

2.3 随机删除一些set集合中的元素

spop set集合名

例如

spop myset

3、将一个指定的值,移动到另外一个set集合中

smove 原set集合名 新set集合名 value值

例如

smove myset myset2 one

4、集合类操作

4.1 差集(SDIFF)

sdiff set集合1 set集合2

例如

sdiff set1 set2

4.2 交集

sinter set集合名1 set集合名2

例如

sinter set1 set2

4.3 并集

sunion set集合名1 set集合名2

例如

sunion set1 set2

六、哈希类型数据

1、介绍

它的数据类型是map集合,key-map(值是一个map集合)本质和String类型没有太大区别,还是一个简单的key-value

2、哈希基础操作

2.1 set一个具体的key-value

hset hash名称 key值 value值

例如

hset myhash field1 zhangsan

2.2 获取一个字段值

hget hash名称 key值

例如

hget myhash field1

2.3 set多个key-value值

hmset hash名称 key值1 value值1 key值2 value值2

例如

hmset myhash x1 y1 x2 y2

2.4 获取多个字段值

hmget hash名称 key值1 key值2

例如

hmget myhash x1 x2

2.5 获取全部的数据

hgetall hash名称

例如

hgetall myhash

2.6 删除hash指定的key值

hdel hash名称 key值

例如

hdel myhash x1

2.7 获取hash表的字段数量

hlen hash名称

例如

hlen myhash

2.8 判断hash中指定字段是否存在

hexists hash名称 key值

例如

hexists myhash field1

2.9 只获得所有的key值

hkeys hash名称

例如

hkeys myhash

2.10 只获得所有的value值

hvals hash名称

例如

hvals myhash

3、数据操作

3.1 自增一

hincrby hash名称 key值 步长

例如

hincrby myhash num 1

3.2 自减一

hincrby myhash num -1

3.3 判断存在

如果不存在则可以设置值,如果存在则不能设置值

hsetnx hash表名 key值 value值

例如

hsetnx myhash name zhangsan

七、Zset(有序集合)

1、介绍

在set的基础上,增加了一个用于排序的值。

2、基础操作

2.1 添加一个值

zadd zset集合名称 排序的标志数字 数据

例如

zadd myset 1 one

2.2 添加多个值

zadd zset集合名称 排序的标志数字 数据2 排序的标志数字 数据3

例如

zadd myset 2 two 3 three

2.3 查所有的值

zrange zset集合名称 起始位置 结束位置

例如

zrange myset 0 -1

3、排序操作

数据准备

zadd salary 2500 zhangsan
zadd salary 3000 lisi
zadd salary 1000 wnagwu

3.1 显示全部的用户,从小到大(在不知道范围最小值和最大值的情况下,根据score排序)

zrangebyscore zset集合名称 -inf +inf

例如

zrangebyscore salary -inf +inf

3.2 显示全部的用户,从大到小

zrevrange zset集合名称 0 -1

例如

zrevrange salary 0 -1

3.3 显示全部的用户并且附带成绩

zrangebyscore zset集合名称 -inf +inf withscores

例如

zrangebyscore salary -inf +inf withscores

3.4 显示工资小于2500员工的升序排序(知道某个值作为范围最大值的情况下)

zrangebyscore zset集合名称 -inf 范围最大值 withscores

例如

zrangebyscore salary -inf 2500 withscores

4、集合操作

4.1 移除有序集合中的指定元素

zrem zset集合名称 数据名

结果

zrem salary lisi

4.2 获取有序集合中的个数

zcard zset集合名称

例如

zcard salary

4.3 获取指定区间的成员数量

zcount zset集合名称 起始范围 结束范围

例如

zcount myset 1 3

猜你喜欢

转载自blog.csdn.net/qq_46106857/article/details/128301539
今日推荐