今天第一次开通,写的不好,请谅解
 
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. css模拟Bootstrap响应式布局——栅格

    做作业的时候遇见用css模拟Bootstrap的栅格布局,学习了一下.发现这个很有用,用来在不同的平台上得到很好地用户体验,比如Phone.Pad.大屏幕显示器.小屏幕显示器.自己模拟用css写了一下 ...

  2. 【openstack N版】——云主机调整大小\冷迁移

    一.先决条件 云主机冷迁移,即:将一台云主机从一个计算节点上,迁移到另外一个计算节点上.因为环境原因,所以我们需要准备两个计算节点. 1.1准备环境 在控制节点上,安装一个计算节点 #在控制节点安装n ...

  3. 免费ERP之云实施

    近日,普实渠道在AIO5软件免费一周年之际,推出了重磅的动作:启动AIO5云实施,推广小微企业免费ERP落地应用. 这无疑是推动客户免费应用ERP的重大里程碑. 当前,在中国小微企业信息化方面,应用情 ...

  4. hadoop使用笔记

    一:hadoop程序添加三方包: 使用hadoop jar 运行时 抛出 java.lang.NoClassDefFoundError 原因:找不到三方包 解决方案: 1.可以将需要使用的包添加进 $ ...

  5. 2017-3-10 SQL server 数据库 T--SQL语句

    创建数据库:create datebase  数据库名     注:数据库名不能为中文,不能数字开头,不能符号开头. 删除数据库:drop datebase 数据库名 创建表:create   tab ...

  6. asp.net 后台任务作业框架收集

    收集几个可以用于 asp.net 的后台任务工具库并简单介绍. hangfire.io 支持 单次任务(Fire-and-forget),延时任务(Delayed),重复任务(Recurring ), ...

  7. 1754: [Usaco2005 qua]Bull Math

    1754: [Usaco2005 qua]Bull Math Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 398  Solved: 242[Submit ...

  8. 1491: [NOI2007]社交网络

    1491: [NOI2007]社交网络 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 881  Solved: 518[Submit][Status] ...

  9. 2015.07.12hadoop伪分布安装

    hadoop伪分布安装   Hadoop2的伪分布安装步骤[使用root用户用户登陆]other进去超级用户拥有最高的权限 1.1(桥接模式)设置静态IP ,,修改配置文件,虚拟机IP192.168. ...

  10. java学习笔记 --- 面向对象3

    一.创建对象是做了些什么事情? 图解: 二.static关键字 (1)静态的意思.可以修饰成员变量和成员方法. (2)静态的特点: 1.静态是随着类的加载就加载了.也是随着类的消失而消失了. 2.静态 ...