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. Notification API,为你的网页添加桌面通知推送

    Notification 是什么 MDN: Notifications API 的 Notification 接口用于配置和向用户显示桌面通知.这些通知的外观和特定功能因平台而异,但通常它们提供了一种 ...

  2. Django之ORM多表关系创建

    ORM模型多表逻辑创建: 以图书和作者关系模型为例: models.py from django.db import models ''' 一本书只能被一个出版社出版; 一个出版社可以出版多本书; 一 ...

  3. 【python爬虫】解决歌荒,下歌利器

    python下载图片,mp3,想必很多人都早已耳闻,今天给大家来点不一样的, 让你下载高逼格高品质,带进度条,实时显示下载速度 详见源码:https://www.kesci.com/home/proj ...

  4. Tortoise svn 基础知识

    1 不跟踪文件.文件夹 1.1  文件.文件夹已经被svn跟踪 将本地文件.文件夹删除(windows删除文件的删除,快捷键是shift+delete),然后执行svn  update 将服务器同步到 ...

  5. c# 优化代码的一些规则——字符串使用优化[四]

    前言 在我们的程序中,经常使用到字符串,字符串的写法非常多,但是有一个问题就是我们写的字符串是否合适呢? 正文 内插符 介绍一个东西叫做内插字符,如下: static void Main(string ...

  6. [Objective-C] 014_Objective-C 代码规范指南

    本文参考引用(http://www.csdn.net/article/2015-06-01/2824818-objective-c-style-guide/1) 拥有良好的编码规范,能使我们的代码保持 ...

  7. RabbitMQ学习笔记一

    前 言 -解决问题  一.RabbitMQ安装  1.安装erlang 环境 a.下载erlang 版本,注意这里需要和安装的rabbitMq版本相配对,rabbitMQ官方网站上可以查到:https ...

  8. 此flash player与您的地区不相容——更换新版本edge后出现的问题

    最新切换到了edge浏览器,使用flash时提示:"此flash player与您的地区不相容",而chrome是没有问题的.网上找到解决方案,发现一个可以有效解决的方式,如下: ...

  9. Rocket - diplomacy - LazyModuleImpLike

    https://mp.weixin.qq.com/s/gDbUto1qd7uWbpnxovr5pg   介绍LazyModuleImpLike类的实现.     1. wrapper   LazyMo ...

  10. 【Linux】yum库的配置

    链接–>CentOS7之yum仓库配置