今天第一次开通,写的不好,请谅解
 
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. Centos7 安装 zabbix3.2

    简介: Zabbix的一个很优秀的分布式监控服务器, 它有两部分组成: 1. “zabbix-server”用来收集并且在web端展示数据 2. “zabbix-agent”用来采集数据,发送给ser ...

  2. 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

    2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...

  3. 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)

    使用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串时,发现中文乱码情况解决不了了,下面就给各位分享一下如何 ...

  4. (读书笔记)第2章 TCP-IP的工作方式

    第2章 TCP-IP的工作方式 TCP/IP协议系统 为了实现TCP的功能,TCP/IP的创建者使用了模块化的设计.TCP/IP协议系统被分为不同的组件,每个组件分别负责通信过程的一个步骤.这种模块化 ...

  5. win7下Apache2.4安装、配置及服务自启动

    为了测试微信平台接口,在电脑上安装的Apache服务器,把安装步骤记下来以后备用 第一篇文章,不好请见谅 Apache2.4.17下载地址:http://www.apachelounge.com/do ...

  6. protected private public 的区别

    1.public,protected,private是Java里用来定义成员的访问权限的,另外还有一种是"default",也就是在成员前不加任何权限修饰符.如:    publi ...

  7. Intellij Idea自动加载改动文件和自动自动热部署加载

    1:准备原料 我的Intellij Idea的版本是15. 之后tomcat自动加载修,你只需要在浏览器刷新一下页面即可. ************************************** ...

  8. 解读Laravel,看PHP如何实现Facade?

    刚刚开始学Laravel就会接触到路由 Route::get('/', function () { return view('welcome'); }); 后来笔者一本正经的去读过Route类的代码, ...

  9. bing翻译API调用方法

    概述 前一段时间,遇到一个需求,需要对文章进行翻译,由于客户公司员工有国内的人员,也有国外的人员,为了照顾国外的同事,客户提出,当用户在手机端发布帖子,需要同时把帖子的内容翻译成英文,方便用户阅读.于 ...

  10. iOS开发之Xib和storyboard对比

    相同点: (2)都用来描述软件界面 (2)都用Interface Builder工具来编辑 不同点: (1)Xib是轻量级的,用来描述局部的UI界面 (2)Storyboard是重量级的,用来描述整个 ...