一、内容简介

Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server。传统的key-value是指支持使用一个key字符串来索引value字符串的存储,而Redis中,value不仅仅支持字符串,还支 持更多的复杂结构,包括列表,集合,哈希表等。现在我们一一讲解:Redis keys是采用二进制安全,这就意味着你可以使用任何二进制序列作为重点,从像"foo"可以联系一个 JPEG 文件。空字符串也是一个有效的密钥。

二、准备

启动服务

service redis-server start

启动客户端

redis-cli

三、Redis Strings(redis字符串)

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能存储512M字节的内容

1️⃣创建和检索strings命令——set、get

  set key value   ***set命令将取代现有的任何已经存在的key***

  get key

2️⃣创建strings时加一步check——set nx、set xx

*如果key已存在,则无法创建

set key value nx

*如果key已存在,依然创建并取代现有已存在的key

set key value xx

3️⃣strings字符串类型可以做加法器——incr、incrby、decr、decrby

incr key使其value变成整数并运行value+1

incrby keyn 使其value变成整数并运行value+n

对应的减法器命令

decr,decrby

4️⃣批量创建  mset、mget

mset key1 value1 key2 value2 key3 value3

mget key1 key2 key3

四、Redis Lists (redis列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素导头部, 而 RPUSH插入一个新元素导尾部.当一个这两个操作在一个空的Key上被执行的时候一个新的列表被创建。相似的,如果一个列表操作清空一个列表那么对应的 key将被从key空间删除。这是非常方便的语义,因为他们被调用使用一个空列表完全就像他们被调用时使用一个不存在的键值(可以)做为参数。

1️⃣创建、查看、删除——lpush、rpush、lrange、del

*创建列表,并从列头插入(左边插入)

lpush key value1 value2 value3

*创建列表,并从列尾插入(右边插入)

rpush key value4 value5 value6

*查看列表内的字符串value

lrange key 0 -1   ***0即列首-正数第一个,-1即列尾-倒数第一个

列表内排列顺序为

  1)value3

  2)value2

  3)value1

  4)value4

  5)value5

  6)value6

*删除列表key

del key

2️⃣从列表key中取出并显示元素——lpop、rpop

*从列表key中取出并显示元素第一个元素

lpop key

*从列表key中取出并显示元素倒数第一个元素  rpop key

三、Redis Hashes(redis 哈希)

Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。 (例如:一个有名,姓,年龄等等属性的用户):一个带有一些字段的hash仅仅需要一块很小的空间存储,因此你可以存储数以百万计的对象在一个小的 Redis实例中。 哈希主要用来表现对象,他们有能力存储很多对象,因此你可以将哈希用于许多其他的任务。

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

1️⃣创建、检索redis hashes——hset、hmset、hget、hgetall、hdel

*创建哈希key并添加一对映射

hset key filed0 value0

*创建哈希hash2并添加多对映射

hmset key field1:value1 field2:value2 field3:value3

*查看key中的某个映射

hget key field1

*查看key中所有映射

  hgetall key

*追加一对映射

hset key filed4 value4

*追加多对映射

  hmset key field5:value5 field6:value6 field7:value7

*删除key中的一对或多对映射

hdel key field4 field5

2️⃣加法操作并显示——hincrby

hincrby key field2 n

四、Redis set(redis 无序集合)

Redis 集合(Set)是一个无序的字符串集合. 你可以以O(1)的时间复杂度 (无论集合中有多少元素时间复杂度都是常量)完成添加,删除,以及测试元素是否存在。 Redis 集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。 实际上说这些就是意味着在添加元素的时候无须检测元素是否存在。 一个Redis集合的非常有趣的事情是他支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

1️⃣创建、显示无序集合——sadd、smembers

*创建一个无序集合key

sadd key member1 member2 member3

*查看无序集合内成员

smember key

2️⃣判断member1元素是否是集合set1的成员

sismember key member1

是返回1,否返回0

五、Redis sorted set(redis 有序集合)

Redis有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的没有成员都关联了一个评分,这个评分被用来按照从最低分到 最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。 使用有序集合你可以以非常快的速度(O(log(N)))添加,删除和更新元素。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序 集合作为一个没有重复成员的智能列表。在有序集合中,你可以很快捷的访问一切你需要的东西:有序的元素,快速的存在性测试,快速访问集合的中间元素! 简而言之使用有序集合你可以做完成许多对性能有极端要求的任务,而那些任务使用其他类型的数据库真的是很难完成的。

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

1️⃣创建有序集合,并添加成员——zadd

ZADD key score1 member1 [score2 member2]

**score可以重复,有相同score的member会按照字母或数字排列

2️⃣查看有序集合成员——zrange、zrevrange

正序查看

zrange key

倒序查看

zrevrange key

*默认不显示score,如果需要显示,添加withscore参数

zrange key withscore

zrevrange key withscore

更详细的命令介绍,参考http://www.runoob.com/redis/redis-sorted-sets.html

最新文章

  1. vs2010中如何设置Visual Assist方便地使用现成的代码编辑器风格
  2. 随笔分类 - [C#6] 新增特性
  3. 用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限
  4. SharePoint 2013 创建搜索中心及搜索设置
  5. linux oracle10g安装
  6. Android 全屏显示-隐藏Navigation Bar
  7. Qt 学习之路 :进程间通信
  8. CDOJ UESTC 1220 The Battle of Guandu
  9. Xamarin.Forms+Prism(3)—— 简单提示UI的使用
  10. 修改wampsever默认密码
  11. django ajax练习
  12. 树链剖分( 洛谷P3384 )
  13. Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861B Which floor?【枚举,暴力】
  14. Python2中文处理纪要
  15. linux 大小写转化
  16. java socket / No buffer space available
  17. javascript刷新父页面的各种方法汇总
  18. 个人博客作业Week7(阅读文章,心得体会)
  19. spring+ehcache实战--性能优化之道
  20. ubuntu 12.04安装vmtools 问题解决

热门文章

  1. Eclipse中直接执行sql语句(图文说明)
  2. Objective-C NSObject与运行时系统
  3. bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草【背包】
  4. 乐字节Java8核心特性之方法引用
  5. springboot(二)整合mybatis,多数据源和事务管理
  6. random模块思维导图
  7. ASP.NET GridView 控件绑定 CheckBoxList
  8. Java常见面试问题: equals()与hashCode()的使用
  9. C语言常见问题总结
  10. git reset作用