代码编织梦想


一、Redis简介

Redis是一种非关系型数据库(NoSql),其中所有的数据都以键值对的形式存储在内存中,与传统的关系型数据库(例如Mysql)相比,其最大的优势是性能十分优越,可以支持每秒十几万此的读/写操作,并且还支持集群、分布式、主从同步等配置,常用于高并发请求场景。此外它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。
Redis在 Java Web主要的两大应用场景:存储缓存用的数据、需要高速读/写的场合。

官网介绍
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

二、Redis的Key-Value存储结构

Redis使用的是K-V(键值对)结构存储数据,其中Key是字符串类型,Value可以是多种类型,常见的有String、Hash、List、Set等。
在这里插入图片描述
为便于理解,可以将Key想象成现实生活中的“标签”,而Value则可以是多种类型,例如一张试卷(String)、一个盒子(Set)、一批门锁(Hash),写着“装有气球的盒子”的标签则贴在(指向)对应的实物盒,我们可以通过标签纸找到对应的盒子(Set),从中根据需要取出气球(Set中的元素)。

三、常见数据类型及命令

2.1 key命令

key命令是直接操作key的命令,因为一个key指向一个value,所以可以通过操作key对整个键值对进行修改。

命令释义语法
TYPE返回key所储存的值的类型TYPE key_name
EXPIRE设置key的过期时间EXPIRE key_name seconds
PERSIST移除给定key的过期时间,使得 key 永不过期PERSIST key_name
TTL以秒为单位返回key的剩余过期时间
返回-2表示key不存在,返回-1表示key存在但没有设置过期时间
TTL key_name
DEL删除已存在的键,不存在的key会被忽略,返回被删除key的数量DEL key_name
RENAME修改key的名称RENAME old_name new_name
EXISTS判断指定的key是否存在,存在返回1,不存则返回0EXISTS key_name

2.2 String类型命令

命令释义语法
SET新增或覆写一个键值对SET key value
MSET同时设置多个键值对MSET k1 v1 k2 v2 ...
GET获取指定key的值GET key_name
MGET获取一个或多个给定 key 的值MGET k1 k2 ...
STRLEN获取指定 key 所储存的字符串值的长度STRLEN key_name
INCR将 key 中储存的数字值增1INCR key_name
DECR将 key 中储存的数字值减1DECR key_name
INCRBY将 key 中储存的数字加上指定的值INCRBY key_name num
DECRBY将 key 中储存的数字减去指定的值DECRBY key_name num
APPEND为指定的 key 追加值(字符串拼接)APPEND key_name append_str
GETRANGE获取key存储的字符串的子串(参数包括头尾)GETRANGE key_name start end
eg. GETRANGE address 3 -1
SETNX仅当指定的 key 不存在时为 key 设置值
设置成功返回1,设置失败返回0
SETNX key value

2.3 Hash类型命令

Redis hash类型是field和value的映射表,特别适合用于存储对象。
在这里插入图片描述

命令释义语法
HSET为哈希表中的字段赋值(一个或多个)HSET key field value [field value ...]
HGET返回哈希表中指定字段的值HGET key field
HMGET返回哈希表中一个或多个给定字段的值HMGET key field [field ...]
HGETALL返回哈希表中所有的字段(filed)和值(value)HGETALL key
HKEYS获取哈希表中的所有字段名(filed)HKEYS key
HVALS返回哈希表所有字段的值(value)HVALS key
HINCRBY为哈希表中的字段值加上指定增量值HINCRBY key field num
HDEL删除哈希表中的一个或多个指定字段HDEL key field [field ...]

2.4 Set类型命令

Redis的Set是无序集合。集合成员是唯一的,不能出现重复的数据。

命令释义语法
SADD将一个或多个成员元素加入到集合中SADD key member [member ...]
SREM移除集合中的一个或多个成员元素SREM key member [member ...]
SPOP从集合中随机弹出n个元素(默认为1个)SPOP key [count]
SMEMBERS返回集合中的所有的成员SMEMBERS key
SISMEMBER判断成员元素是否是集合的成员(返回 0 or 1 )SISMEMBER key member
SCARD返回集合中元素的数量(去重统计)SCARD key
SINTER返回给定所有给定集合的交集SINTER key [key ...]
SDIFF回给定两个集合之间的差集SDIFF key1 key2
SUNION返回给定所有给定集合的并集SUNION key [key ...]
SRANDMEMBER随机返回n个成员(默认为1)SRANDMEMBER key [count]

