01-Redis基础和String数据类型

本文介绍了Redis的启动方式及基本操作,并详细解析了Redis中使用的简单动态字符串(SDS)的数据结构特点及其与C语言字符串的区别。同时,还探讨了SDS的不同编码方式以及应用场景。

01、Redis的启动

【1】、后台启动

1、修改配置文件redis.conf

daemonize yes

bind 0.0.0.0

2、启动redis

./redis-server /usr/local/soft/redis-5.0.5/redis.conf

【2】、基本操作

redis默认有16个库(0~15),默认使用第一个db0。

databases 16

1、切换数据库

select 0

2、清空当前数据库

flush db

02、基本数据类型

String、Hash、Set、List、Zset、Hyperloglog、Geo、Streams

03、SDS(Simple Dynamic String   简单动态字符串)

【1】、什么是SDS?

Redis中字符串的实现。SDS又有多种结构(sds.h):sdshdr5、sdshdr8、sdshdr16、sdshdr32、sdshdr64,用于存储不同的长度的字符串。分别代表2^5=32byte,2^8=256byte,2^16=65536byte=64KB,2^32byte=4GB。

【2】、为什么Redis要用SDS实现字符串

C语言本身没有字符串类型,只能用字符数组char[ ]实现。但是数组char[ ]用在redis上存在一些缺点

1、使用字符数组必须先给目标变量分配足够的空间,否则可能会溢出。

2、如果要获取字符长度,必须遍历字符数组,时间复杂度是O(n)。

3、C字符串长度的变更会对字符数组做内存重分配。

【3】、SDS的特点

1、不用担心内存溢出问题,如果需要会对SDS进行扩容。

2、获取字符串长度时间复杂度为O(1),因为定义了len属性。

3、通过“空间预分配”(sdsMakeRoomFor)和“惰性空间释放”,防止多次重分配内存。

【4】、embstr编码方式和raw编码方式的区别?

一个字符串值的长度小于等于44字节,则按照embstr进行编码,否则按照raw进行编码。

1、embstr的使用只分配一次内存空间(因为RedisObject和SDS是连续的),而raw需要分配两次内存空间(分别为RedisObject和SDS分配空间)。

2、embstr的好处在于创建时少分配一次空间,删除时少释放一次空间,以及对象的所有数据连在一起,寻找方便。

【5】、int和embstr什么时候转化为raw?

int数据不再是整数,或大小超过了long的范围。

【6】、明明没有超过阈值,为什么变成raw了?

修改embstr对象,修改后的对象一定是raw的,无论是否达到了44个字节。

【7】、当长度小于阈值时,会还原吗?

编码转换在Redis写入数据时完成,且转换过程不可逆

【8】、封装的作用

通过封装,可以根据对象的类型动态地选择存储结构和可以使用的命令,实现节省空间和优化查询速度。

04、String字符串

【1】、操作命令

1、设置多个值

mset key1 value1 key2 value2

2、判断key是否存在

setnx key1

3、保持原子性、保持释放锁失败的补充性,可多参数

set key1 value1 ex 10 nx

4、值递增

incr key1

incrby key 100

5、值递减

decr key1

decrby key1 100

6、浮点数增加

set f 2.5

incrbyfloat f 7.3

7、获取多个值

mget key1 key2

8、获取长度

strlen key1

9、字符串追加内容

append key1 value2

10、获取指定范围的字符串

getrange key1 0 8

【2】、数据模型

Redis是KV的数据库,它是通过hashtable实现的。每个键值对都会有一个dictEntry。其中里面指向了key和value的指针,next指向下一个dictEntry。

【3】、redisObject

redisObject定义在src/server.h文件中

可以使用type命令来查看对外的类型。

type key1

string

【4】、内部编码

【5】、字符串类型的内部编码有三种?

1、int,存储8个字节的长整型(long,2^63-1)。

2、embstr,代表embstr格式的SDS(SimpleDynamicString简单动态字符串),存储小于44个字节的字符串。

3、raw,存储大于44个字节的字符串(3.2版本之前是39字节)

【6】、应用场景

1、缓存

2、数据共享分布式

3、分布式锁 

4、全局ID

5、限流

INT类型,INCR方法。以访问者的IP和其他信息作为key,访问一次增加一次计数,超过次数则返回false。

6、位统计【重点】

字符是以8位二进制存储的。

例如:在线用户统计,留存用户统计

Redis 统计7天连续在线用户人数

http://www.321332211.com/thread?topicId=224

 

 

【无人机】基于改进粒子群算法的无人机路径规划研究[遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值