redis端口号是多少(redis 6380端口)

redis端口号是多少(redis 6380端口)Redis Remote Dictionary Server 远程词典服务器 是一个基于内存的键值型 Nosql 数据库 特征 键值型 value 支持多种不同的数据结构 功能丰富 单线程 每个命令具备原子性 低延迟 速度快 基于内存

大家好,我是讯享网,很高兴认识大家。



Redis(Remote Dictionary Server),远程词典服务器,是一个基于内存的键值型Nosql数据库。

特征:

键值型,value支持多种不同的数据结构,功能丰富

单线程,每个命令具备原子性

低延迟,速度快(基于内存,IO多路复用,良好的编码)

支持数据持久化

支持主从集群、分片集群

支持多语言客户端

安装完成后设置开机自启

redis-cli [options] [commands]

options(选择):

常用的有:-h 127.0.0.1 指定要连接的redis的IP地址,默认是127.0.0.1

-p 6379 :指定节点的端口,默认是6379

-a :指定其访问密码

数据结构介绍:redis是一个key-value数据库,key一般是String类型,但是value类型多种多样

String Hash List Set SortedSet 是五个基本类型

GEO BitMap HyperLog等是特殊类型

通用命令(generic)

常用的有KEYS:查看符合模板的所有key,不建议再生产环境设备上使用

DEL:删除一个指定的key

EXISTS:判断一个key是否存在

EXPIRE:给一个key'设置有效期,有效期到时该key被自动删除

TTL:查看一个key的剩余有效期

String类型

分为三大类:string(普通字符串)、int(整数类型,可以自增自减)、float(浮点类型,可以自增自减),三者底层都是用字节数组去存储,只不过编码方式不同。字符串类型的最大空间不能超过512m。

常见命令:SET:添加或修改

GET:根据key获取value

MSET:批量添加

MGET:根据多个key得到多个value

INCR:让一个整形自增1

INCRBY:自增并指定步长

INCRBYFLOAT:浮点型数字自增,一定要指定步长

SETNX:添加一个,如果不存在才添加

SETEX:添加一个,并指定有效期

key的结构

redis的key允许多个单词形成层级结构,单词之间用“:”隔开

Hash类型

也叫做散列,value是一个无序字典。类似java的hashmap

hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD


讯享网

List类型

与java中LinkedList类似,可以看成一个双向链表结构。既可以支持正向检索也可以支持反向检索

特征:有序、元素可重复、插入和删除快、查询速度一般

Set类型

与java中的hashset类似,可以看作是一个value为null的hashmap

特征:无序、元素不可重复、查找快、支持交集、并集、差集等功能

SortedSet类型

他的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(skiplist)加hash表。

特性:可排序、元素不重复、查村速度快

由于其可排序特性,经常用来实现排行榜这样的功能。

快速入门:1、引入依赖 2、建立连接 3、测试string 4、释放资源

Jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用连接池代替直连。

SpringDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成。

步骤:1、引入依赖 2、配置文件 3、注入RedisTemplate 4、编写测试

SpringDataRedis的序列化方式

RedisTemplate可以接受任意object作为值写入Redis,不过写入前会把其序列化成字节形式,默认是采用JDK序列化,得到的结果可读性差、占用内存较大

什么是缓存?缓存是数据交换的缓冲区(称作Cache),是存储数据的临时地方,一般读写性能较高。

缓存的作用?1、降低后端负载  2、提高读写效率,降低响应时间

缓存的成本?1、数据一致性成本 2、代码维护成本 3、运维成本

内存淘汰:

不用自己维护,利用redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存。

一致性:差

维护成本:无

超时剔除:

给缓存数据添加TTL时间,到期后自动删除缓存。下次查询时更新缓存。

一致性:一般

维护成本:低

主动更新:

编写业务逻辑,再修改数据库的同时,更新缓存。

一致性:好

维护成本:高

客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

常见的解决方案:1、缓存空对象(优点:实现简单,维护方便 缺点:额外的内存消耗,可能造成短期的不一致)

2、布隆过滤(优点:内存占用较少,没有多余key 缺点:实现复杂、存在误判可能)

同一时段大量的缓存key同时失效或者reids服务宕机,导致大量请求到达数据库,带来巨大压力。

解决方案:1、给不同的key的TTL添加随机值

2、利用Redis集群提高服务的可用性

3、给缓存业务添加降级限流策略

4、给业务添加多级缓存

也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较为复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。

解决方案:1、互斥锁(优点:没有额外的内存消耗、保证一致性、实现简单 缺点:线程需要等待,性能受影响、可能有死锁风险)

2、逻辑过期(优点:线程无需等待,性能较好 缺点:不保证一致性、有额外内存消耗、实现复杂)

待补充

超卖问题是一个典型的多线程安全问题,针对这一问题的常见解决方案就是加锁:

悲观锁

认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。

例如Synchronized、Lock都属于悲观锁

乐观锁

认为线程安全问题不一定会发生,因此不加锁,只是在更新数据时去判断有没有其他线程对数据做了修改

(如果没有修改则认为是安全的,自己才更新数据)

(如果已经被其他线程修改说明发生了安全问题,此时可以重试或异常)

方法:1、版本号法,在表中加一个字段(版本),每次更改之前都要判断版本号是否被修改

2、CAS法(Compare and Set)

将原本就有的字段作为版本号

在单机模式下加锁可以解决一人一单的安全问题,但是在集群模式下就不行了。

分布式锁

满足分布式系统或集群模式下多进行可见并且互斥的锁

特点:多进程可见、互斥、高可用、高性能、安全性

分布式锁的核心是多进程之间的互斥,常用的方式有三种:

MysqlRedis Zookeeper互斥利用mysql本身的互斥锁机制利用setnx这样的互斥命令利用节点的唯一性和有序性实现互斥高可用好好

高性能一般好一般安全性断开连接,自动释放锁利用锁超时时间,到期释放临时节点,断开连接自动释放
基于Redis的分布式锁

Redis的Lua脚本

在一个脚本中编写多条Redis命令,确保多条命令执行时的原子性。Lua是一种编程语言。

小讯
上一篇 2025-05-02 18:40
下一篇 2025-06-09 09:13

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/140543.html