2.5 Sorted Set类型命令

Redis 有序集合和集合一样不允许有重复的成员。不同的是每个元素都会关联一个double类型的分数(分数可以重复)。Redis通过分数来为集合中的成员进行排序。

命令释义语法
ZADD将一个或多个成员(带分数)加入到有序集合中ZADD key score member [score member ...]
ZREM移除集合中的一个或多个成员元素ZREM key member [member ...]
ZPOPMAX弹出分值最大的成员ZPOPMAX key [count]
ZPOPMIN弹出分值最小的成员ZPOPMIN key [count]
ZRANGE按分数返回指定区间内的成员(包含头尾,默认从小到大)ZRANGE key start stop [REV]
ZRANK返回指定成员的排名(从小到大排)ZRANK key member
ZREVRANK返回指定成员的排名(从大到小排)ZREVRANK key member

2.6 List类型命令

Redis列表对应数据结构中的队列,按照插入顺序排序,可以添加一个元素导列表的左侧或者右侧。

命令释义语法
LPUSH将一个或多个值插入到列表左侧LPUSH key element [element ...]
RPUSH将一个或多个值插入到列表右侧RPUSH key element [element ...]
LPOP弹出列表左侧的第一个元素LPOP key
RPOP弹出列表右侧的第一个元素RPOP key
LRANGE返回列表中指定区间内的元素(包括头尾)LRANGE key start stop
LINSERT在列表的某元素前或后插入一个元素LINSERT key <BEFORE | AFTER> pivot element
eg. LINSERT print BEFORE world hello
LSET在索引位置插入一个元素LSET key index element
LLEN返回列表的长度LLEN key

四、简单应用(举例)

  • TODO
  • String - 分布式锁
  • Hash - 用户登录会话存储
  • List - 分页
  • Set - 关注模型
  • SortedSet - 排行榜

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuzhongyi103/article/details/128839986

一段时间的随笔总结(redis,hibernate,高并发)_weixin_38549608的博客-爱代码爱编程

对于redis的总结:   redis缓存数据,应用于减少系统对于io,对于数据库,对于文件的访问,提高响应。 redis使用 key-value的方式进行数据的存储,以区分于关系型数据库 redis可以存储5中类型的数据 包括 String List HashMap Set ZSet(有序集合) redis使用 set-get push-pop

随笔:Redis-爱代码爱编程

Redis 一.Redis概念 1.NOSQL 1.1.什么是NOSQL NoSql(Not only Sql)泛指非关系型数据库用于超大型和高并发量的网站 1.2.NOSQL分类 2.Redis 2.1.什么是Redis 是一个开源免费C语言编写的一种非关系型数据库 ,支持key-value存储方式,数据存储在内存,由于其为非关系型数

Redis知识点-爱代码爱编程

Redis知识点总结 Redis概念Redis特性redis和memcached(分布式的高速缓存系统)MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据Redis 常见性能问题和解决方案Redis事务Redis线程模型Redis使用场景缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 Re

JAVA面试随笔(redis缓存)-爱代码爱编程

一、为什么使用redis?                          优点:1、速度快,基于C语言开发小巧精悍,数据都储存在内存中,使用单线程避免了线程切换的开销以及多线程竞争的问题。                       2、支持多种数据类型(String,Hash,List,Set,Zset,bitmaps(位图)等)。         

Redis常用命令,常用配置,常用数据结构-爱代码爱编程

最近在系统学习redis,从基础到进阶,学习随笔。 常用配置 redis.conf daemonize yes/no 后台启动 port 端口 bind 绑定主机地址 databases 默认16个库 0-15 save 快照持久化,多少s内有多少变化,就持久化一次 dbfilename 快照持久化文件名称 dir 快照持久化文件目录 s

Springboot+redis实现session共享与单点登录---随笔-爱代码爱编程

导入依赖 <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>

关于Redis的一些命令及随笔-爱代码爱编程

