[读书笔记]-技术学习-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的更多相关文章
- [读书笔记]C#学习笔记八:StringBuilder与String详解及参数传递问题剖析
前言 上次在公司开会时有同事分享windebug的知识, 拿的是string字符串Concat拼接 然后用while(true){}死循环的Demo来讲解.其中有提及string操作大量字符串效率低下 ...
- [读书笔记]C#学习笔记一: .Net Framwork
前言: 一次偶然的机会 在园子里看到@Learning hard 出版的一本书: <<C#学习笔记>>, 然后买来 一直到现在读完, 感觉很不错, 适合入门, 书中内容是从C ...
- [读书笔记]C#学习笔记三: C#类型详解..
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- 视觉机器学习读书笔记--------BP学习
反向传播算法(Back-Propagtion Algorithm)即BP学习属于监督式学习算法,是非常重要的一种人工神经网络学习方法,常被用来训练前馈型多层感知器神经网络. 一.BP学习原理 1.前馈 ...
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
前言: C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针 ...
- Java7编程高手进阶读书笔记--final学习
这段时间终于有了一些自己的时间,在网上淘了一本书把java学习下,顺便记下每日的学习心得 工作快两年多了,才知道基础的东西永远看的时候都有一个新的体验,今天中午看了下final,把自己炒的代码贴在这以 ...
- [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性
前言 下面就开始总结C#4.0的一些变化了, 也是这本书中最后的一点内容了, 这一部分终于要更新完了. 同时感觉再来读第二遍也有不一样的收获. 今天很嗨的是武汉下雪了,明天周六,一切都是这么美好.哈哈 ...
- [读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析
前言 最早使用到Lambda表达式是因为一个需求:如果一个数组是:int[] s = new int[]{1,3,5,9,14,16,22};例如只想要这个数组中小于15的元素然后重新组装成一个数组或 ...
随机推荐
- 『REM』手机屏幕适配
function adapt(designWidth, rem2px){ var d = window.document.createElement('div'); d.style.width = ' ...
- Linux学习总结(3)——Linux实用工具
1. Windows下同步Linux文件(Linux安装Samba和配置) 场景需求: 安装了Ubuntu在虚拟机上,但是代码编辑或者其它更多的操作的时候,还是习惯在windows下进行.如果wind ...
- 手动扩栈#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma comment(linker, "/STACK:1024000000,1024000000")
- [React Testing] Confidently Ship Production React Apps
We want to make sure that when we ship new code, our users can use the application. The best way we' ...
- 发现百度开源一个好东西,Echarts统计报表前段框架
1,如今数据越来越重要了 可是数据报表的可视化展示一直是个问题. 如今好了.有Echarts能够解决一部分数据展示的问题. http://echarts.baidu.com/index.html 类似 ...
- zoj2676 Network Wars(0-1分数规划,最大流模板)
Network Wars 07年胡伯涛的论文上的题:http://wenku.baidu.com/view/87ecda38376baf1ffc4fad25.html 代码: #include < ...
- 使用excel进行数据挖掘(4)---- 突出显示异常值
使用excel进行数据挖掘(4)---- 突出显示异常值 在配置环境后.能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/a ...
- B1391 [Ceoi2008]order 最大权闭合图 最小割
啊啊啊,假的题吧!!!我用的当前弧优化T了6个点,其他人不用优化AC!!!震惊!!!当前弧优化是假的吧!!! 到现在我也没调出来...大家帮我看看为啥70.... 来讲一下这个题的思路,就是设一个源点 ...
- JAVA8与lambda表达式
一.lambda表达式的来源 Lambda 表达式(拉姆达表达式)来源于lambda演算是Alonzo Church给出的一套图灵机等价的形式计算系统.lambda演算系统以函数和变量为基础,也可以进 ...
- Wireshark抓取RTP包,还原语音
最近在做基于SIP的VoIP通信研究,使用Wireshark软件可以对网络流量进行抓包. VoIP使用RTP协议对语音数据进行传输,语音载荷都封装在RTP包里面.要对传输中的语音进行截获和还原,需要通 ...