2019独角兽企业重金招聘Python工程师标准>>>

一.Redis数据类型

Redis支持5中数据类型,分别是字符串(Strings),列表(Lists),集合(Sets),哈希(Hashes),有序集合(Sorted Sets)下面会分别介绍各个数据类型以及在redis客户端下相关命令。

二.字符串(Strings)

字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串,包括二进制数据。可以使用字符串来存储json化的对象,持久化的对象,二进制流表示的图片等等。3.0之前字符串类型最大容量是512MB。这足够使用了。

       2.1  命令

set key value         localhost:6379> set name Tom                保存一个key为name,value为 Tom的键值对。

get key                  localhost:6379> get name                         读取key为name的值

keys *                      localhost:6379> keys *                             返回所有的key

incr key                    localhost:6379> incr age             当value是整数的时候可以使用这个命令对整数+1.原子性的操作

incrby   key num      localhost:6379> incrby age 10    当value是整数的时候,对value加上指定数。原子性

decr  key                   localhost:6379> decr age          当value是整数的时候,对value减去1   ,  原子性的

decrby key num        localhost:6379> decrby age 10   当value是整数的时候,对value减去指定数,原子性

incrbyfloat key  float     localhost:6379>  incrbyfloat price 0.9      当value是浮点数的时候,对value增加指定浮点数数,原子性

decrbyfloat key  float    localhost:6379>  decrbyfloat price 0.9    当value是浮点数的时候,对value减去指定浮点数数,原子性

append key value       localhost:6379> append name Jack       把value追加到相应key的value后面

localhost:6379> mset city ShangHai nation China    同时设置多个key-value

OK

localhost:6379> mget city  nation                同时获取多个key-value

1) "ShangHai"

2) "China"

二.散列类型(Hashes)
        当我们存一个对象的时候一般是把这个对象进行序列化,然后存在redis中,在需要对象里面某个字段的时候,从redis中读取对象序列化的value,对这个对象进行反序列化,再获得我们需要的某个字段,这造成很大的浪费。如果想要读取那个字段就可以直接读取某个字段多好。关系型数据库就是这样做的,但是对于某一些对象我有某些字段,某些对象我没有某些字段,这样关系型数据库就做不到了。在散列类型中一个key最多有2^32-1个字段。

Redis的散列类型就能做到。一个key对于多个filed,一个filed对于一个value。

localhost:6379> hset student:001 name Tom
(integer) 1
localhost:6379> hset student:001 age 25
(integer) 1
localhost:6379> hset student:001 city ShangHai
(integer) 1
localhost:6379> hget student:001 name
"Tom"
localhost:6379> hget student:001 age
"25"
localhost:6379> hget student:001 city
"ShangHai"

key为student:001的学生有三个字段,分别是name = Tom ,  age = 25,city  = ShangHai

在这里需要注意一个事情,就是使用hset的时候,如果字段以及存在了,则会更新数据,然后返回0,如果字段不存在,则会新建字段插入数据,然后返回1。

当然我们也可以批量添加和查询操作

localhost:6379> hmset student:002 name Jck age 25 city BeiJing
OK
localhost:6379> hmget student:002 name age city
1) "Jck"
2) "25"
3) "BeiJing"

或者

localhost:6379> hgetall student:002
1) "name"
2) "Jck"
3) "age"
4) "25"
5) "city"
6) "BeiJing"

或者 获取某个key的所有字段的值

localhost:6379> hvals student:001
1) "123"
2) "35"
3) "ShangHai"
4) "80kg"

增加数字

localhost:6379>     hincrby student:001 age 10
(integer) 35

当字段不存在时,会自动创建字段,并赋值。

获取字段数量

localhost:6379> hlen student:002
(integer) 3

删除字段

localhost:6379> hdel student:001 ages
(integer) 1

三.列表类型(Lists)

列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获取列表中某一段的值。列表类型在Redis中是使用的双向链表实现的。查询头尾比较近的元素相当快,但是通过索引去访问元素就比较慢了。这种特性是的Redis适合用来做关心最新数据的一些功能,如微博上新鲜事,新闻中今日新闻,热点新闻。也适合记录日志,因为添加日志不会受到已有的日志数量的影响。借助列表类型,Redis可以作为队列或者栈来使用。一个列表类型最多容纳2^32-1个元素。

  3.1往列表里面添加,从左边插入

localhost:6379> lpush numbers 5 4 3 2 1
(integer) 5

现在数列里面顺序从左到右是     1 2 3 4 5

    3.2往列表里面添加,从右边插入

localhost:6379> rpush numbers 5 4 3 2 1
(integer) 10

