最近在学习Redis,写几篇文章记录一下学习过程:Redis入门教程。

1.Redis基本概念

2.Redis环境搭建

  • 单机

  • 集群

3.实战-Java如何使用Redis

4.Redis学习资料推荐

5.Redis高级篇


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入门教程的更多相关文章

  1. Redis入门教程(二)

    推荐阅读: Redis入门教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的数据结构 5.1 Redis 数据结构介绍 redi ...

  2. 超强、超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  3. 超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下   [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...

  4. Redis入门教程:特性及数据类型的操作

    虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍.是一个很不错的Redis入门 ...

  5. Redis入门教程(三)— Java中操作Redis

    在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...

  6. 超强、超详细Redis入门教程

    (1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Value类型的 ...

  7. redis入门教程

    21) Redis 简介Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库.2) 数据类型2.1. Redis 的 KeyRedi ...

  8. Redis入门教程(一)

    一.NoSQL概述 1.什么是NoSQL NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯 ...

  9. Redis入门教程(C#)

    Redis是什么? Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. 补充概念: 持久化:是将程序数据在持久状态和瞬时状态间转换的机制.通俗的 ...

随机推荐

  1. CDH安装Hadoop

    一.安装CDH-manager 1.关闭selinux 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled 重启机器即可   2 ...

  2. 八,WPF 命令

    WPF命令模型 ICommand接口 WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理,它包含了两个方法和一个事件: public in ...

  3. 【WPF】路由事件

    总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...

  4. protel DXP的类矢量图功能

    一.概述 在写论文的过程中,我们经常需要将protel DXP上的原理图贴入到WORD中.我们可以选择使用截图工具,然后再导入到WORD中.但是由于普通截图图形文件都是位图文件,当我们将图形文件导入W ...

  5. Lucene基础(四)-- 结合数据库使用

    需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. luc ...

  6. linux环境下验证码不显示的几种情况

    linux环境下验证码不显示的几种情况 gd库扩展没有安装. 查看phpinfo(),看看有没有安装gd库 yum安装gd库或者phpize安装 安装完成后记得重启php-fpm bom头的原因 在生 ...

  7. pgrep 查询进程的工具

    pgrep 1:简介 pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行.在服务器的配置和管理中,这个工具常被应用,简单明了: 1:用法 #pgrep 参数选项 程序名 常用 ...

  8. codeforces 388B Fox and Minimal path

    这个题目的突破口就是固定最短长度,然后以二进制的形式分层: 最后把需要的曾连起来: #include<cstdio> #include<cstring> #define max ...

  9. 电脑是如何识别USB 3.0 U盘的

    USB 3.0电缆如图1所示. 图1 USB 3.0的接口比USB 2.0接口多了5根线,这5根线分别是Shield.SSRX+/-和SSTX+/-,即是屏蔽地.超速发送差分对和接受差分对. 因此一个 ...

  10. [置顶] *p++/*++p区别-linux

    #include <stdio.h> main() { char * s = "123456"; char * p; p = s; printf( "%c\n ...