Redis是什么
Redis是基于内存运行的高性能 K-V 数据库
Redis存储位置
内存中,所以效率高
Redis的五种数据结构
- String:Redis最基本的数据类型,一个键对应一个值,一个键值最大存储512MB
- set:是String字符串类型的无序集合,也不可重复
- zset:是String类型的有序集合,也不可重复。有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序
Redis是基于内存运行的高性能 K-V 数据库
内存中,所以效率高
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
Golang的Channel,发送一个数据到Channel 和 从Channel接收一个数据都是原子性的。
如果把线程安全定义为允许多个goroutine同时去读写,那么golang 的channel 是线程安全的,因为channel底层数据结构中是带有lock的,不需要在并发读写同一个channe时再加锁。
而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁(共享内存通信),后者就是Channel。
也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的
总结hchan结构体的主要组成部分有四个:
垃圾回收就是对程序中不再使用的内存资源进行自动回收的操作。
堆内存上分配的数据对象,不会再使用时,不会自动释放内存,就变成垃圾,在程序的运行过程中,如果不能及时清理,会导致越来越多的内存空间被浪费,导致系统性能下降。
因此需要内存回收,内存回收分为两种方式:
手动释放占用内存空间
可能会出现的问题:
悬挂指针: 释放的早了,后续对数据的访问就会出错,因为对应的内存空间可能已经清空,重新分配,甚至是归还给操作系统了。
内存泄漏: 如果忘了释放,一直占用内存,导致内存泄漏。
自动内存回收
程序自动检测对象决定是否要回收其内存。
核心思想:程序中用得到的数据,一定是可以从栈或数据段这些根节点追踪得到的数据,追踪不到的数据,肯定用不到,也就是垃圾。