hash类型

• string 类型的键值对集合
• redis 中数据类型不支持嵌套,例如不能在 hash 中设置值为 hash
• 适合用于存储对象
• 每个 hash 可以存储 2 32 -1 键值对(40多亿)
设置值hset 获取值hget
127.0.0.1:6379> hset phone name apple
(integer) 1
127.0.0.1:6379> hget phone name
"apple"

同时设置多个字段和值(键相同)hset,同时获取多个字段的值(键相同)hget
127.0.0.1:6379> hmset phone price 12000 from America
OK127.0.0.1:6379> hmget phone name price from
1) "apple"
2) "12000"
3) "America"

查看键中所有字段
127.0.0.1:6379> hkeys phone
1) "name"
2) "price"
3) "from"

查看键中所有值127.0.0.1:6379> hvals phone
1) "apple"
2) "12000"
3) "America"

查看键中所有的字段和值
127.0.0.1:6379> hgetall phone
1) "name"
2) "apple"
3) "price"
4) "12000"
5) "from"
6) "America"

查看键中字段的个数
127.0.0.1:6379> hlen phone
(integer) 3

查看键中是否存在某个字段
127.0.0.1:6379> hexists phone price
(integer) 1

键中某个字段增加一定值,只能是数字类型
127.0.0.1:6379> hincrby phone price 1000
(integer) 13000
127.0.0.1:6379> hget phone price
"13000"
127.0.0.1:6379> hincrby phone name 100
(error) ERR hash value is not an integer

如果字段不存在则赋值,如果存在则不赋值
127.0.0.1:6379> hsetnx phone price 11000
(integer) 0
127.0.0.1:6379> hget phone price
"13000"
127.0.0.1:6379> hsetnx phone generation 12
(integer) 1
127.0.0.1:6379> hget phone generation
"12"

删除键中某个字段
127.0.0.1:6379> hdel phone generation
(integer) 1
127.0.0.1:6379> hkeys phone
1) "name"
2) "price"
3) "from"

删除键
127.0.0.1:6379> del phone
(integer) 1
127.0.0.1:6379> exists phone
(integer) 0

总结:
增/改:hset hmset hsetnx hincrby
删:hdel
查:hget hmget hkeys hvals hgetall hlen hexists
未举例的hash命令:hincrbyfloat hstrlen hvals hscan

list类型

• Redis 列表是简单的字符串列表,按照插入顺序排序
• 可以添加一个元素到列表的头部(左边)或者尾部(右边)
• 使用双向链表实现的,所以从两端取值时速度非常快
• 列表最多可存储 2 32 - 1 元素 (4294967295, 每个列表可存储40多亿)

lpush从链表左端插入元素,可插入一个或多个
127.0.0.1:6379> lpush phone apple
(integer) 1
127.0.0.1:6379> lpush phone samsung huawei xiaomi
(integer) 4

lrange根据索引查看链表元素,支持反向索引(-1代表最右,-2代表倒数第二,以此类推)
127.0.0.1:6379> lrange phone 0 -1
1) "xiaomi"
2) "huawei"
3) "samsung"
4) "apple"
127.0.0.1:6379> lrange phone -2 -1
1) "samsung"
2) "apple"

linsert在指定元素左侧或者右侧插入元素
127.0.0.1:6379> linsert phone before xiaomi oppo
(integer) 5
127.0.0.1:6379> linsert phone after apple vovi
(integer) 6
127.0.0.1:6379> lrange phone 0 -1
1) "oppo"
2) "xiaomi"
3) "huawei"
4) "samsung"
5) "apple"
6) "vovi"

lset指定链表指定索引处元素的值
127.0.0.1:6379> lset phone 0 zhongxing
OK

lindex查看链表指定索引处元素的值
127.0.0.1:6379> lindex phone 0
"zhongxing"
127.0.0.1:6379> lrange phone 0 -1
1) "zhongxing"
2) "xiaomi"
3) "huawei"
4) "samsung"
5) "apple"
6) "vovi"

lpop从链表左端弹出一个元素
127.0.0.1:6379> lpop phone
"zhongxing"

rpop从链表右端弹出一个元素
127.0.0.1:6379> rpop phone
"vovi"
127.0.0.1:6379> lrange phone 0 -1
1) "xiaomi"
2) "huawei"
3) "samsung"
4) "apple"

lrem key count value删除count个数个值为value的元素

count>0从左侧删除count个元素,count<0从右端删除count个元素,count=0删除所有值为value的元素
127.0.0.1:6379> lrem phone 1 samsung
(integer) 1
127.0.0.1:6379> lrange phone 0 -1
1) "xiaomi"
2) "huawei"
3) "apple"

ltrim删除链表指定索引区间外的所有元素
127.0.0.1:6379> ltrim phone 0 1
OK
127.0.0.1:6379> lrange phone 0 -1
1) "xiaomi"
2) "huawei"

