【读书笔记】Redis入门
- Remote Dictionary Server 远程字典服务
- Redis是基于内存的存储
- 在一台普通的笔记本上,Redis每秒的读取速度可以达到10万
- 内存读取数据,断电的时候数据会丢失,但是Redis支持异步持久化到硬盘
- 多功能
- 数据库开发
- 缓存开发
- 队列开发
- 发布/订阅模式,可构建聊天室系统
- 键生存时间
- 每个键都可以设置生存时间,时间到后自动删除
- 与memcached的对比
- Redis是单线程,Memcached是多线程,所以多核服务器Mem的性能更高
- Redis的性能已经足够优秀了,所以大部门情况下Redis的性能并不会成为瓶颈
- 如果需要用到高级数据类型和持久化,Redis会是更好的选择
- 项目是开源的,3万多行代码,100名贡献者
- 安装与命令
- redis-cli redis command line interface
- 命令回复
- 状态回复 PONG
- 错误回复 ERROR
- 整数回复 1
- 字符串回复 "1"
- 空回复 nil
- 多行字符串回复 "foo" "bar"
- 字典实例
- Redis默认支持16个字典实例
- Select 1选择1号数据库字典, 默认是0号
- FLUSHALL会清空所有 字典里面的数据,彼此并不隔离
- 不支持自定义名字
- 大小
- Redis非常轻量级,一个空的Redis实例只占有1M的大小
- 键命名:
- 对象类型:对象ID:对象属性
- 键的命名一定要有意义,如u:1:f的可读性显然不如user:1:friends好
2:Redis常用命令
- Keys * 显示所有的键,不建议在生产环境使用
- Exists,判断一个键是否存在。
- 返回1 表示存在
- 返回2 表示不存在
- Del k1 k2 k3 ....kn
- 返回 1/2/3../n 表示成功删除的键的个数
- Keys */k1 获取键
- Type k1/k2... 获取键的类型
- Set/Lpush/
- 字符型
- 键允许的最大容量为512M
- 是其他四中类型的基础
- 命令
- set
- get
- incr、decr 递增 递减
- 如果是string会报错, 比如incr s1(s1 的值是a)
- 所有redis命令都是原子操作,不会出现并发的问题
- incrby、decrby i 5 把i增加/减少 5
- incrbyfloat i 2.5 通过float类型添加
- append key value 向key的末尾
- Mset k1 v1 k2 v2
- Mget k1 k2 k3
- GetBit/SetBit key offset 0/1 设置key值offset位置的bit为0或者1
- BitCount k start end
- BitOp ex: bitop or result foo1 foo2
- And 并且
- Or 或者
- XOR 异或
- Not 非
- 利用位操作命令可以非常紧凑地存储布尔值。比如某网站的每个用户都有一个递增的整数ID,如果使用一个字符串类型键配合位操作来记录每个用户的性别(用户ID作为索引,二进制位值1和0表示男性和女性),那么记录100万个用户的性别只需占用100 KB多的空间,而且由于GETBIT和SETBIT的时间复杂度都是0(1),所以读取二进制位值性能很高。
- GetSet, set一个新值给key,返回旧值
你的系统每当有新用户访问时就用INCR命令操作一个Redis key。你希望每小时对这
2. 散列型
- 最多可以容纳2^32个键
- 命令
- Hset key field value
- Hget key field
- Hmset key field1 value1 field2 values
- Hmget key field1 field2
- Hexists key field1 查看key 中 field1是否存在
- Hsetnx key filednotexist value
- HIncrby key filed 20 将key中 field的值增加20
- Hdel key field field2 批量删除 key中的域
- Hkeys key 获取key中所有的field
- Hvals key 获取key中所有的值
- Hlen key 获取key中 field的个数
3. 列表型
- 概览
- 列表内部是使用双向链表实现的,所以越靠近两端的元素速度越快
- 最多可以容纳2^32-1个键
- 命令
- Lpush listkey 1 2 3 4
- Rlush listkey 5 6 ,结果是 4 3 2 1 5 6
- Lpop listkey
- Rpop listkey
- Llen listkey 返回键的元素数量,不存在返回0
- Lrange listkey start end 返回 start 到 end之间的元素
- Lrange listkey 0 lenth 从左边开始获取所有
- Lrange listkey -length -1 从右边开始获取所有
- Lrem listkey count value
- count >0 从左边开始,删除count个键值等于value的键
- count <0 从右边开始,删除count个键值等于value的键
- Lindex listkey 0 获取左边第一个, Lindex listkey -1 获取右边第一个
- Ltrim listkey start end 类似 lrange
- Linsert listkey After/Before findValue insertValue 在listkey中查找值等于findValue的元素,然后根据After/Before在后面插入数据
- RpopLpush source destination 很方便的传递数据,从一个列表的队尾传递到另一个列表的队首。
- 应用场景,较少访问中间元素的应用场景
- 新鲜事
- 日志
4. 集合型
- 概览
- 一个集合类
- 最多可以容纳2^32-1个键
- 命令
- Sadd key a b c 批量添加元素
- Srem key a d 删除 a,d没有找到
- Smembers key
- Sismember key a 判断a是否存在在key中
- Sdiff key1 key2 表示所有属于key1但是不属于key2的元素
- Sinter key1 key2 取交集
- Sunion key1 key2 取并集
- Scard key1 获取key中元素个数
- Sdiffstore destiontion key1 key2
- Sintertore destiontion key1 key2
- Sunionstore destiontion key1 key2
- Srandmember key 随机获取key中的元素
- 实践
- 存储文章标签
- 127.0.0.1:6379> sadd post:1:tags java
(integer) 1
127.0.0.1:6379> sadd post:2:tags java redis
(integer) 2
127.0.0.1:6379> sadd post:3:tags java redis mysql
(integer) 3
127.0.0.1:6379> sadd tags:redis:post 3
(integer) 1
127.0.0.1:6379> sadd tags:mysql:post 2 3
(integer) 2
127.0.0.1:6379> sadd tags:java:post 1 2 3
(integer) 3
127.0.0.1:6379> sinter tags:redis:post tags:mysql:post tags:java:post
1) "3"
127.0.0.1:6379>
sinterstore tags_inter tags:redis:post tags:mysql:post tags:java:post
5:有序集合
4:Redis重要特性
【读书笔记】Redis入门的更多相关文章
- <读书笔记>如何入门爬虫?
大部分爬虫框架都是 发送请求 获得页面 解析页面 下载内容 存储内容 定个宏伟目标 淘宝1000页 知乎 豆瓣 ... python基础 list.dict:序列化爬取的内容 切片:分割爬取内容,获取 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- 第三章 Git的入门 - 读书笔记
Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...
- 《深入理解bootstrap》读书笔记:第一章 入门准备
一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 ...
- 《Redis设计与实现》读书笔记
<Redis设计与实现>读书笔记 很喜欢这本书的创作过程,以开源的方式,托管到Git上进行创作: 作者通读了Redis源码,并分享了详细的带注释的源码,让学习Redis的朋友轻松不少: 阅 ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- 《Github入门与实践》读书笔记 蟲咋先生的追求之旅(上)
<Github入门与实践>作者: [日] 大塚弘记 译者:支鹏浩/刘斌 简介 本书从Git的基本知识和操作方法入手,详细介绍了GitHub的各种功能,GitHub与其他工具或服务的协作 ...
- Redis设计与实现读书笔记——简单动态字符串
前言 项目里用到了redis数据结构,不想只是简单的调用api,这里对我的读书笔记做一下记录.原文地址: http://www.redisbook.com/en/latest/internal-dat ...
- redis入门笔记
redis入门笔记 参考redis实战手册 1. Redis在windows下安装 下载地址:https://github.com/MSOpenTech/redis/tags 安装Redis 1.1. ...
随机推荐
- Part 36 to 39 Talking about Delegates in c#
Part 36 Delegates in c# Part 37 Delegates usage in c# class Progim { public static void Main() { Lis ...
- Android webkit 事件传递流程详解
前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...
- ionic项目相关的操作命令
更新npmD:\Program Files\npm-3.9.0\npmnode cli.js install npm -gf vs安装 更新node.js windows版直接从官网下载安装包 n ...
- 去掉影响效率的where 1=1
最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...
- 探索VS中C++多态实现原理
引言 最近把<深度探索c++对象模型>读了几遍,收获甚大.明白了很多以前知其然却不知其所以然的姿势.比如构造函数与拷贝构造函数什么时候被编译器合成,虚函数.实例函数.类函数的区别等等.在此 ...
- C++使用类型代替枚举量
自己写的C++类型枚举量,可以使用类型识别取代模板,绑定枚举量和多组调用函数,在调用阶段只要指定某组函数就可以根据枚举量调用相应函数. 代码如下: #ifndef __MYENUM_H__ #defi ...
- 安装Java EE失败,解决方案
笔者安装Java EE(版本是java_ee_sdk-7-jdk7-windows-x64-ml.exe)时,遇到错误提示提示"Could not find the required ver ...
- WP开发笔记——去除 HTML 标签
获取到一段HTML类型的信息,显示在WP的webbrowser控件中,如果不加处理的话,会显示出各种神烦的HTML标签. 这时,需要我们将这HTML类型的信息进行处理去除HTML标签后再显示出来,这里 ...
- android的入门学习
android 入门学习. 活动:就是一个包含应用程序的用户界面的窗口.目的就是与用户交互. 意图:就是能够将来自不同应用程序的不同活动无缝连接在一起工作的"胶水",确保这些任务执 ...
- js----深入理解闭包
闭包算是js里面比较不容易理解的点,尤其是对于没有编程基础的人来说. 其实闭包要注意的就那么几条,如果你都明白了那么征服它并不是什么难事儿.下面就让我们来谈一谈闭包的一些基本原理. 闭包的概念 一个闭 ...