基础

# redis默认有16个数据库,数组下标从0开始,默认使用0号库
# 当我们启动服务器并连接客户端之后:
set <key> <value> # 向数据库中添加数据用于测试
keys * # 查看当前库所有key
exists key # 判断某个key是否存在
type key # 查看你的key是什么类型
del key # 删除指定的key数据
unlink key # 非阻塞删除指定的key(不是立即删除,而是之后空闲时删除)
expire key 10 # 为给定的key设置过期时间,单位是秒;这里表示10秒后过期
ttl key # 查看还有多少秒过期,-1表示永不过期,-2表示已过期
select 2 # 命令切换数据库;这里表示切换到2号库
dbsize # 查看当前数据库的key的数量
flushdb # 清空当前库
flushall # 清空全部库
clear # 清空屏幕

Redis中基本数据类型操作:https://blog.csdn.net/hzlarm/article/details/99432240

String

# 是二进制安全的,可包含任何数据,如图片、序列化对象;
# 一个String类型的字符串中value最大为512M
# 常用命令:
set <key> <value> # 添加键值对
get <key> # 查询对应键值
append <key> <value> # 将<value> 追加到指定key原值的末尾
strlen <key> # 获得值的长度
setnx <key> <value> # 只有在 key 不存在时,设置 key 的值,存在时则不会覆盖;而set命令,当key存在时会覆盖
incr <key> # 将 key 中储存的数字值增1;只能对数字值操作,如果为空,新增值为1
decr <key> # 将 key 中储存的数字值减1;只能对数字值操作,如果为空,新增值为-1
incrby / decrby <key> <步长> 将 key 中储存的数字值增减;例如incrby k2 100 表示在k2的原值上加100 # 对redis的操作是原子性,因为redis是单线程+多路IO复用 mset <key1> <value1> <key2> <value2> # 同时设置一个或多个 key-value对
mget <key1> <key2> <key3> # 同时获取一个或多个 value
msetnx <key1> <value1> <key2> <value2> # 同时设置一个或多个 key-value 对,原子性,有一个失败则都失败,有一个key存在则全部设置失败
getrange <key> <起始位置> <结束位置> # 获取指定key的value的指定索引位置的值
setrange <key> <起始位置> <value> # 用 <value> 覆盖 指定<key>所储存的字符串值,从<起始位置>开始(索引从0开始)
setex <key> <过期时间> <value> # 设置键值的同时,设置过期时间,单位秒
getset <key> <value> # 以新换旧,设置了新值同时获得旧值

List

# 数据结构:数据较少时使用ziplist,数据较多时使用quicklist
# 底层是双向链表,按照插入顺序排序,可在列表的头部或尾部操作数据
# 在该数据类型中,key表示一个list集合
lpush/rpush <key> <value1> <value2> <value3> # 从左边/右边插入一个或多个值
  • 例如插入一个list集合k1,list集合中的值为v1, v2, v3



    因为是从左边插入值,所以最先插入的值被挤到了最右边
lpop/rpop  <key>        # 从左边/右边取出一个值,当值被取出后,键也就没有了

  • 例如从左边取出k1集合中的一个值

rpoplpush  <key1><key2>        # 从<key1>列表右边吐出一个值,插到<key2>列表左边。
lrange <key> <start> <stop> # 按照索引下标获得元素(从左到右)
lrange k1 0 -1 # 0左边第一个,-1右边第一个,0-1表示获取所有;这里表示获取k1集合中的所有值
lindex <key> <index> # 按照索引下标获得元素(从左到右)
llen <key> # 获得列表长度
linsert <key> before <value> <newvalue> # 在<value>的后面插入<newvalue>插入值
lrem <key> <n> <value> # 从左边删除n个value(从左到右)
lrem k1 2 v1 # 当k1集合中有多个相同的value,可以删除k1集合中2个值为v2的value,从左往右开始删除
Lset <key> <index> <value> # 将列表key下标为index的值替换成value

Set

