【读书笔记】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. ...
随机推荐
- sql server 中 syscolumns 各个字段的意义
列名 数据类型 描述 name sysname 列名或过程参数的名称. id int 该列所属的表对象 ID,或与该参数关联的存储过程 ID. xtype tinyint systypes 中的物理存 ...
- java模拟有验证码的Http登陆
所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alp ...
- Android 直接拨打电话界面
Android 拨号界面和直接拨打电话界面代码控制 //定义TAG为空 private static final String TAG = null; //定义Button的点击事件 tell.set ...
- C#去掉周六周日的算法
/// <summary> /// 用来获取工作日(不含周六周日) /// </summary> /// <param name="dtSub"> ...
- UI1_UISlider与UISegment
// // ViewController.m // UI1_UISlider与UISegment // // Created by zhangxueming on 15/7/7. // Copyrig ...
- Java Dao模式通过JDBC连接数据库的操作
Java程序访问数据库: 1.获取数据库厂商提供的驱动(jdbc接口的实现类) 如ojdbc14.jar——Oracle数据库驱动jar包 mysql-connector-java-5.1.8-bin ...
- 各个公司的来源/The etymology of company
1.List of Company Etymology 下面的维基百科词条是比较有名的一些公司的名称的来源 List of company name etymologies 2.Atmel : adv ...
- 前端自动化构建工具——gulp
gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...
- lower_bound和upper_bound
lower_bound:返回大于或等于val的第一个元素位置 upper_bound:返回大于val的第一个元素位置 两个函数用的都是二分查找
- 11g RAC R2 体系结构---Grid
基于agent的管理方式 从oracle 11.2开始出现了多用户的概念,oracle开始使用一组多线程的daemon来同时支持多个用户的使用.管理资源,这些daemon叫做Agent.这些Agent ...