1.字符串(string)

1.1设置值
set key value [ex seconds] [px milliseconds] [nx|xx]

例如:

127.0.0.1:6379> set hello world
OK
1.2获取值
127.0.0.1:6379> get hello
"world"

字符串类型的内部编码有3种:

  • int:8个字节的长整型。
  • embstr:小于等于39个字节的字符串。
  • raw:大于39个字节的字符串。

    Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

2.哈希(hash)



hash由多个field构成,适合存储拥有多个属性的对象。

2.1 设置值
hset key field value

例如添加一个名字为tom的用户,user为key,name为field

127.0.0.1:6379> hset user name tom
(integer) 1

再为这个hash添加一个名为age的field

127.0.0.1:6379> hset user age 13
(integer) 1
2.2 获取值
hget key field

例如获取用户的名字

127.0.0.1:6379> hget user name
"tom"

获取用户的年龄

127.0.0.1:6379> hget user age
13

3.list



list是一个类似数组的有序线性结构,允许存储重复元素。

3.1添加操作
  • 从右边添加元素

    rpush key value [value ...]

    从右边向左插入三个元素a、b、c示例:
127.0.0. 1:6379> rpush listkey c b a
(integer) 3

此时名为listkey的list存储的元素如下:

127.0.0.1:6379> lrange listkey 0 -1
1) "c"
2) "b"
3) "a"
  • 从左边添加元素

    lpush key value [value ...]

    从左向右添加元素示例:
127.0.0. 1:6379> lpush listkey c b a
(integer) 3
3.2查找元素
  • 获取指定索引下标元素
lindex key index
  • 获取列表长度
127.0.0.1:6379> llen listkey
(integer) 4
3.3删除元素
  • 将列表最左侧的一个元素弹出
lpop listkey
  • 将列表最右侧的一个元素弹出
rpop listkey

其余操作可参考这张命令表:

4.集合(set)

set可以用来保存多个字符串元素,无序,不允许重复。

4.1添加元素

sadd key element [element ...]

127.0.0.1:6379> sadd myset a b c
(integer) 3 127.0.0.1:6379> sadd myset a b
(integer) 0
4.2 删除元素

srem key element [element ...]

返回删除元素个数

127.0.0.1:6379> srem myset a b
(integer) 2
127.0.0.1:6379> srem myset hello
(integer) 0
4.3 计算元素个数

scard的时间复杂度为O(1),它不会遍历集合所有元素,而是直接用

Redis内部的变量,例如:

127.0.0.1:6379> scard myset
(integer) 1
4.4 判断元素是否在集合中

sismember key element

如果给定元素element在集合内返回1,反之返回0,例如:

127.0.0.1:6379> sismember myset c
(integer) 1
4.5 从集合随机弹出元素

spop key

spop操作可以从集合中随机弹出一个元素,例如下面代码是一次spop

后,集合元素变为"d b a":

127.0.0.1:6379> spop myset
"c"
127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "a"

srandmember和spop都是随机从集合选出元素,两者不同的是spop命令

执行后,元素会从集合中删除,而srandmember不会。

4.6 获取所有元素

smembers key

127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "a"

smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻

塞Redis的可能性,建议使用sscan来完成。

5.有序集合(zset)

有序集合在set上增加了排序的特性,依然不允许重复元素。

有序集合排序靠的不是索引下标,而是每个元素的分数(score)。zset十分适合用来做排行榜。

5.1添加元素
127.0.0.1:6379> zadd user:ranking 251 tom
(integer) 1
5.2 计算成员个数
127.0.0.1:6379> zcard user:ranking
(integer) 5
5.3 计算成员排名

zrank是从分数从低到高返回排名,zrevrank反之。例如下面操作中,tom

在zrank和zrevrank分别排名第5和第0(排名从0开始计算)。

127.0.0.1:6379> zrank user:ranking tom
(integer) 5
127.0.0.1:6379> zrevrank user:ranking tom
(integer) 0
5.3 删除成员
127.0.0.1:6379> zrem user:ranking mike
(integer) 1
5.4 返回指定分数范围的成员