# set类型的数据结构是dict字典,字典是用哈希表实现的,所有value都指向同一个内部值
# 无序集合,自动排重(去重)
sadd <key> <value1> <value2> # 将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
  • 例如k1是一个set集合,向该集合添加数据v1, v2, v3

smembers <key>         # 取出该集合的所有值

sismember <key> <value>             # 判断集合<key>是否含有该<value>值,有则返回1,没有返回0
scard <key> # 返回该集合的元素个数。
srem <key> <value1> <value2> # 删除集合中的某个元素。
spop <key> # 随机从该集合中取出一个值,取出来后,该集合就没有这个值了
srandmember <key> <n> # 随机从该集合中取出n个值;不会从集合中删除
smove <source> <destination> value # 把集合中一个值移动到另一个集合;smove k1 k2 v2 # 表示从集合k1中的v2移动到k2集合
sinter <key1> <key2> # 返回两个集合的交集元素。
sunion <key1> <key2> # 返回两个集合的并集元素。
sdiff <key1> <key2> # 返回两个集合的差集元素(key1中的,不包含key2中的)

Hash

# hash类型底层的数据结构:ziplist(压缩列表:长度较短个数较少时使用)、hashtable(哈希表)
# hash是一个键值对集合,类似Java中的Map<String,Object>;key是键,value是一个对象(field和value的映射表)
hset <key> <field> <value> # 给<key>集合中的 <field>键赋值<value>
  • 例如:key是user1,value是id=1,fieid是id,key是一个hash集合

hget <key1> <field>           # 从<key1>集合取出<field>的 value
hmset <key1> <field1> <value1> <field2> <value2> # 批量设置hash的值
Hexists <key1> <field> # 查看哈希表 key 中的 field 是否存在
hkeys <key> # 列出该hash集合的所有field
hvals <key> # 列出该hash集合的所有value
hincrby <key> <field> <increment> # 为哈希表 key 中的域 field 的值加上增量,正数为加,负数为减
  • 例如:user1中的id为1,在之上加上20

hsetnx <key> <field> <value>            # 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 ,若该field已存在则会报错

Zset

# Zset是一个有序不重复的集合,集合中的每个成员都关联一个评分(score),集合中成员是唯一的,评分可以重复
# Zset底层的数据结构:
i. Hash Map<field value> field是评分,value是成员
ii. 跳跃表
zadd <key> <score1> <value1> <score2> <value2> # 将一个或多个 member 元素及其 score 值加入到有序集 key 当中
  • 例如向课程集合中添加课程和对应的评分

zrange <key><start><stop>  [WITHSCORES]         # 查询集合中指定下标在<start><stop>之间的值,带WITHSCORES,可以让分数一起和值返回到结果集

  • 例如返回课程集合中下标是0到2的值,返回的结果集是根据分数从小到大排序

zrangebyscore <key> <min> <max> [withscores] [limit offset count]          # 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员,有序集成员按 score 值递增(从小到大)次序排列;加上withscores会同时显示分数

  • 例如:返回评分是10到30之间的value

zrevrangebyscore <key> <max> <min> [withscores] [limit offset count]             # 同上,改为从大到小排列
zincrby <key> <increment> <value> # 为元素的score加上增量
  • 例如为Java加上20,Java的分数就变成了40

zrem  <key> <value>         # 删除该集合下,指定值的元素 

  • 例如删除集合下的js

zcount <key> <min> <max>               # 统计该集合,分数区间内的元素个数 

  • 例如统计分数在0到30之间的个数:

zrank <key> <value>          # 返回该值在集合中的排名,从0开始

  • 例如返回Java的排名:

