文章

redis之我见

redis相当于一套运行在内存里面的支持rpc的某种通用存储模块,因为在内存中,所以不像mysql一样需要使用非常复杂的方法才能实现高效搜索。同时因为在内存里面,他可以支持比较复杂的操作与一些相对复杂的数据类型。

redis内部的数据是在一个map里面,里面的value又支持各种数据类型。redis也对于这些数据结构进行一些复杂的操作。像是链表左右push、pop等操作。

支持像是高效的优先队列或者锁(redis内锁)等操作。

支持快照式持久化rdb和AOF式持久化,而且AOF操作记录也支持进行精简优化。可以每次停服时进行快照保存。然后停服间进行AOF来避免恢复数据太长。RDB可以被压缩到很小,比较适合异地灾容备份。每次RDB会fork一个进程单独打快照。当然也可以多个redis,rdb相互错开。

Xredis相当于一种客户端,支持以树型结构管理若干个redis。就是api和redis的命令行有一点区别。

redis的基础类型只有string。不过他的string其实是bytes。所以可以把各种东西二进制化后存进去。但是对于string的一些操作函数,类似于INC就不能实现了。像是复合的数据结构只是多套了一个数据结构。用来实现某种map所做不到的功能。例如将一个100w行的map做在map数据结构里面,避免每次都在全局的map中进行搜索,而导致键很多。。。这里需要注意redis的文件夹是没有实现物理上的分层的。

redis 文件夹(命名空间)

可以用aa:bb:cc这样来给键区分层次。在rdm这种客户端里面会把同前缀的键收到一个文件夹一样的地方。

起一个redis也非常的方便,一个端口的redis数据库中可以存在很多的db实例。默认redis一启动就会起16个实例。可以使用select方法来切换redis库。也可以更改配置来改变redis的数量。这个用来分库应该是比较方便的。

redis可以在退出前在客户端输入save就可以将数据全部存在执行文件夹里面。当redis启动时,会从文件夹下读出数据。并回复。

因此一个redis exe文件夹其实就是一个redis实例,这个和mysql的服务化还是有差异的,这个更加轻小一点。


redis本身是没有多线程的概念的,所以不像是c++一样需要为了多线程的安全而执行奇怪的操作,实际上他加的是分布式的锁。主要还是有对数据进行操作的情况下,避免一些多线程相关的问题。

xredis

isAsc是否升序

只有zset

License:  CC BY 4.0