《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 安装并启动 ...
随机推荐
- Mac下不显示设备
使用命令行adb devices 试了下,没设备列表. 第一步: 查看usb设备信息 在 终端输入:system_profiler SPUSBDataType 可以查看连接的usb设备的信息 ...
- requestNextAnimationFrame兼容主浏览器方法
window.requestNextAnimationFrame = (function () { var originalRequestAnimationFrame = undefined, wra ...
- sqlmap tamter
支持的数据库 编号 脚本名称 作用 实现方式 all 1 apostrophemask.py 用utf8代替引号 ("1 AND '1'='1") '1 AND %EF%BC%87 ...
- 【emWin】例程二十六:窗口对象——Listbox
简介: 列表框用于选择列表的一个元素.创建的列表框可以没有环绕的框架窗口,或者作为 FRAMEWIN 小工具的子窗口建立列表框中的项目被选定后,会突出显示. 触摸校准(上电可选择是否进入校准界面) 示 ...
- 怎么关闭win10和win8快速启动
电源选项-- 选择电源按钮的功能--- 更改当前不可用的设置-- 快速启动勾去掉
- 删除最少字符生成Palindrome
看到一个哥们G家电面试题,求删除最少字符生成Palindrome.大神们都在讨论dp,我完全想不到. 放一个没优化的DFS. 乐神说是O(n3)复杂度, 有机会的话要减少使用substring,并且要 ...
- 聊聊Python中的生成器和迭代器
Python中有两个重要的概念,生成器和迭代器,这里详细记录一下. 1. 生成器 什么是生成器呢? 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...
- TCP/IP模型及OSI七层参考模型各层的功能和主要协议
注:网络体系结构是分层的体系结构,学术派标准OSI参考模型有七层,而工业标准TCP/IP模型有四层.后者成为了事实上的标准,在介绍时通常分为5层来叙述但应注意TCP/IP模型实际上只有四层. 1.TC ...
- (原)使用TortoiseGit提交代码push的时候报错:HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
今天我想rk的sdk包里面的一些东西提交到我的git服务器上,结果,总是报错,折腾了一下午,结果才解决. 首先看看我提交代码的时候,报错的信息: git.exe push --progress &qu ...
- js中的XMLHTTPRequest
window.onload = function(){ //var url = "http://localhost:8000/sales.json"; var url = &quo ...