今天第一次开通,写的不好,请谅解
 
redis并不是简单的key-value存储,实际上它是一个数据结构服务器,支持不同类型的值,也就是说,我们不仅仅把字符串当作键所指向的值,
 
如下这些数据类型都可以作为值类型:
 
1 二进制安全的字符串:string;
 
2 二进制安全的字符串列表:list of string;
 
3 二进制安全的字符串集合:set of string,换言之:它是一组无重复未排序的element; 可以把它看成Ruby中的hash-其key等于element,value都等于'true'。
 
4 有序集合:sorted set of string,类似于集合set,但其中每个元素都和一个浮点数score(评分)关联。element根据score排序,可以把它看成Ruby中的hash-其key等于element,value等于score,但元素总是按score的顺序排序,无需额外的排序操作
 

 
Redis 键
 
Redis key值是二进制安全的,这意味着可以可以用任何二进制序列作为key值,从形如"foo"的简单字符串到一个JPEG文件的内容都可以。
空字符串也是有效key值。
 
key的规则:
 
1 太长的键值不是好主意,例如1024字节的键值就不是好主意,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高;
 
2 太短的键值通常也不是好主意,如果你要用"u:1000:pwd"来代替"user:1000:password",这没有什么问题,但后者更易阅读,并由此增加的空间消耗相对于key object和value object本身来说很小,也没有人去阻止您一定要用更短的键值节省一丁点空间;
 
3 最好坚持一种模式。如:"object-type:id:field"就是个不错的注意,像这样"user:1000:password"。在多单词的字段名中加上一个点,就像:"comment:1234:reply.to"
 

字符串是Redis的基本值类型
字符串类型:Redis就像一个可以持久化的memcached服务器(注:memcache的数据仅保存在内存中,服务器重启后,数据将丢失)。
 
通常用SET command 和 GET command来设置和获取字符串值。值可以是任何种类的字符串(包括二进制数据),例如你可以在一个键下保存一副jpeg图片。值的长度不能超过1GB。
 
原子递增:
$ redis-cli set counter 100
OK $ redis-cli incr counter
(integer) 101
$ redis-cli incr counter
(integer) 102
$ redis-cli incrby counter 10
(integer) 112
 
INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,类似的命令有INCRBY, DECR and DECRBY。实际上他们在内部就是同一个命令,只是看上去有点儿不同。
 
GETSET命令:为key设置新值并且返回原值,如果我们的系统中有新的用户访问时就用INCR命令操作一个Redis key,但如果我们希望每小时对这个信息收集一次,那么我们就可以用GETSET这个key并给其赋值0并读取原值
 

 
列表类型:一般来讲,列表就是有序元素的序列:10,20,1,2,3就是一个列表,但用数组实现的List和用Linked List实现的List,在属性方面大不相同。
 
Redis Lists用linked list实现的原因是:对于数据库系统来说,至关重要的特性是:能非常快的在很大的列表上添加元素。另一个重要因素是,正如你将要看到的:Redis lists能在常数时间取得常数长度。
 

 
Redis的七种特性:
 
一 Strings数据结构
 
简单的key-value类型,value其实不仅是String,也可以是数字。
 
使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更高。
 
还可以享受Redis的定时持久化,操作日志及 Replication等功能。
 
除了提供与 Memcached 一样的get、set、incr、decr 等操作外,
Redis还提供了下面一些操作:
 
获取字符串长度
 
往字符串append内容
设置和获取字符串的某一段内容
 
设置及获取字符串的某一位(bit)
批量设置一系列字符串的内容
 
二 Hashs
 
在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。
 
这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。
 
而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。
 
三 Lists
 
Lists 就是链表,相信略有数据结构知识的人都应该能理解其结构。
 
使用Lists结构,我们可以轻松地实现最新消息排行等功能。
 
Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。
 
Redis还提供了操作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。
 
四 Sets
 
Sets 就是一个集合,集合的概念就是一堆不重复值的组合。
 
利用Redis提供的Sets数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。
 
Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
 
五 Sorted Sets
 
和Sets相比,Sorted
Sets增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的Sorted
Sets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。
 
另外还可以用Sorted
Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。
 
六 Pub/Sub
 
Pub/Sub
从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。
 
这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
 
七 Transactions
 
谁说NoSQL都不支持事务,虽然Redis的Transactions提供的并不是严格的ACID的事务(比如一串用EXEC提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),
 
但是这个Transactions还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。
 
Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,
 
在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行。

reids数据类型的更多相关文章

  1. Python 分布式缓存之Reids数据类型操作

    目录 1.Redis API 2.String 操作 3.Hash 操作 4.List 操作 1.Redis API 1.操作模式 redis-py提供两个类Redis和StrictRedis用于实现 ...

  2. 什么是redis?Reids的特点是什么?Redis支持的数据类型有哪些?

    首先,分布式缓存框架 可以 看成是nosql的一种 (1)什么是redis? redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的 ...

  3. 一文回顾Reids五大对象(数据类型)

    Redis 是一个高性能的分布式内存型数据库,在国内外各大互联网公司中都有着广泛的使用,即使是一些非互联网公司中也有着非常重要的适用场景,所以对 Redis 的掌握也成为后端工程师必备的基础技能,在面 ...

  4. 使用reids结合wcf实现集群模式下的聊天室功能

    1.reids的特点 Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型(字符串,哈希,列表,集合,有序集合),. Redis可以将数据复 ...

  5. 在centos6.5中安装reids

    一.简介 Redis是一个key-value存储系统,是一个内存数据库,Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作 ...

  6. Redis 的几种数据结构&五种数据类型对象

    先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...

  7. reids配置参数详解

    转自:http://www.jb51.net/article/60627.htm reids配置参数详解 #daemonize no  默认情况下, redis 不是在后台运行的,如果需要在后台运行, ...

  8. Redis各种数据类型的应用场景

    redis是一种key values形式的非关系型数据库,通过内存存储,也可以把数据持久化到本地文件中. redis支持丰富的数据类型,String,list,set,zset,hash,下面说一下各 ...

  9. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

随机推荐

  1. 卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...

  2. 数据存储与访问之——初见SQLite数据库

          本节引言: 本节学习Android数据库存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库手机软件,Android系统已经集成了这 ...

  3. li点击弹出序号

    <body> <ul> <li>test1</li> <li>test2</li> <li>test3</li ...

  4. 【Rsync项目实战】备份全网服务器数据

    [Rsync项目实战]备份全网服务器数据 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转 ...

  5. JS判断是否为数字或为空

    function checkcc() {     var reg = new RegExp("^[0-9]*$");     var obj = document.getEleme ...

  6. 详解Swing中JTree组件的功能

    JTree组件是另外一个复杂组件,它不像 JTable 那样难用,但是也不像 JList 那么容易.使用 JTree 时麻烦的部分是它要求的数据模型. JTree组件的功能来自树的概念,树有分支和叶子 ...

  7. 【Spring】使用Spring和AMQP发送接收消息(上)

    讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽 ...

  8. Source Map入门教程

    部署前端之前,开发者通常会对代码进行打包压缩,这样可以减少代码大小,从而有效提高访问速度.然而,压缩代码的报错信息是很难Debug的,因为它的行号和列号已经失真.这时就需要Source Map来还原真 ...

  9. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  10. 使用htmlparse爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...