现在数列里面顺序从左到右是  1 2 3 4 5 5 4 3 2 1

    3.3查看数列值

localhost:6379> lrange numbers 0 101) "1"2) "2"3) "3"4) "4"5) "5"6) "5"7) "4"8) "3"9) "2"
10) "1"
localhost:6379> lrange numbers 0 0
1) "1"

在redis里面下标从0 开始,lrange numbers 0 10 是指从下标为0的开始到下标为10的元素。 lrange numbers 0 0 查下标为0的元素开始到下标为0的元素结束,也就是左边第一个元素。负数代表从右边第几个开始,-1表示右边第一个,-2表示右边第二个。 lrange numbers 0 -1表示显示整个数列

    3.4从左边弹出一个元素

localhost:6379> lpop numbers
"1"
localhost:6379> lrange numbers 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
5) "5"
6) "4"
7) "3"
8) "2"
9) "1"

可以通过lrange看到左边第一个元素被弹出了。

    3.5从右边弹出一个元素   

localhost:6379> rpop numbers
"1"
localhost:6379> lrange numbers 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
5) "5"
6) "4"
7) "3"
8) "2"

可以看到右边第一个元素被弹出了。

    3.6获取列表中元素的个数

localhost:6379> llen numbers
(integer) 8

   3.7 删除列表中指定的值   

localhost:6379> lrem numbers 1 2
(integer) 1

删除从列表删除前1一个值为2的元素

   lrem numbers count value

    count>0  :  从左边开始删除count个值为value的元素。

    count <0  :   从右边开始删除count个值为value的元素。    

    count = 0 : 删除所有值为value的元素

    3.8  根据下标位置获取元素

localhost:6379> lindex numbers 0
"4"
localhost:6379> lindex numbers 1
"5"
localhost:6379> lindex numbers -1
"4"

    3.9 修改元素的值 

localhost:6379> lset numbers 0 10
OK
localhost:6379> lindex numbers 0
"10"

    3.10  只保留某个范围的元素

    

localhost:6379> lrange numbers 0 -1
1) "10"
2) "5"
3) "5"
4) "4"
localhost:6379> ltrim  numbers 1 2
OK
localhost:6379> lrange numbers  0 -1
1) "5"
2) "5"

  3.8 队列和栈的实现

    聪明的你一定想到了

    lpush配合rpop(或者rpush配合lpop)就实现先入先出的一个队列了。

    lpush配合lpop(或者rpush配合rpop) 就实现后进先出的一个栈了。

四.集合类型(Set)

集合里面没有顺序,每个元素都不同,与java中set有点类似。Redis中集合类型可以存储最好2^32-1个元素。Redis中集合类型使用hash table 实现的,就类似java中的HahsMap的数据结构。

 4.1向集合中添加元素   

localhost:6379> sadd letters a b c d
(integer) 4

4.2查询集合中所有元素

localhost:6379> smembers letters
1) "b"
2) "a"
3) "c"
4) "d"

    4.3 从集合中删除元素

localhost:6379> srem letters b a
(integer) 2
localhost:6379> smembers letters
1) "c"
2) "d"

  4.4 查询集合中是否存在

localhost:6379> sismember letters c
(integer) 1

  4.5 集合间的运算

    4.5.1 求两个集合的差集  属于集合A不属于集合B   

localhost:6379> sadd seta a b c d
(integer) 4
localhost:6379> sadd setb c d
(integer) 2
localhost:6379> sdiff seta setb
1) "b"
2) "a"

{a,b,c,d} -{c,d}  = {a.b}

4.5.2 求两个集合交集

localhost:6379> sinter seta setb
1) "c"
2) "d"

{a,b,c,d} ∩{c,d}  = {c,d}

        4.5.3 求两个集合的并集        

localhost:6379> sunion seta setb
1) "a"
2) "c"
3) "d"
4) "b"

    4.6获得集合中元素个数

localhost:6379> scard seta
(integer) 4

五.有序集合(Sorted Set)

很显然就是一个集合,但是元素是有序的。

    5.1 向有序集合中添加

localhost:6379> zadd scoreset 80 Tom 90 Jack 40 Devil
(integer) 3

如果元素已经存在则修改元素的值

     5.2 查询某个元素的值

localhost:6379> zscore scoreset Jack
"90"

      5.3 根据下标位置查询

localhost:6379> zrange scoreset 0 -1
1) "Devil"
2) "Tom"
3) "Jack"localhost:6379> zrange scoreset 0 -1 withscores
1) "Devil"
2) "40"
3) "Tom"
4) "80.5"
5) "Jack"
6) "90"

     5.4  获取指定分数范围的元素