zrangebyscore key min max [withscores] [limit offset count]

zrevrangebyscore key max min [withscores] [limit offset count]

其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。例如

下面操作从低到高返回200到221分的成员,withscores选项会同时返回每个

成员的分数。[limit offset count]选项可以限制输出的起始位置和个数:

127.0.0.1:6379> zrangebyscore user:ranking 200 tinf withscores
1) "frank"
2) "200"
3) "tim"
4) "220"
127.0.0.1:6379> zrevrangebyscore user:ranking 221 200 withscores
1) "tim"
2) "220"
3) "frank"
4) "200"

redis的5种数据结构和基本操作的更多相关文章

  1. Redis 中 5 种数据结构的使用场景介绍

    这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...

  2. Redis入门到高可用(四)—— Redis的五种数据结构的内部编码

    Redis的五种数据结构的内部编码

  3. 详细介绍Redis的几种数据结构以及使用注意事项(转)

    原文:详细介绍Redis的几种数据结构以及使用注意事项 1. Overview 1.1 资料 <The Little Redis Book>,最好的入门小册子,可以先于一切文档之前看,免费 ...

  4. Redis系列(二):Redis的5种数据结构及其常用命令

    上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来 ...

  5. Redis中5种数据结构的使用场景介绍

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...

  6. redis中5种数据结构的使用

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  7. redis的5种数据结构的简介

    5种数据结构 1.字符串 Redis 字符串是一个字节序列.在 Redis 中字符串是二进制安全的,这意味着它们没有任何特殊终端字符来确定长度,所以可以存储任何长度为 512 兆的字符串. 示例 12 ...

  8. Redis 的几种数据结构&五种数据类型对象

    先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...

  9. Redis中5种数据结构的使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

随机推荐

  1. linux常用命令---打包压缩解压

    打包压缩解压

  2. 安装的SQL Server2008 R2版的连接不到本地数据,提示未找到或无法访问服务器。----复制自百度知道

    安装的SQL Server2008 R2版的连接不到本地数据,提示未找到或无法访问服务器.使用Windows身份验证 2012-09-17 00:23hj168926 | 分类:数据库DB | 浏览3 ...

  3. Class basic syntax

    Class basic syntax Wikipedia In object-oriented programming, a class is an extensible program-code-t ...

  4. Pyqt5_QLabel

    QLabel 作用 方法 信号 作用 占位符.显示文本.显示图片.放置gif动画.超链接.提示标记 方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 ...

  5. shiro的使用详解~

    在家无聊复习一下shiro 打开了之前的项目,由于lombok插件安装不了,不知道idea抽什么风所以get,set方法报错了,将就一下 只看shiro的使用,配置在shiro分类中有 登录方法 pa ...

  6. [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)

    引言 本系列适合0基础的人员,因为我们就是从0开始的,此系列记录我们步入微信营销企划并进行开发的一些经验分享,望与君共勉!作为刚刚踏入微信队伍中的新人的我们,如果有什么不对的地方,还望不吝赐教. 在开 ...

  7. 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

    一:背景 1. 讲故事 曾今在项目中发现有同事自定义结构体的时候,居然没有重写Equals方法,比如下面这段代码: static void Main(string[] args) { var list ...

  8. Parsing techniques: a practical guide下载

    轮子哥隆重推荐的书,一行代码.一句公式都没有,但是却什么都讲明白了的:<Parsing Techniques>.第一版官网免费下载,第二版多出来的东西你们用不上不用看了.全书只讲parsi ...

  9. 核心记账业务可用jdk7的PriorityBlockingQueue优先阻塞队列结合乐观锁实现

    -- 1.优先级阻塞队列 当前核心记账业务是悲观锁实现,但考虑到高并发和死锁的问题,可以用PriorityBlockingQueue优先阻塞队列结合乐观锁实现,对于并发时出现锁无法update时可以重 ...

  10. Java实现 LeetCode 793 阶乘函数后K个零 (分析)

    793. 阶乘函数后K个零 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * - * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 ...