最近在学习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数据库. 补充概念: 持久化:是将程序数据在持久状态和瞬时状态间转换的机制.通俗的 ...
随机推荐
-
mysql 数据库连接超时的问题 autoReconnect=true
最近在使用spring-jdbc数据库连接管理时,出现一个奇怪问题,当天部署运行没问题,第二天再试就报以下异常问题 org.springframework.dao.RecoverableDataAcc ...
-
iOS-修改Status Bar
一.在info.plist文件中添加一行不但要在 Status bar is initially hidden一行,选择为 YES. 二.在didFinishLaunchingWithOptions方 ...
-
translate居中
<!doctype html> <html> <head> <meta charset="UTF-8"> < ...
-
以前写过的ajax基础案例(王欢-huanhuan)
//load方法的使用 $('#loadBtn').click(function(){ //responseTxt 包含来自请求的结果数据 //statusTxt 包含请求的状态(" ...
-
浮点数比较问题(float x 与 &#39;零值&#39;比较)
今天在牛客网上看到一道面试题,看完之后着实吃了一惊,自己平常都没有在意,看似简单的问题,实则考验了语言的基本功. 据说这是腾讯的面试题: float x 与“零值”比较的if语句为? if (x == ...
-
Spring的文件上传
Spring在发现包括multipart的请求后,会使用MultipartResolver的实现bean处理文件上传操作,现有採用Servlet3的 org.springframework.web.m ...
-
Win10没有以太网图标如何找回?以太网适配器不见了怎么恢复?
Win10以太网适配器不见了怎么恢复?以太网其实就是Win7系统中常说的"本地连接"假若用户发现网络适配器中的以太网适配器图标不见了,可以在设备管理器中添加一些这类适配器,具体过程 ...
-
web scraper——安装【一】
准备工作 工欲善其事必先利其器,既然是要安装web scraper一些***的工具是必然不可缺少的,如果没有的话,先下载个蓝灯用用吧. 蓝灯最新版下载地址 下载安装完成后双击打开即可,这时候会弹出一个 ...
-
Python divmod方法
有95条数据 每十条存一页 all_item = 95 pager = 10 result = all_item.__divmod__(pager) print(result) (9{商},5{余数} ...
-
b&#39;driver ";overlay"; failed to remove root filesystem 的解决方法
1.docker-compose启的nexus仓库意外dead 公司的maven私服nexus是通过docker-compose启动的,不知道什么原因意外死掉了.再次启动的时候报错: [root@ ...