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. mysql两表关联

    mysql两表关联 是按照范围关联表 select * from ((select u.id,u.name,u.sex,s.street_name,u.street_code,u.birthday f ...

  2. js实现字符串得填充

    方法一: //填充截取法 function padding4(str, length) { //这里用slice和substr均可 return (Array(length).join("0 ...

  3. Unity 使用JIMO 做MR扫图(Vuforia) 优化

    最近在做一个用MR眼镜端扫描图片做定位用, 使用的Vuforia提供的图片识别功能. 在眼镜端因为摄像机很挫,导致扫描出来的图片 位置存在着一定的偏差.就做了个小优化. 1.扫图的角度设定,垂直于图片 ...

  4. [mysql练习]多行结果合并问题练习

    有一个scores表,表结构和数据如下: id, stu_id, name,course, grade 1,1,贾万, 语文, 902,1,贾万 ,数学 ,100 3,2,毛之远 ,语文 ,974,2 ...

  5. Godot的场景树

    在Godot中,一个游戏的启动大致流程如下: 简而言之,Godot的main启动一个进程,加载所需的驱动设备(如渲染设备:GL/GLES/Vulkan等).音频设备,输入控制器设备等等:然后进入主循环 ...

  6. js正则 -180 到180 小数点后无限位、el-input

    正则 -180 到180 小数点后无限位/^0$|^-?0\.\d*[1-9]$|^-?[1-9](\.\d*[1-9])?$|^-?[1-9]\d(\.\d*[1-9])?$|^-?1[0-7]\d ...

  7. 攻防世界Web篇——unserialize3

    知识点: 序列化与反序列化维基百科:    序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后 ...

  8. linux上安装Oracle 包括常见安装错误(centos8.1,oracle linux8,redhat 8)通过

    谨记 关闭操作系统之前先关闭oracle数据库 oracle用户登录,执行lsnrctl start启动网络监听服务,执行dbstart启动数据库系统. oracle用户登录,执行lsnrctl st ...

  9. mysql 获取表信息 表备注等

    select table_name, table_comment, create_time, update_time from information_schema.tables-- where ta ...

  10. ImmutablePair和ImmutableTriple的使用

    场景 当我们调用某个方法,需要有超过一个值的返回时,我们通常会怎么做,比如现在需要调用方法返回姓名和年龄两个属性(假如姓名为张三,年龄为12). 方式一:使用Map,将Map中分别放入name为key ...