Nosql

Redis 深度学习(1)

August 8, 2017
Redis, C, Nosql

如果人生没有看过一个数据库的源码,那与咸鱼有什么区别。 准确的说,我所会写的代码都是从别人那里看来的。但是我所会写的代码就那么点儿,实在不怎么拿得出手。刚好遇到这个源码只有2万多行的纯C语言的数据库项目,怎么都得读读,否则不敢说自己会写代码。 Redis 简介 # 在之前有一篇关于redis的简介和安装的文章,所以就不从宏观上介绍了。 与memcached相比有下面这几个特点: Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis可以实现主从复制,实现故障恢复。 Redis的Sharding技术: 很容易将数据分布到多个Redis实例中 GitHub地址 Redis是单线程的,运行在CPU的一个核上。所以在线程的思路上整个程序是很清晰的。我主要从代码中学习一些网络编程的方法,C语言数据结构的写法,内存操作。 在redis4.0.1中一共有600多个文件,包含了C文件、bash脚本、Lua脚本、tcl脚本,额,,还有一些没见过的东西。太菜了,连文件后缀都没见过。 但是这些并不都是redis的代码,在src/文件夹中可以看到只有120多个c文件,这些才是核心。600多个是包含了一些测试文件和单元测试等等。 Redis的数据结构 # redis对外提供的数据结构在上一篇中也都介绍过,这里带着介绍一下其内部实现的方式。

redis

July 14, 2017
Nosql, Redis

redis 是一个高速的高级的键值对存储系统。开源的,高可用,高效。 其将数据完全保存在内存中,磁盘只做持久化。并且支持多种数据结构:list、set、hashtable等,使用方便。 使用的场景主要有: 如排行榜、计数器缓冲、数据统计(如TopN,交集,并集等)、最新项目检索、地理位置存储及range查询 实时统计和过期处理,如用户投票及排序;复杂的数据结构缓存及内存数据库 缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。 由于其属于内存数据库,所以成本比较大,冈起来比较爽一点。 Install on Ubuntu # sudo apt-get install redis-server Startup # redis-server Work on it # redis-cli # 出现命令提示符即正常工作 支持的数据结构 # 正时因为支持这些数据结构才易用。 字符串 # Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。 set name `Paladnix` # 存入key-value get name # 获取key对应的value Hash散列 # Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。 HMSET key uname "Paladnix" password "123" level 0 # key 对应一个对象 列表List # Redis列表只是字符串列表,按插入顺序排序。可以向Redis列表的头部或尾部添加元素。 lpush alist redis # 插入字符串 lpush alist Paladnix # 插入字符串 lrange alist 0 10 # 获取字符串 集合Set # Redis集合是字符串的无序集合。在Redis中,可以添加,删除和测试成员存在的时间O(1)复杂性。 ...