rpoplpush source desc从第一个链表右端弹出一个元素,放入第二个链表左端,如果是同一个链表,则为列表旋转
127.0.0.1:6379> lpush car benz bmw audi
(integer) 3
127.0.0.1:6379> rpoplpush car phone
"benz"
127.0.0.1:6379> lrange phone 0 -1
1) "benz"
2) "xiaomi"
3) "huawei"
127.0.0.1:6379> rpoplpush phone phone
"huawei"

127.0.0.1:6379> lrange phone 0 -1
1) "huawei"
2) "benz"
3) "xiaomi"

总结:

增:lpush rpush linsert

删: lpop rpop lrem ltrim

改:lset rpoplpush

查:lindex lrange llen

没有根据索引删除,很别扭

未举例的list命令:lpushx rpushx blpop brpop brpoplpush

redis学习(二)数据类型的更多相关文章

  1. Redis 学习(二) —— 数据类型及操作

    Redis支持string.list.set.zset.hash等数据类型,这一篇学习redis的数据类型.命令及某些使用场景. 一.String,字符串 字符串是 Redis 最基本的数据类型.一个 ...

  2. Redis基础学习(二)—数据类型

    一.Redis支持的数据类型 Redis中存储数据是通过key-value存储的,对于value的类型有以下几种: (1)字符串. (2)Map (3)List (4)Set   public cla ...

  3. Redis学习二 C#中如何进行这五种数据类型的操作

    我在网上找了好久,就是没有找到Redis和C#结合的书,都是和别的编程语言在一起鬼混. 简单的用C#实现向Redis中插入那我中类型的数据 首先需要到NuGet 里面下载 Redis IDatabas ...

  4. Redis学习二:Redis入门介绍

    一.入门概述 1.是什么 Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内 ...

  5. Redis 学习之数据类型

    该文使用centos6.5 64位 redis-3.2.8 [root@localhost bin]# netstat -tunpl |grep 6379  查看redis 是否启动成功 一.Stri ...

  6. redis学习-sds数据类型

    今天开始了redis的学习,本来想直接从源码看起的,不过看到有篇对redis介绍的基础教程 <Redis 设计与实现(第一版)> 于是决定从这个开始入门. 1.数据类型定义 typedef ...

  7. redis学习——day02_redis数据类型

    一.简介 Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server.传统的key-value是指支持使用一个key字符串来索引value字符串的存储 ...

  8. Redis学习-string数据类型

    Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志 型.Key-Value 数据库. redis提供五种数据类型string,hash,list,set及sor ...

  9. C#中使用Redis学习二 在.NET4.5中使用redis hash操作

    上一篇>> 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表. ...

  10. redis学习笔记——数据类型

    对象处理机制 Redis 构建了自己的类型系统,这个系统的主要功能包括:• redisObject 对象.• 基于redisObject 对象的类型检查.• 基于redisObject 对象的显式多态 ...

随机推荐

  1. linux篇之WC(word count)的使用概述

    Text. Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项] [文件1] [文件2] ... 2.命 ...

  2. Jupyter + Miniconda + VsCode 学习利器

    Jupyter + Miniconda + VsCode 学习利器 Jupyter Notebook 是基于网页的用于交互计算的应用程序. Miniconda 是一款小巧的python环境管理工具 提 ...

  3. mysql使用保留字导致该列查不出来(mysql版本问题)

    mysql版本是 问题: 如图这边groups是sql的保留字此时这样查询是查不出来的,并会报错语法错误.但是在5.几的mysql版本中这行sql就没有问题. 解决方法: 在groups列上加上'gr ...

  4. kubernetes中 pause的作用

    pause的作用 重要概念:Pod内的容器都是平等的关系,共享Network Namespace.共享文件 pause容器的最主要的作用:创建共享的网络名称空间,以便于其它容器以平等的关系加入此网络名 ...

  5. 052_Lightning

    不支持内容: JavaScript buttons, customizable forecasting, and customizable tabs. 设置部分User选择使用Lightning: 单 ...

  6. 三分钟梳理TDengine安装部署的逻辑

      ​小 T 导读:TDengine,是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,除却读写性能.存储压缩能力强大之外,还有安装简单.操作难度低等优势.今天我们就从常 ...

  7. flask-基础篇02 请求与响应

    一.处理请求 1.URL路径参数(动态路由) # 例如,有一个请求访问的接口地址为/users/123,其中123实际上为具体的请求参数,表明请求123号用户的信息.此时如何从url中提取出123的数 ...

  8. 基于rabbitmq之MQTT协议的智能家居

    智能家居项目 智能可燃气体报警器 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话.短信.微信等方式,提醒用户家中可能有气体泄漏. 用户还可能 ...

  9. Redis API存取

    RedisClient redisClient = new RedisClient("127.0.0.1", 6379); [HttpGet] public int RedisIn ...

  10. 微信小程序开发常见问题

    1.不同页面之间的传值方式 通过URL问号传值 当前页面 wx.navigateTo({ url: '/pages/aaa/aaa?/userName=norma' }) 2. 另一个页面通过opti ...