localhost:6379> zrange scoreset 0 -1 withscores
1) "Devil"
2) "40"
3) "Tom"
4) "80.5"
5) "Jack"
6) "90"

转载于:https://my.oschina.net/u/2250599/blog/424038

Redis入门系列数据类型及相关命令相关推荐

  1. Redis五大基本数据类型及其相关命令及常用用途

    String String类型,可以用来存储字符串.整型.浮点型数据.甚至二进制数据(因为redis的String类型是二进制安全的). 常用命令: #设置多个值,原子性. mset aaa 2673 ...

  2. Redis 入门系列-redis-redis 是什么,redis 的优点

    导航 Redis 入门系列-redis-redis 是什么,redis 的优点 Redis 入门系列-redis-redis 和 memcached 的区别(总结) Redis 入门系列-redis- ...

  3. Redis基础篇-(入门、数据类型、通用命令、Jedis)

    windows系统环境 目录 Redis入门 问题现象: 罪魁祸首---关系型数据库 解决思路 Nosql 常见的Nosql数据库: 解决方案(电商场景): Redis简介 Redis的应用 Redi ...

  4. Redis入门与数据类型介绍

    一.Redis 概述 Redis 概念 Redis : REmote DIctionary Server(远程字典服务器). Redis 是完全开源免费的,用C语言编写的,遵守BSD 协议,是一个高性 ...

  5. 【Redis】基于Redis6的数据类型以及相关命令、应用场景整理

    文章目录 数据类型与命令 常用 字符串(String) 列表(List) 集合(Set) 有序集合(Sorted Set) 哈希(Hash) 特殊 地理位置(GEO) 流(Stream) 基数统计(H ...

  6. redis入门和数据类型

    业务数据的特殊性 附加功能 系统功能优化或升级  单服务器升级集群  Session 管理  Token 管理数据存储类型介绍  string  hash  list  set  so ...

  7. redis入门系列(一)redis安装部署

    2019独角兽企业重金招聘Python工程师标准>>> 用了redis一年多了,虽然原理和命令都了解,应付日常工作绰绰有余,但是从没从头到尾的去学习一下redis.从个人经历来讲,这 ...

  8. redis入门(数据类型)

    数据类型 1) 字符串类型 string 2) 哈希类型 hash: map 3) 列表类型 list: linkedlist格式.支持重复元素4) 集合类型 set: 不允许重复元素5) 有序集合类 ...

  9. kafka java api 删除_Kafka入门系列—6. Kafka 常用命令及Java API使用

    常用命令 启动Zookeeper ./zkServer.sh start-foreground 可选参数: ./zkServer.sh {start|start-foreground|stop|res ...

最新文章

  1. python零基础怎么学-python 零基础该怎么学?
  2. time,gettimeofday,clock_gettime,_ftime
  3. 个人的web开发心得(八)----------非常适合入门新手,都是常识
  4. CRM Fiori应用里My Opportunity - My Appointment中My的准确含义
  5. .NET core3.1使用cookie进行身份认证
  6. 转件工程--实践者的研究方法阅读笔记1
  7. 【UIKit】键盘设计2
  8. MathType编辑器安装(写公式)
  9. la4080 Warfare And Logistics 罗列+最短
  10. 局域网ip扫描工具_IP Scanner Pro——ip局域网扫描工具
  11. html5演讲ppt,制作ppt太麻烦?用上这5款黑科技PPT模板,汇报、演讲瞬间高大上
  12. 个人信息安全规范----1、个人信息安全术语及定义
  13. 不对外开放的微信小程序审核时不通过,因为无法提供测试账号导致审核人员登录失败解决办法!
  14. 百谷歌---学习工作好东西啊!!
  15. 马毅:低维模型与深度模型的殊途同归(神经网络、压缩感知和低秩分解与补全)
  16. sql server中的while循环语句
  17. 大狼痛心疾首的碎碎念
  18. Golden Dream - 8月
  19. 【渝粤教育】国家开放大学2018年春季 0463-21T英语语音 参考试题
  20. 使用nexus搭建局域网私服Maven仓库(Windows版)

热门文章

  1. oracle起定时任务,每隔1秒执行一次
  2. validation problems were found problem cvc-complex-type.2.4a
  3. ScrollView详解
  4. js如何判断访问来源是来自搜索引擎(蜘蛛人)还是直接访问
  5. I.MX6 android 获取framebuffer信息
  6. 使用Emacs执行外部shell命令
  7. javascript date utc
  8. LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵
  9. [HDU1712]ACboy needs your help
  10. Android:手把手教你打造可缩放移动的ImageView(下)