前言: Redis在我们的开发过程中如今已是无法替代的存在,有时候在开发过程中会对相关命令进行频繁地使用,以下是我个人对Redis的一些随笔,希望能够帮助到有需要的人(注:一名初出茅庐的开发小生,技术上才疏学浅,如果有什么技术上理解偏差的地方,希望大家指出,多多包涵) 查看当前redis是否有启动 ps -ef|grep redis 启动redis

springboo集成redis随笔-爱代码爱编程

最近项目使用到Redis作为缓存,以下是用redis一些使用,做的一次随笔记载。 使用环境:spring boot 2.1.X、Redis 5.0.X(服务端)、spring-boot-starter-data-redis spring boot集成Redis pom文件引用 默认使用lettuce连接池 <!--集成Redis-->

个人随笔之Redis配置-爱代码爱编程

一、Redis简介 1NoSQL简介 目前市场主流数据存储都是使用关系型数据库。每次操作关系型数据库时都是I/O操作,I/O操作是主要影响程序执行性能原因之一,连接数据库关闭数据库都是消耗性能的过程。尽量减少对数据库的操作,能够明显的提升程序运行效率。 针对上面的问题,市场上就出现了各种NoSQL(Not Only SQL,不仅仅可以使用关系型数据库)数据

java中list的数据覆盖问题_『Java』解决list添加同一对象覆盖原有数据问题-爱代码爱编程

这个方法不是唯一的方法,其实最简单的方法就是我在第二个for循环里面重新new一个vmNew对象,然后通过set和get方法将vm对象的值一个一个的set到vmNew里面,但是由于我们这个vm对象里面几十个字段,一个一个写麻烦,而且我今天较真了,所以有了以下的方式,随笔记录,希望对大家有帮助!!! 对象vm将重新set对象值后重新add到list里面

java jediscluster_Redis随笔(五)Jedis、jedisCluster的使用-爱代码爱编程

package com.redis; import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; impor

Redis随笔---五种基本数据类型和三种特殊数据类型-爱代码爱编程

基础操作 1.redis有16个数据库,使用命令< select * > 切换数据库 2.keys * 查询全部key 3.清空当前的数据库的内容:flushdb 4.清空全部数据库的内容:flushall 五大数据类型 1).string类型 1.判断当前key是否存在:exists key 2.移除指定数据库内的key:mo

Redis随笔-爱代码爱编程

NoSql概述 为什么要用Nosql 1、单机Mysql年代 90年代,业务访问量不多,一个基本的网站单个数据库完全足够 2、Memcached(缓存)+Mysql+垂直拆分(读写分离) 网站80%的情况都在读,每次都要取查询数据库的话就十分麻烦!为了减轻数据压力,我们使用缓存来保证效率。 发展过程:优化数据结构和索引-&g

redis-主从复制、sentinel、cluster集群【随笔四】_akieay的博客-爱代码爱编程

Redis 集群 Redis 提供了三种集群策略: 主从复制模式:这种模式⽐较简单,主库可以读写,并且会和从库进⾏数据同步,这种模式下,客户端直接连主库或某个从库,但是但主库或从库宕机后,客户端需要⼿动修改 IP,另外,这种模式也⽐较难进⾏扩容,整个集群所能存储的数据受到某台机器的内存容量,所以不可能⽀持特⼤数据量Sentinel(哨兵)模式:这种模式

分库分表后全局唯一id的四种生成策略对比-爱代码爱编程

分库分表之后,ID主键如何处理? 当业务量大的时候,数据库中数据量过大,就要进行分库分表了,那么分库分表之后,必然将面临一个问题,那就是ID怎么生成?因为要分成多个表之后,如果还是使用每个表的自增长ID,意味着每个表都是从1开始累加的,这样肯定是不对的。需要一个全局唯一的ID来支持。所以这也是你实际生产环境中必须考虑的一个问题。全局ID生成器,一般需要满

java随笔 | springboot项目中引入并使用redis(步骤)_springboot 引入redis-爱代码爱编程

文章目录 第一步:导入依赖第二步:配置application.yml第三步:在业务层中使用Redis(两种方式任选一即可)方式1:RedisTemplate装配先 · 创建配置类RedisConfig再 · R