【原】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数据库. 补充概念: 持久化:是将程序数据在持久状态和瞬时状态间转换的机制.通俗的 ...
随机推荐
- Visual Assist安装、破解方法
1.从各种渠道下载Visual Assist安装程序及破解补丁. 2.在路径(Win7):C:\Users\UserName\AppData\Local\Microsoft\VisualStudio\ ...
- NOSQL之【Redis学习:配置说明】
# yes:后台运行:no:不是后台运行(老版本默认) daemonize yes # redis的进程文件 pidfile /var/run/redis.pid # 端口 port # bind_a ...
- 51nod贪心算法入门-----活动安排问题2
题目大意就是给几个活动,问要几个教室能够弄完. 这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数. #inclu ...
- Sublime Text 3 代码格式化插件推荐 CodeFormatter
CodeFormatter CodeFormatter has support for the following languages: * PHP - By PHP_Beautifier* Java ...
- JQuery 事件器的介绍
基本用法 $(元素). 事件( 事件属性); 常见事件 示例 说明 $(selector).click() 被选元素的点击事件 $(selector).dblclick() 被选元素的双击事件 $ ...
- Python中使用ElementTree解析xml
在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...
- 今年的IT大趋势是虚拟现实
从今年下半年开始,陆陆续续出现了一些基于虚拟现实技术的创业公司,先是从IT新闻中的一篇创业故事中了解到这个方向,后来再是身边一个以前的朋友也发布了类似的产品. 从他们的产品来看,基本都是围绕教育行业开 ...
- 软键盘android:windowSoftInputMode属性详解
android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性.这个属性能影响两件事情:[一]当有焦 ...
- [转]利用/*+Ordered*/提高查询性能
[转]利用/*+Ordered*/提高查询性能 2009-02-06 10:46:27| 分类: Oracle | 标签: |字号大中小 订阅 消耗在准备利用Oracle执行计划机制提高查询性能 ...
- 渲染统计窗口(Rendering Statistics Window)
FPS(Timer per frame and FPS) frames per seconds表示引擎处理和渲染一个游戏帧所花费的时间,该数字主要受到场景中渲染物体数量和GPU性能的影响,FPS数值越 ...