zoukankan      html  css  js  c++  java
  • Redis数据结构

    Redis数据结构简介

    redis是一种高级的key:value存储系统,其中value支持五种数据类型:

    1.字符串(strings

    2.字符串列表(lists

    3.字符串集合(sets

    4.有序字符串集合(sorted sets

    5.哈希(hashes

    而关于key,有几个点要提醒大家:

    1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

    2.key也不要太短,太短的话,key的可读性会降低;

    3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd

    Redis数据结构-strings

    [root@mysql1 src]# ./redis-cli

    127.0.0.1:6379> set mystr "abcd"

    OK

    127.0.0.1:6379> get mystr

    "abcd"

    字符串类型的用法就是这么简单,因为是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储。

    还可以通过字符串类型进行数值操作,在遇到数值操作时,redis会将字符串类型转换成数值。

    127.0.0.1:6379> set mynum "2"

    OK

    127.0.0.1:6379> get mynum

    "2"

    127.0.0.1:6379> incr mynum

    (integer) 3

    127.0.0.1:6379> get mynum

    "3"

    127.0.0.1:6379> set mynum2 "2.5"

    OK

    127.0.0.1:6379> get mynum2

    "2.5"

    127.0.0.1:6379> incr mynum2

    (error) ERR value is not an integer or out of range

    set key value

    mset key value [key value...]

    get key

    mget key [key...]

    计数:

    incr key

    Redis数据结构-lists

    redis中的lists在底层实现上并不是数组,而是链表。lists的常用操作包括LPUSHRPUSHLRANGE等。我们可以用LPUSHlists的左侧插入一个新元素,用RPUSHlists的右侧插入一个新元素,用LRANGE命令从lists中指定一个范围来提取元素。

    127.0.0.1:6379> lpush mylist "1"       //新建一个list叫做mylist,并在列表头部插入元素”1”

    (integer) 1

    127.0.0.1:6379> rpush mylist "2"      //mylist右侧插入元素”2”

    (integer) 2

    127.0.0.1:6379> lpush mylist "3"      //mylist左侧插入元素”3”

    (integer) 3

    127.0.0.1:6379> rpush mylist "4"      //mylist右侧插入元素”4”

    (integer) 4

    127.0.0.1:6379> lpush mylist "5"

    (integer) 5

    127.0.0.1:6379> rpush mylist "6"

    (integer) 6

    127.0.0.1:6379> lpush mylist "7"

    (integer) 7

    127.0.0.1:6379> rpush mylist "8"

    (integer) 8

    127.0.0.1:6379> lrange mylist 0 3      //列出mylist中从编号0到编号3的元素

    1) "7"

    2) "5"

    3) "3"

    4) "1"

    127.0.0.1:6379> lrange mylist 4 7      //列出mylist中从编号4到编号7的元素

    1) "2"

    2) "4"

    3) "6"

    4) "8"

    lists的应用相当广泛,随便举几个例子:

    1.我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序。

    2.利用LRANGE还可以很方便的实现分页的功能。

    rpush key value [value ...]

    lpush key value [value ...]

    linsert key before|after pivot value

    lrange listkey 0 -1

    lindex key index

    llen key

    lpop key

    rpop key

    Redis数据结构-集合

    redis的集合,是一种无序的集合,集合中的元素没有先后顺序。

    127.0.0.1:6379> sadd myset "one"            //向集合myset中加入一个新元素"one"

    (integer) 1

    127.0.0.1:6379> sadd myset "two"

    (integer) 1

    127.0.0.1:6379> smembers myset            //列出集合myset中的所有元素

    1) "two"

    2) "one"

    127.0.0.1:6379> sismember myset "one"      //判断元素1是否在集合myset1表示存在

    (integer) 1

    127.0.0.1:6379> sismember myset "three"    //判断元素3是否在集合myset0表示不存在

    (integer) 0

    127.0.0.1:6379> sadd yourset "1"           //新建一个新的集合yourset

    (integer) 1

    127.0.0.1:6379> sadd yourset "2"

    (integer) 1

    127.0.0.1:6379> sadd yourset "2"           //集合不能添加重复数据

    (integer) 0

    127.0.0.1:6379> smembers yourset

    1) "1"

    2) "2"

    127.0.0.1:6379> sunion myset yourset       //对两个集合求并集

    1) "1"

    2) "two"

    3) "2"

    4) "one"

    sadd key element [element ...]

    srem key element [element ...]

    scard key 计算元素个数

    spop key

    smembers key

    Redis数据结构-有序集合

    redis不但提供了无序集合(sets),还很体贴的提供了有序集合(sorted sets)。有序集合中的每个元素都关联一个序号(score),这便是排序的依据。很多时候,我们都将redis中的有序集合叫做zsets。有序集合相关的操作指令都是以z开头的,比如zrangezaddzrevrangezrangebyscore等等

    127.0.0.1:6379> zadd myzset 1 baidu.com

    (integer) 1

    127.0.0.1:6379> zadd myzset 3 360.com

    (integer) 1

    127.0.0.1:6379> zadd myzset 2 google.com

    (integer) 1

    127.0.0.1:6379> zrange myzset 0 -1 withscores

    1) "baidu.com"

    2) "1"

    3) "google.com"

    4) "2"

    5) "360.com"

    6) "3"

    127.0.0.1:6379> zrange myzset 0 -1

    1) "baidu.com"

    2) "google.com"

    3) "360.com"

    zadd key score member [score member ...]

    zcard key

    zrem key member [member...]

    Redis数据结构-哈希

    hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

    //建立哈希,并赋值

    127.0.0.1:6379> hmset user:001 username allen passwd hgc123456 age 32

    OK

    //列出哈希的内容

    127.0.0.1:6379> hgetall user:001

    1) "username"

    2) "allen"

    3) "passwd"

    4) "hgc123456"

    5) "age"

    6) "32"

    //更改哈希中的某一个值

    127.0.0.1:6379> hset user:001 passwd 123456

    (integer) 0

    //再次列出哈希的内容

    127.0.0.1:6379> hgetall user:001

    1) "username"

    2) "allen"

    3) "passwd"

    4) "123456"

    5) "age"

    6) "32"

    hset key field value

    hget key field

    hdel key field

    hlen key

    hmset key field value [field value ...]

    hmget key field [field ...]

    hkeys key 获取所有field

    hvals key 获取所有value

    数据结构    内部编码

    string raw,int,embstr

    hash hashtable,ziplist

    list linkedlist,ziplist

    set hashtable,intset

    zset skiplist,ziplist

  • 相关阅读:
    大数据应用期末总评
    分布式文件系统HDFS 练习
    安装Hadoop
    爬虫综合大作业
    爬取全部的校园新闻
    理解爬虫原理
    中文词频统计与词云生成
    复合数据类型,英文词频统计
    字符串操作、文件操作
    了解大数据的特点、来源与数据呈现方式
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11339809.html
Copyright © 2011-2022 走看看