【原】Redis入门教程
最近在学习Redis,写几篇文章记录一下学习过程:Redis入门教程。
1.Redis基本概念
2.Redis环境搭建
单机
集群
3.实战-Java如何使用Redis
4.Redis学习资料推荐
5.Redis高级篇
内存优化
分区
事务
Redis-LRU缓存
1.Redis基本概念
Redis
- Redis是一种开源的基于内存存储的数据结构(c编写),常用作数据库、缓存、消息代理。
- 支持的数据类型包括Strings、Lists、Sets、Sorted sets、Hashes、Bit arrays、HyperLogLogs和基于半径查询的地理空间索引。
- Redis已集成replication、Lua scripting、LRU eviction、transactions和不同等级的磁盘持久化策略,并且通过Redis Sentinel和集群的自动分区保障了高可用性。
详细请看下面的文章:
Redis Keys
Redis的key是二进制安全的,所谓二进制安全是PHP语言中的一个术语,是指处理文本的字节流,不会考虑文本中的特殊符号等,所以,key可以是一个字符串,也可以是一张JPG图片,也可以是一个空字符串。
关于Redis的key的一些规范
- key的长度不要太长。key允许的最大长度是512MB。原因有二:1)浪费空间2)key之间进行比较开销较大。
- key的长度不要太短。适当增加key的长度使得提高可读性。
- key使用统一的规范。例如“object-type:id”。
Redis 基本数据类型
数据类型大小不能超过512MB
Strings
String是Redis中最简单的值类型,可以用来缓存HTML片段或页面等信息。
基本操作如下:
添加、查询
SET 给单个key赋值
> set mykey somevalue
OK
> set mykey newval nx
(nil)
> set mykey newval xx
OK
GET 根据单个key获取value
> get mykey
"somevalue"
INCR/INCRBY/DECR/DECRBY 增减操作,都是先将String转换成Integer类型然后进行增减操作
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
MSET 给多个key赋值
> mset a 10 b 20 c 30
OK
MGET 根据多个key得到对应value,用空格分开key即可
> mget a b c
1) "10"
2) "20"
3) "30"
删除、修改
EXISTS、DELETE
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
判断类型
> set mykey x
OK
> type mykey
string
> del mykey
(integer) 1
> type mykey
none
指定生存周期
> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)
Lists
Redis中的Lists是链表实现的,所以适合添加和删除,不适合随机访问。
添加、查询
RPUSH、LPUSH、LRANGE(L表左、R表右)
添加查询单个值 larnge index1,index2 表示开始索引、结束索引,可以为负值
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
添加查询多个值
> rpush mylist 1 2 3 4 5 "foo bar"
(integer) 9
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "1"
5) "2"
6) "3"
7) "4"
8) "5"
9) "foo bar"
删除 pop功能 当list中元素都出队后,list就删除了或用del 命令
> rpush mylist a b c
(integer) 3
> rpop mylist
"c"
> rpop mylist
"b"
> rpop mylist
"a"
LTRIM 类似于LRANGE,但不同的是不在该范围内的元素会被删除
> rpush mylist 1 2 3 4 5
(integer) 5
> ltrim mylist 0 2
OK
> lrange mylist 0 -1
1) "1"
2) "2"
3) "3"
BRPOP和BLPOP是RPOP和LRPOP阻塞的版本
> brpop tasks 5
1) "tasks"
2) "do_something"
Sets
添加元素
> sadd myset 1 2 3
(integer) 3
> smembers myset
1. 3
2. 1
3. 2
sismember是否存在元素
> sismember myset 3
(integer) 1
> sismember myset 30
(integer) 0
sets适合于表述对象间的关系,例如,用来实现标签tags.
添加
> sadd news:1000:tags 1 2 5 77
(integer) 4
> sadd tag:1:news 1000
(integer) 1
> sadd tag:2:news 1000
(integer) 1
> sadd tag:5:news 1000
(integer) 1
> sadd tag:77:news 1000
(integer) 1
遍历
smembers news:1000:tags
1. 5
2. 1
3. 77
4. 2
Sorted sets
添加元素
> zadd hackers 1940 "Alan Kay"
(integer) 1
> zadd hackers 1957 "Sophie Wilson"
(integer) 1
> zadd hackers 1953 "Richard Stallman"
(integer) 1
> zadd hackers 1949 "Anita Borg"
(integer) 1
> zadd hackers 1965 "Yukihiro Matsumoto"
(integer) 1
> zadd hackers 1914 "Hedy Lamarr"
(integer) 1
> zadd hackers 1916 "Claude Shannon"
(integer) 1
> zadd hackers 1969 "Linus Torvalds"
(integer) 1
> zadd hackers 1912 "Alan Turing"
(integer) 1
> zrange hackers 0 -1
1) "Alan Turing"
2) "Hedy Lamarr"
3) "Claude Shannon"
4) "Alan Kay"
5) "Anita Borg"
6) "Richard Stallman"
7) "Sophie Wilson"
8) "Yukihiro Matsumoto"
9) "Linus Torvalds"
逆序
> zrevrange hackers 0 -1
1) "Linus Torvalds"
2) "Yukihiro Matsumoto"
3) "Sophie Wilson"
4) "Richard Stallman"
5) "Anita Borg"
6) "Alan Kay"
7) "Claude Shannon"
8) "Hedy Lamarr"
9) "Alan Turing"
带具体值并返回
> zrange hackers 0 -1 withscores
1) "Alan Turing"
2) "1912"
3) "Hedy Lamarr"
4) "1914"
5) "Claude Shannon"
6) "1916"
7) "Alan Kay"
8) "1940"
9) "Anita Borg"
10) "1949"
11) "Richard Stallman"
12) "1953"
13) "Sophie Wilson"
14) "1957"
15) "Yukihiro Matsumoto"
16) "1965"
17) "Linus Torvalds"
18) "1969"
范围操作
> zrangebyscore hackers -inf 1950
1) "Alan Turing"
2) "Hedy Lamarr"
3) "Claude Shannon"
4) "Alan Kay"
5) "Anita Borg"
> zremrangebyscore hackers 1940 1960
(integer) 4
Hashes
> hmset user:1000 username antirez birthyear 1977 verified 1
OK
> hget user:1000 username
"antirez"
> hget user:1000 birthyear
"1977"
> hgetall user:1000
1) "username"
2) "antirez"
3) "birthyear"
4) "1977"
5) "verified"
6) "1"
> hmget user:1000 username birthyear no-such-field
1) "antirez"
2) "1977"
3) (nil)
> hincrby user:1000 birthyear 10
(integer) 1987
> hincrby user:1000 birthyear 10
(integer) 1997
Bit arrays
该类型最大好处是节省空间
setbit 第一个参数是第几位,第二个参数是对应的value
> setbit key 10 1
(integer) 1
> getbit key 10
(integer) 1
> getbit key 11
(integer) 0
> setbit key 0 1
(integer) 0
> setbit key 100 1
(integer) 0
> bitcount key
(integer) 2
HyperLogLogs
HyperLogLogs是一种基于概率的数据结构,用于统计元素的唯一性(专业来将,是评估set集合的势)。该数据结构的好处是用特定的算法能很快地统计set集合中的元素个数,不会重复计算,其功能和Set集合类似。
> pfadd hll a b c d
(integer) 1
> pfcount hll
(integer) 4
【原】Redis入门教程的更多相关文章
- Redis入门教程(二)
推荐阅读: Redis入门教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的数据结构 5.1 Redis 数据结构介绍 redi ...
- 超强、超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...
- 超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...
- Redis入门教程:特性及数据类型的操作
虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍.是一个很不错的Redis入门 ...
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- 超强、超详细Redis入门教程
(1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Value类型的 ...
- redis入门教程
21) Redis 简介Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库.2) 数据类型2.1. Redis 的 KeyRedi ...
- Redis入门教程(一)
一.NoSQL概述 1.什么是NoSQL NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯 ...
- Redis入门教程(C#)
Redis是什么? Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. 补充概念: 持久化:是将程序数据在持久状态和瞬时状态间转换的机制.通俗的 ...
随机推荐
- AngularJS(4)-服务(Service)
1.$location服务 $location 服务,它可以返回当前页面的 URL 地址 2.$http服务 $http 是 AngularJS 应用中最常用的服务. 服务向服务器发送请求,应用响应服 ...
- Unity3D--学习太空射击游戏制作(一)
近期买了本书在学习一些Unity3D的东西,在了解了Unity3D工具的基本面板后开始学习一个太空射击游戏的开发过程. 首先下载一个关于本游戏的资源文件,(百度云下载地址:http://pan.bai ...
- 手机的touch事件(基于jquery)
javascript代码: $.swipe=function(opt){ var o = $.extend({ mainSelector:"", swipeLe ...
- 免费使用的图表控件XML/SWF Charts 5.08
免费使用的图表控件XML/SWF Charts 5.08 http://www.pin5i.com/showtopic-26053.html 10个免费的在线统计图表工具 http://paranim ...
- OFBiz进阶之环境搭建(eclipse)
一. 环境准备 1. jdk1.6 下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- ...
- E8.Net工作流平台开发篇
E8.Net开发篇(一) E8.Net开发框架有哪些源程序模型? E8.Net开发框架为开发企业流程应用系统提供了最佳实践的开发架构.范例及源代码,包括待办事项的组织.流程启动模型.处理模型.母版 ...
- 【BZOJ1823】 [JSOI2010]满汉全席
Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...
- C++引用计数
简介 引用计数就是对一个对象记录其被引用的次数,其的引用计数可加可减,那什么时候加什么时候减呢?所以引用计数的重点在于在哪里加,在哪里减: 加: 减: 实现 // // Ref.hpp // Ref ...
- noj [1475] Bachelor (找1的个数)
http://ac.nbutoj.com/Problem/view.xhtml?id=1475 [1475] Bachelor 时间限制: 1000 ms 内存限制: 65535 K 问题描述 炎热的 ...
- 解决Win8.1 / Win Server 2012 r2 下安装 Visual Studio 时一直要求重新启动的问题(原创)
注:本文为作者原创文章,转载于引用请注明出处,谢谢. 今天在x64的英文版Windows Server 2012 r2上安装最新版的 Visual Studio 2015 Exterprise 时,提 ...