《Redis 数据操作》
一:字符串类型(string)
- 应用场景
- 用于常规计数,常规的 key-value 存储。
- 常用操作
常用操作 设置一个值为(字符串类型) SET key value 设置一个值并设置过期时间 SETEX key time value 取出一个值为(字符串类型) GET key 递增数字 INCR key 获取字符串长度 STRLEN key
二:散列类型 (HASH)
- 应用场景
- 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- 存储部分变更的数据,如用户信息等。
- 对于将对象存储成字符串而言,hash会占用更少的内存,并且可以更方便的存取整个对象.
- 常用操作
设置一个值为(HASH类型) HSET key field value 取出一个值为(HASH类型) HGET key field 一次获取多个值 HMGET key field [field ...] 获取该HASH的全部字段和字段值 HGETALL key 判断字段是否存在 HEXISTS key field 当字段不存在时赋值 HSETNX key field value 删除字段 HDEL key field [filed ....] 只获取该字段名(全部) HKEYS key 只获取该字段值(全部) HVALS key
三:列表 (LIST)
- 应用场景
- 由于 列表(list) 内部是由双向链表实现的,所以从头和尾获取和插入/读取是非常快的。
- 不过也正是因为如此,通过索引获得元素的速度会很慢。
- 由于 LIST 的特性,更适合做日志存储,消息队列等功能。
- 常用操作
向列表左端增加元素(列表类型) LPUSH key value 向列表右端增加元素(列表类型) RPUSH key value 从左端取出一个元素(等于在这个list中删除了这个元素) LPOP key
从右端取出一个元素(等于在这个list中删除了这个元素) LPOP key 获得列表的总个数 LLEN number 获取列表片段 LRANGE key start stop 删除列表中的值 LREM key count value
- 当 count > 时候,从列表左边删除 count 个 值为 value 的元素。
- 当 count < 时候,从列表右边删除 count 个 值为 value 的元素。
- 当 count = 时候,删除列表中所有值为 value 的元素。 通过索引查找元素,就和数组一样 LINDEX key index 通过索引为元素赋值 LSET key index value
四:集合 (SET)
- 应用场景
- 对于集合(set)来说,是无序但是有唯一性的,列表(list)是有序但是不唯一的。
- 内部由 hash table 实现
- set 就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的set数据结构,可以存储一些集合性的数据。set中的元素是没有顺序的。
- 案例
- 在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。
- Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
- 常用操作
向集合添加一个或者多个元素 SADD key member [member ...] 在集合内删除一个或者多个元素 SERM key member [member ...] 获取集合内所有元素 SMEMBERS key 查看集合内是否有该元素 SISMEMBER key member 差级运算 SDIFF key [key ...] 例如 {,,} - {,,} = {} 交集运算 SINTER key [key ...] 例如 {,,} - {,,} = {,} 并集运算 SUNION key [key ...] 例如 {,,} - {,,} = {,,,} 获取集合中的个数 SCARD key
五:有序集合 (SORT SET)
- 有序集合和集合相比
- 有序集合(sorted set)增加了一个权重参数score。
- 有序集合和列表相比
- 二者都是有序的,都可以获得范围元素。
- 有序集合比列表更费内存。
- 有序集合是通过散列表和跳跃表实现的(这个目前不太懂)。
- 列表中不能随意调整某个元素的位置,但是有序集合可以。
- 应用场景
- 比如要对一个学生的成绩排序,那么key就可以是学号,socore就可以是分数,那么在一进入队列时候,就已经进行了天然的排序。
- 还可以用在有权重的队列上面,权重高的对列任务先执行。
- 基本操作
添加一个有序元素 ZAAD key score member
获得一个元素的分数 ZSCORE key score
获得排序之后的集合 ZRANGE key start stop
六:事务
- Redis 里面的事务也是和命令一样,都是最小的执行单位。但是和数据库事务不同的是,Redis的事务不会被其他命令插入。一个事务是肯定会完成的。
- 需要注意的是,在事务中
- 如果出现了语法错误(指令不存在/命令错误...),那么错误指令之后的命令都不会执行。之前会执行。
- 如果出现了错误的命令,比如使用散列的命令操作集合,Redis 也不会认为这是错误。会继续执行。
- 但是不管出现了如上哪两种,都是会导致数据的异常,而Redis没有回滚机制,错了就是错了。
- 为了避免错误,在使用时一定要注意使用的细节。
- 基本语法
MULTI 开始事务 EXEC 执行事务
七:过期时间
- 设置过期时间之后,在使用SET,会消除这个键的过期时间,变为永久键
- 基本语法
EXPIRE 键 时间(秒)
PERSIST 键 (清除过期时间,即变为永久的)
《Redis 数据操作》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Hack mind
试 卷 姓名________ 学号________ 首先我们来看这个,试卷的名字和编号填写,这个部分有“漏洞”吗?有 学生的姓名和编号都写在这儿,没有做任何保护措施,因此,你只要偷看了某人的试卷上的这 ...
- java框架篇---hibernate(多对多)映射关系
以学生和老师为例的来讲解多对多映射. 实体类: Student package cn.itcast.g_hbm_manyToMany; import java.util.HashSet; import ...
- rtrim() 函数 从字符串的末端开始删除空白字符!
例子 在本例中,我们将使用 rtrim() 函数从字符串右端删除字符: <?php $str = "Hello World!\n\n"; echo $str; echo rt ...
- 【iCore1S 双核心板_ARM】例程十一:RTC实时时钟实验——显示时间和日期
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ RTC_DateTypeDef sDate; RTC_TimeTypeDef sTime; u ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-4 底层驱动之ADC、DAC
源视频包下载地址:链接:http://pan.baidu.com/s/1cL37gM 密码:ys1l 银杏科技优酷视频发布区:http://i.youku.com/gingko8
- Python 的 Magic Methods 指南(转)
介绍 本指南是数月博客的总结.主题是魔术方法. 什么是魔术方法呢?它们是面向对象Python语言中的一切.它们是你可以自定义并添加“魔法”到类中的特殊方法.它们被双下划线环绕(比如__init__或_ ...
- 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...
- Java如何计数替换字符串中第一次出现的子字符串?
在Java编程中,如何拆分正则表达式和字符串? 以下示例演示如何使用Matcher类的replaceFirst()方法替换字符中指定的子字符串的首次出现. package com.yiibai; im ...
- IntellIJ IDEA 配置 Vue 支持
IDEA版本: IntelliJ IDEA 2017.2Build #IU-172.3317.76, built on July 15, 2017Licensed to Administrator J ...
- STL中的map、unordered_map、hash_map
转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于 ...