Redis中的常用数据结构

目录

String类型

Hash类型

List类型

Set类型

SortedSet类型

全局命令

集合中的交并补


String类型

java 复制代码
//set,get型

set key value

get key

//设置一个10s后过期的键值对  ex单位是s

set key value ex 10 或者 setex key 10 value

//设置一个10ms后过期的键值对  px单位是ms

set key value px 10 或者 psetex key 10 value

//当不存在key时,才可以存储,相当于唯一插入,nx标识

set key value nx;  或者 setnx key value;

//当存在key时,才可以设置,相当于更新操作,xx标识

set key value xx;

//一次存储或获取多个key,value,减少网络通信次数,mset,mget

mset key1 value1 key2 value2 key3 value3;

mget key1 key2 key3;

加减运算命令

1.针对value为Integer类型

java 复制代码
incr key  //加一操作

decr key //减一操作

incrby key 10   //加10   

incrby key -10  //减10  或者使用decrby

2.针对小数

java 复制代码
incrbyfloat key 1.1 

incrbyfloat key -1.1

Hash类型

相当于一种key key value.

java 复制代码
hset,hget

hset user id 1

hget user id

hexists user id  是否存在KK

hdel user id user name...  //删除一个或多个KK

hkeys user  //查找K对应的所有K(filed)

hvals user  //查找KK对应的所有value

hgetall user //查找K对应的所有key-value键值对

hmset ,hmget //一次设置或查找多个Hash类型的键值对

hmset user id 1 username lisi password 111

hmget user id username password   //得到多个value

hlen user //获取指定哈希表中键值对的个数   

hsetnx user id      //即id这个filed不存在才能插入

//对hash表中的value进行加减运算

hincrby user id 1 //针对Integer类型

hincrbyfloat user money  1.1   //针对小数类型

hstrlen user id  //获取value的长度

List类型

本质上是数组,顺序表,redis中的list对数组提供了头插(lpush),头删(lpop),未插(rpush),尾删(rpop)。更像是一个双端队列。使用下标进行操作,元素可以重复,有顺序。

java 复制代码
lpush key value1 value2 ...  //头插

lrange id 0 -1 //查找列表id的所有value 范围查找, -1 表示最后一个元素  

lindex key 0  //查找下标为0的value

linsert id before/after 2 10   ///在2的前面或后面插入一个10 如果指定的元素在list中是有多个的。则linsert会从左到右找到第一个元素进行操作。

lpushx,rpushx //当指定List数组存在时,才能插入

lrem id 5 1  //删除元素1,并且删除个数为5个。删除指定元素及元素的个数 List是可以重复的

5的正负代表删除的方向,正数是从左到右找并删除,负数是从右到左找并删除。

ltrim id start end //截取并更新原value,闭区间

lset id 2 10 //将下标为2的元素更新为10 下标越界会报错

llen id //获取指定列表中元素的个数

blpop brpop 带有阻塞性质的出队操作。

在列表有元素的情况下,和lpop,rpop表现是一样的。但如果列表中没有元素,非阻塞版本会立即返回nil,阻塞版本会等待阻塞一段时间timeout,若list中还是没有添加新的元素,才会返回nil。若在等待时间内有了新元素,则会立即返回,解除等待。并且阻塞期间也是可以执行其他命令。当 list 处于阻塞时,这时有多个客户端访问命令,后面list添加新元素了,会先来先到。

并且这个超时等待时间是可以代码手动设置的,如下,获取过期时间为60s

blpop id 60 即pop之前没有元素,会阻塞等待60s,60s内有元素进来,则弹出去,没有就返回空。

Set类型

Set集合中的元素具有唯一性,无序性

java 复制代码
sadd id 1 2 3 4 5... //向id集合中插入多个元素 元素若重复,只插入一个

smembers id     //查看id集合中所有的元素

sismember id 1   //查看id集合中元素1是否存在

spop [count]  //删除count个元素的个数

srandmember key [count]  //随机从集合中返回一个或多个元素。

smove key1 key2 member  //将一个元素member从集合key1中移动到key2中,具体过程是key1中删除这个元素,key2中添加这个元素。

srem key member1,member2... //从集合中一次性删除一个或多个元素

scard key //得到指定集合中元素的个数

SortedSet类型

有序集合,引入了score属性,就是按照这个分数进行排序(升序),元素有序,不重复

