《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 安装并启动 ...
随机推荐
- django 拷贝一个 model 实例
今天做一个拷贝功能,把某个 obj 拷贝并修改部分数据,提交表单后保存为一个新实例.结果google 出来的结果不对,都是相互copy 的代码,大概如下: obj = MyModel.objects. ...
- volatile内存语义
全面理解Java内存模型(JMM)及volatile关键字 volatile的内存语义 Volatile读写所建立的happens-before关系Volatile读写的内存语义 锁: 获取和释放Vo ...
- Python实现无向图最短路径
一心想学习算法,很少去真正静下心来去研究,前几天趁着周末去了解了最短路径的资料,用python写了一个最短路径算法.算法是基于带权无向图去寻找两个点之间的最短路径,数据存储用邻接矩阵记录.首先画出一幅 ...
- ElasticSearch在linux上的安装部署全程记录
由于项目需求,需要在linux平台搭建一套ES服务.在搭建过程中,遇到各种各样的问题.后来都一一解决.现在要记录下来这个过程,以及其中遇到的问题,及其解决方法. 一.环境配置 操作系统:Cent OS ...
- 【BZOJ4637】期望 Kruskal+矩阵树定理
[BZOJ4637]期望 Description 在米国有一所大学,名叫万国歌剧与信息大学(UniversalOperaandInformaticasUniversity).简称UOI大学.UOI大学 ...
- iOS动画篇:核心动画
转:http://www.cocoachina.com/ios/20160517/16290.html 基本概念 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的 ...
- 修改testtools框架,将测试结果显示用例注释名字
在之前介绍的测试框架testtool中,发现测试结果中显示的都是测试用例的函数名,并没有将注释显示出来 这很不符合国人使用阿,没办法,自己动手来改改吧 首先,testtools是继承unittest的 ...
- zgrep用法
http://manpages.ubuntu.com/manpages/trusty/man1/zgrep.1.html NAME Zgrep - search compressed files fo ...
- Flask web开发之路十四
今天开始Flask的实战,创建一个项目,实现包括用户登录.注册.注销.发表博客.评论以及检索等功能 首先给出项目结构: 1.config.py文件: 存放各种配置信息 import os # dial ...
- mysql命令大全用户管理相关命令
1.登陆 mysql>mysql -uJDev -p 2.用户管理 mysql>use mysql; 3.查看有哪些登陆用户 mysql> select host,user, ...