《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 安装并启动 ...
随机推荐
- 【Java】加载驱动方法
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2. DriverManager.register ...
- 推荐几个Windows工具软件: HDDB - Everything的替代品
主页: http://hddb.xp-zed.com/index.html 简单地说,HDDB 是NTFS磁盘的文件搜索工具,它最开始是模仿 Everything 的,但解决了 Everything ...
- Java多线程系列——线程池简介
什么是线程池? 为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用.用线程时从线程池中获取,用完以后不销毁线程,而是归还给线程池. JDK 对线程池的支持 为了更好的控制多线程,JDK 提 ...
- C#获取文件版本信息
使用FileVersionInfo获取版本信息 FileVersionInfo info = FileVersionInfo.GetVersionInfo(Application.Current.St ...
- idea生成类注释和方法注释的正确方法
系统:Mac OS idea版本:2017.3.1 ---------------- 生成类注释 打开Preferences Editor -> File and Code Templates ...
- gSOAP 初体验
安装 由于本人使用的是 Mac OS 系统,故以 Mac OS 为例说明如何安装 gSOAP. 1)下载 gSOAP 可以在 https://sourceforge.net/projects/gsoa ...
- Please install [clang](http://clang.llvm.org/) or check configuration `clang.executable`
解决方法: 1.安装clang 第一步:首先打开VScode编辑器 第二步:点击左侧“应用商店”栏 第三步:在“应用商店搜索拓展”栏输入关键字“clang” 第四步:安装提示的“C/c++ clang ...
- (原)阅读Android-Camera2Video的demo源码和调试心得
转载请注明出处:http://www.cnblogs.com/lihaiping/p/6142512.html 最近因为项目需要使用到camera的功能,所以针对官方的demo源码进行一番阅读,并 ...
- 很好的git教程
http://www.liaoxuefeng.com/这里的git教程很好,我是从这入的门.
- c# 根据字段名,得到对象中的属性值
public string GetModelValue(string FieldName, object obj) { try { Type Ts = obj.GetType(); object o ...