zadd key [NX|XX] [CH] [INCR] score member [score member ...] 可以一次性插入多个

XX:更新操作,该元素之前存在才操作

NX:插入操作,即该元素之前不存在才操作

INCR: 修改元素对应的分数做加法/减法运算

java 复制代码
zrange key 0 -1 [withscores]  //查找范围内的元素,有withscores还会返回对应的分数

zrevrange key 0 -1 [withscores] //同上,逆序输出。即降序。

zcard key //获取集合中所有元素的个数

zcount key minscore maxscore //通过一个分数区间,返回在区间内的member个数,闭区间

若想要开区间,加左括号 zcount key (minscore (maxscore

zrangebyscore key minscore maxscore //同上,也是指定一个分数区间,但返回值不同,返回的是集合的元素,而非个数

zpopmax/zpopmin key count  // 删除并返回分数最高/最低的count个元素。

bzpopmax/bzpopmin key timeout //带有阻塞性质的删除元素,超时等待,可以设置超时时间

zrank  //获取到指定元素的排名(下标)

zrevrank  //也是获取到指定元素的下标

zscore key member //根据指定的member查找并返回score分数

zrem key member1 member2.. //删除有序集合中的一个或多个元素

zremrangebyrank  //指定一个区间(下标),对这个闭区间内的所有元素进行删除

zremrangebyscore //同上 指定一个区间(分数score),对这个闭区间内的所有元素进行删除

zincrby //给指定的元素member对应的score加一个数字,即修改分数

全局命令

java 复制代码
flushall     //删除所有数据库的所有键值对

keys *            //获取所有的key

del key1 key2...  // 删除一个或多个key

exists key       //是否存在key

ttl key         // key的存活时间 单位s -1表示不会过期  -2 表示已经过期

pttl key        //key的存活时间 单位ms -1表示不会过期  -2 表示已经过期

expire key 60       //设置key的存活时间 单位s

pexpire key 1000     //设置key的存活时间 单位ms

type key   //查看key对应的value的类型 如none(查找不存在的key),string,list,set,zset(压缩set),hash,stream(消息队列)等。

object encoding key  //查看key对应value的详细数据类型

集合中的交并补

Clojure 复制代码
sinter key1 key2 key3 ... //对多个集合求交集 返回交集元素

sinterstore destination key1 key2..  //和上面一样也是求交集,不同的是此操作会将交集元素存放在destination这个指定的集合中,返回的是交集元素的个数。

sunion key1 key2... //对多个集合求并集 返回并集元素

//sinterstore 同上

sdiff key1 key2... //对多个集合求差集 返回并集元素

//sinterstore 同上

redis中的数据库是现成的,用户自己不能进行创建,也不能删除,默认redis中有16个数据库,编号0-15,这些数据库之间是相互独立的,我们之前所操作的string,hash,set,zset等都默认是在0号数据库中的。

select 0 表示选择0号数据库。

dbsize 查看当前所在数据库的所有元素个数

flushdb 删除当前数据库的所有元素 工作中禁用

flushall 删除所有数据库中的所有元素 工作中禁用

相关推荐
man201730 分钟前
【2024最新】基于Python+Mysql+django的水果销售系统Lw+PPT
数据库·mysql·django
度假的小鱼35 分钟前
01 Oracle 基本操作
数据库·oracle
张声录137 分钟前
【ETCD】【实操篇(十)】基于 ETCD 实现一个简单的服务注册及发现功能
数据库·etcd
张声录138 分钟前
【ETCD】【实操篇(十八)】ETCD监控实战:提升系统健康与集群调试效率
数据库·chrome·etcd
SelectDB技术团队43 分钟前
Apache Doris 创始人:何为“现代化”的数据仓库?
大数据·数据库·数据仓库·数据分析·doris
Suwg2091 小时前
《手写Mybatis渐进式源码实践》实践笔记(第七章 SQL执行器的创建和使用)
java·数据库·笔记·后端·sql·mybatis·模板方法模式
丁总学Java1 小时前
优化 invite_codes 表的 SQL 创建语句
java·数据库·sql
hmbbpdx1 小时前
MySql B树 B+树
数据库·b树·mysql
编程阿布2 小时前
Python基础——多线程编程
java·数据库·python
冰镇毛衣2 小时前
4.5 数据表的外连接
数据库·sql·mysql