【读书笔记】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. ...
随机推荐
- JSP之邮箱检验
首先创建Email类继承Serializable接口以启用其序列化功能,而序列化又是为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.序列化接口没有方法或字段,仅用于标识可序列化的语义. ...
- js中关于原型的几个方法
一.isPrototypeOf()方法,判断一个对象是否是另一个对象的原型 function Student(name,age){ this.name=name; this.age=age; } va ...
- List.Select按字符串选择属性
不知道大家有没有遇到这样的情况:List使用Lambda表达式的时候,想要选择项的某个属性列. 例如,选择编号ID: var idList=list.Select(o=>o.ID).ToList ...
- webSphere集群部署主要步骤
1.系统管理-节点,添加本机节点和另外一台机器的节点2.建立集群服务cluster,添加成员节点3.将应用部署到集群服务cluster4.将数据库源分别建立到节点作用域5.后续步骤参照安装手册 注意事 ...
- /mnt /media /dev 目录区别
/mnt 是被系统管理员使用,手动挂载一些临时媒体设备的目录. /medai 是自动挂载的目录,比如我们的U盘插在ubuntu下回自动挂载,就会在/media下生成一个目录,这个目录就是U盘所在目录, ...
- (转) 线上环境部署MongoDB的官方建议
本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...
- (转)分布式缓存GemFire架构介绍
1什么是GemFire GemFire是一个位于应用集群和后端数据源之间的高性能.分布式的操作数据(operational data)管理基础架构.它提供了低延迟.高吞吐量的数据共享和事件分发.Gem ...
- android网络编程
android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ...
- 2015.1写留言板的时用的 知识点和函数 --->总结
一:时间函数和uniqid() 1:uniqid():生成唯一的id, 无参数返回的字符串的长度为13,有参数为23 2:时间和时间戳相互转换的php函数 ①:time() 返回当前unix的时间戳 ...
- linux lsof命令的使用
lsof(list open files)是一个列出当前系统打开文件的工具.在UNIX环境下,任何事物都是以文件的形式存在的,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件. 像传输协议(T ...