Redis(二):基本数据类型的更多相关文章

  1. Redis之(二)数据类型及存储结构

    Redis支持五中数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及zset(sortedset:有序集合). Redis定义了丰富的原语命令,可以直接与Redis ...

  2. Redis(二) 数据类型操作指令以及对应的RedisTemplate方法

    1.Redis key值操作以及RedisTemplate对应的API 本文默认使用RedisTemplate,关于RedisTemplate和StringRedisTemplate的区别如下 Red ...

  3. redis中各种数据类型对应的jedis操作命令

    redis中各种数据类型对应的jedis操作命令 一.常用数据类型简介: redis常用五种数据类型:string,hash,list,set,zset(sorted set). 1.String类型 ...

  4. Redis进阶实践之四Redis的基本数据类型

    一.引言    今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软件使用的更频繁,适用范围更广呢?就是因为R ...

  5. redis的基本数据类型

    一:redis是一个开源的,使用C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value方式存储的nosql数据库.作为缓存服务器,速度效率都很快,和memcache相似 redis支持 ...

  6. redis中各种数据类型的常用操作方法汇总

    在spring中使用jedisTemplate操作,详见https://www.cnblogs.com/EasonJim/p/7803067.html 一.Redis的五大数据类型 1.String( ...

  7. redis 五种数据类型

    前言 前面学会了单机, 学会了集群, 但是redis咋用啊? 或者说, redis支持哪些数据类型呢? 常用的有五种: String , Hash, List, Set, zset(SortedSet ...

  8. Redis进阶实践之四Redis的基本数据类型(转载4)

    Redis进阶实践之四Redis的基本数据类型 一.引言 今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软 ...

  9. Redis(三)--- Redis的五大数据类型的底层实现

    1.简介 Redis的五大数据类型也称五大数据对象:前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包 ...

  10. 【Redis】基本数据类型及命令操作(超详细)

    一.String 1.1 概述 1.2 相关命令列表 1.3 命令示例 二.List 2.1 概述: 2.2 相关命令列表: 2.3 命令示例: 2.4 链表结构的小技巧: 三.Hashes 3.1 ...

随机推荐

  1. Linux chgrp命令的使用

    Linux chgrp(change group)命令用于变更文件或目录的所属群组. 语法 chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 ch ...

  2. XSS challenges靶机

    第一关 <script>alert(123)</script> "><svg onload=alert(123)> 第二关 <script&g ...

  3. 【FATE】设置虚拟机固定IP以及免密登录

    一.前期准备 1.VMWare上新建三个Centos7的虚拟机 2.VMWare虚拟机的三种联网方式 1.桥接模式 -- 桥接: 默认使用VMnet0 这一种联网方式最简单,在局域网内,你的主机是怎么 ...

  4. 数据结构——图的深度优先遍历(邻接矩阵表示+java版本)

    ​1.深度优先遍历(DFS) 图的深度优先遍历本质上是一棵树的前序遍历(即先遍历自身,然后遍历其左子树,再遍历右子树),总之图的深度优先遍历是一个递归的过程. 如下图所示,左图是一个图,右图是图的深度 ...

  5. 必备!一文掌握Wordpress插件

    必备!一文掌握Wordpress插件 什么是插件? Wordpress是一个非常强大的建站系统,而在我们建站的过程中,插件的使用必不可少. 插件是WordPress功能的扩展,也是WordPress得 ...

  6. openssl not found 离线安装的openssl问题

    离线安装问题 正常我们在Linux中按照 nginx的openssl依赖都是通过 yum来安装的,但是由于一些特殊的服务器公司不让服务器连接互联网,所以就导致我们必须通过离线方式来进行安装,但是我们离 ...

  7. 官宣 .NET MAUI 预览版 6

    最近,我们发布了.NET 多平台应用程序UI (MAUI)的最新进展. 在此版本中,我们全力支持Visual Studio 2022 预览版2.这也标志着我们首次将.NET MAUI 作为工作负载安装 ...

  8. 史上最详细的Android消息机制源码解析

    本人只是Android菜鸡一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 606页Android最新面试题含答案,有兴趣可以点击获取. ...

  9. Docker入门第三章

    配置阿里云镜像加速器 1.首先打开阿里云,搜索容器镜像服务,打开如下 2.配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.j ...

  10. Spring IOC容器核心流程源码分析

    简单介绍 Spring IOC的核心方法就在于refresh方法,这个方法里面完成了Spring的初始化.准备bean.实例化bean和扩展功能的实现. 这个方法的作用是什么? 它是如何完成这些功能的 ...