• redis数据类型


    --------------------String -- 字符串--------------------

    概述:String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int

    192.168.100.101:6379> set hello world

    OK

    192.168.100.101:6379> get hello

    "world"

    192.168.100.101:6379> EXISTS hello ##验证key是否存在

    (integer) 1

    192.168.100.101:6379> type hello

    string

    192.168.100.101:6379> substr hello 1 2 ##查看key的第1和2两个字符

    "or"

    192.168.100.101:6379> append hello ! ##在key后添加字符!

    (integer) 6

    192.168.100.101:6379> get hello

    "world!"

    192.168.100.101:6379> set haha heihei

    OK

    192.168.100.101:6379> keys h* ##查看以h开头的Key

    1) "haha"

    2) "hello"

    192.168.100.101:6379> set name xiaoming

    OK

    192.168.100.101:6379> keys *

    1) "haha"

    2) "hello"

    3) "name"

    192.168.100.101:6379> RANDOMKEY ##随机返回一个Key

    "name"

    192.168.100.101:6379> keys *

    1) "haha"

    2) "hello"

    3) "name"

    192.168.100.101:6379> RANDOMKEY

    "haha"

    192.168.100.101:6379> RENAME haha hehe

    OK

    192.168.100.101:6379> keys *

    1) "hehe"

    2) "name"

    3) "hello"

    192.168.100.101:6379> DEL hehe

    (integer) 1

    192.168.100.101:6379> keys *

    1) "name"

    2) "hello"

    192.168.100.101:6379> get name

    "xiaoming"

    192.168.100.101:6379> set name xiaohong

    OK

    192.168.100.101:6379> get name

    "xiaohong"

    192.168.100.101:6379> expire name 10 ##设置KEY值的超时时间

    (integer) 1

    192.168.100.101:6379> ttl name ##查看KEY值当前剩余的超时时间

    (integer) 4

    192.168.100.101:6379> get name

    "xiaohong"

    192.168.100.101:6379> get name

    (nil)

    192.168.100.101:6379> keys *

    1) "hello"

    --------------------list -- 列表--------------------

    概述:Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构

    应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop

    192.168.100.101:6379> rpush list1 1 ##创建列表并在尾部插入元素

    (integer) 1

    192.168.100.101:6379> rpush list1 2

    (integer) 2

    192.168.100.101:6379> lrange list1 0 1 ##验证列表中的第0个元素到第1个元素

    1) "1"

    2) "2"

    192.168.100.101:6379> lpush list1 0 ##在列表头部插入元素

    (integer) 3

    192.168.100.101:6379> lrange list1 0 1

    1) "0"

    2) "1"

    192.168.100.101:6379> lrange list1 0 2 ##验证列表中的第0个元素到第2个元素

    1) "0"

    2) "1"

    3) "2"

    192.168.100.101:6379> llen list1 ##查看列表中的元素的数量

    (integer) 3

    192.168.100.101:6379> lindex list1 1 ##定位到列表中的第1个元素

    "1"

    192.168.100.101:6379> ltrim list1 1 2 ##截取列表中的第1个元素到第2个元素

    OK

    192.168.100.101:6379> lrange list1 0 10 ##查看列表中第0个元素到第10个元素

    1) "1"

    2) "2"

    192.168.100.101:6379> lset list1 1 haha ##更改列表中的第1个元素值为haha

    OK

    192.168.100.101:6379> lrange list1 0 10

    1) "1"

    2) "haha"

    192.168.100.101:6379> lset list1 2 haha ##验证更改时的元素位置不能大于现有元素的数量

    (error) ERR index out of range

    192.168.100.101:6379> lrange list1 0 10

    1) "1"

    2) "haha"

    192.168.100.101:6379> rpush list1 haha ##在列表尾部插入新的元素

    (integer) 3

    192.168.100.101:6379> lrange list1 0 10

    1) "1"

    2) "haha"

    3) "haha"

    192.168.100.101:6379> lrem list1 2 haha ##删除列表中两个值为haha的元素

    (integer) 2

    192.168.100.101:6379> lrange list1 0 10

    1) "1"

    192.168.100.101:6379> rpush list1 haha

    (integer) 2

    192.168.100.101:6379> rpush list1 haha

    (integer) 3

    192.168.100.101:6379> rpush list1 haha

    (integer) 4

    192.168.100.101:6379> rpush list1 haha

    (integer) 5

    192.168.100.101:6379> lrange list1 0 10

    1) "1"

    2) "haha"

    3) "haha"

    4) "haha"

    5) "haha"

    192.168.100.101:6379> lpop list1 ##删除列表内开头的第一个元素

    "1"

    192.168.100.101:6379> lrange list1 0 10

    1) "haha"

    2) "haha"

    3) "haha"

    4) "haha"

    192.168.100.101:6379> lpop list1

    "haha"

    192.168.100.101:6379> lrange list1 0 10

    1) "haha"

    2) "haha"

    3) "haha"

    --------------------set -- 无序集合--------------------

    概述:可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因

    应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能

    192.168.100.101:6379> sadd set1 0 ##创建set1并赋值0

    (integer) 1

    192.168.100.101:6379> sadd set1 1 ##在set1后追加值1

    (integer) 1

    192.168.100.101:6379> smembers set1 ##显示set1的所有值

    1) "0"

    2) "1"

    192.168.100.101:6379> scard set1 ##显示set1的基数

    (integer) 2

    192.168.100.101:6379> sismember set1 0 ##显示set1中是否包含值为0的元素

    (integer) 1

    192.168.100.101:6379> srandmember set1 ##随机返回set1中的的元素值

    "0"

    192.168.100.101:6379> sadd set2 0 ##创建set2并添加元素

    (integer) 1

    192.168.100.101:6379> sadd set2 2

    (integer) 1

    192.168.100.101:6379> sinter set1 set2 ##过滤set1与set2的交集

    1) "0"

    192.168.100.101:6379> sinterstore set3 set1 set2 ##将set1与set2的交集保存到set3

    (integer) 1

    192.168.100.101:6379> smembers set3

    1) "0"

    192.168.100.101:6379> sunion set1 set2 ##过滤set1与set2的并集

    1) "0"

    2) "1"

    3) "2"

    192.168.100.101:6379> sdiff set1 set2 ##相对与set2来讲,set1的差集

    1) "1"

    192.168.100.101:6379> sdiff set2 set1 ##相对比set1来讲,set2的差集

    1) "2"

    192.168.100.101:6379> keys * ##查看已经存在的各种数据类型的键

    1) "set1"

    2) "hello"

    3) "list"

    4) "list1"

    5) "set2"

    --------------------zset -- 有序集合--------------------

    概述:Redis有序集合类似Redis无序集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。Redis有序集合添加、删除和测试的时间复杂度均为O(1)(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为2^32- 1元素(4294967295,超过40亿每个元素的集合);Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单

    使用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构

    192.168.100.101:6379> zadd zset1 1 baidu.com ##创建集合zset1,添加元素baidu.com,并且设置元素的score值(有序集合的序列号)为1

    (integer) 1

    192.168.100.101:6379> zadd zset1 2 sina.com

    (integer) 1

    192.168.100.101:6379> zadd zset1 3 qq.com

    (integer) 1

    192.168.100.101:6379> zrange zset1 0 2 ##查看集合zset1中的元素

    1) "baidu.com"

    2) "sina.com"

    3) "qq.com"

    192.168.100.101:6379> zcard zset1 ##查看集合zset1中的基数

    (integer) 3

    192.168.100.101:6379> zscore zset1 baidu.com ##验证元素baidu.com在集合zset1中的score值

    "1"

    192.168.100.101:6379> zscore zset1 qq.com ##验证元素qq.com在集合zset1中的score值

    "3"

    192.168.100.101:6379> zrevrange zset1 0 1 ##倒序查找集合中的元素

    1) "qq.com"

    2) "sina.com"

    192.168.100.101:6379> zrem zset1 qq.com ##删除集合中的元素qq.com

    (integer) 1

    192.168.100.101:6379> zrange zset1 0 5 ##验证集合中的所有元素

    1) "baidu.com"

    2) "sina.com"

    192.168.100.101:6379> zincrby zset1 5 taobao.com ##设置该元素score值为5.如若此元素不存在,则会添加到集合中

    "5"

    192.168.100.101:6379> zrange zset1 0 5 ##验证集合中的原色

    1) "baidu.com"

    2) "sina.com"

    3) "taobao.com"

    192.168.100.101:6379> zrange zset1 0 5 withscores ##查看集合中的元素值并且输出其本身的score值

    1) "baidu.com"

    2) "1"

    3) "sina.com"

    4) "2"

    5) "taobao.com"

    6) "5"

    192.168.100.101:6379> zincrby zset1 10 haha.com ##添加新元素haha.com并指定其本身score值

    "10"

    192.168.100.101:6379> zrange zset1 0 5 withscores ##验证元素的排序

    1) "baidu.com"

    2) "1"

    3) "sina.com"

    4) "2"

    5) "taobao.com"

    6) "5"

    7) "haha.com"

    8) "10"

    192.168.100.101:6379> zincrby zset1 15 baidu.com ##如若新添加的元素已经存在,那么会在原有score值的基础上增加指定得score值

    "16"

    192.168.100.101:6379> zrange zset1 0 5 withscores ##验证元素baidu.com的score值变为16,增加了15,并排序到集合的末尾

    1) "sina.com"

    2) "2"

    3) "taobao.com"

    4) "5"

    5) "haha.com"

    6) "10"

    7) "baidu.com"

    8) "16"

    注:此外, 还有zrevrank, zrevrange, zrangebyscore, zremrangebyrank, zramrangebyscore, zinterstore/zunionstore等操作

    --------------------hash--------------------

    概述:类似C#中的dict类型或者C++中的hash_map类型。Redis Hash对应Value内部实际就是一个HashMap,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht

    应用场景:假设有多个用户及对应的用户信息,可以用来存储以用户ID为key,将用户信息序列化为比如json格式做为value进行保存

    192.168.100.101:6379> hset hash1 key1 value1 ##设置键值hash1,并且指定内部key与value对应

    (integer) 1

    192.168.100.101:6379> hget hash1 key1 ##查看hash1中的key1的值

    "value1"

    192.168.100.101:6379> hexists hash1 key1 ##检查hash1中是否有key1

    (integer) 1

    192.168.100.101:6379> hset hash1 key2 value2 ##在hash1中创建key2

    (integer) 1

    192.168.100.101:6379> hlen hash1 ##查看hash1中键值的基数

    (integer) 2

    192.168.100.101:6379> hkeys hash1 ##查看hash1中具体包含的键

    1) "key1"

    2) "key2"

    192.168.100.101:6379> hvals hash1 ##查看hash1中具体包含的值

    1) "value1"

    2) "value2"

    192.168.100.101:6379> hmget hash1 key1 key2 ##通过明确指定hash1中的key,去查看值是什么

    1) "value1"

    2) "value2"

    192.168.100.101:6379> hgetall hash1 ##查看hash1中包含的所有键和值的对应

    1) "key1"

    2) "value1"

    3) "key2"

    4) "value2"

    192.168.100.101:6379> hset hash1 key4 10 ##添加新键key4,值为整数10

    (integer) 1

    192.168.100.101:6379> hincrby hash1 key4 15 ##将key4执行计算加10(仅限整数)

    (integer) 25

    192.168.100.101:6379> hmset hash1 key5 value5 key6 value6 key7 value7 ##批量添加键值对

    OK

    192.168.100.101:6379> hgetall hash1 ##验证批量添加的键值对

    1) "key1"

    2) "value1"

    3) "key2"

    4) "value2"

    5) "key3"

    6) "value3"

    7) "key4"

    8) "25"

    9) "key5"

    10) "value5"

    11) "key6"

    12) "value6"

    13) "key7"

    14) "value7"

    --------------------redis中其他操作--------------------

    192.168.100.101:6379> dbsize ##查看所有key的数目 

    192.168.100.101:6379> flushdb ##删除当前选择数据库中的所有key 

    192.168.100.101:6379> flushall ##删除所有数据库中的所有key 

    192.168.100.101:6379> save ##将数据同步保存到磁盘 

    192.168.100.101:6379> bgsave ##异步保存 

    192.168.100.101:6379> lastsave ##上次成功保存到磁盘的Unix时间戳 

    192.168.100.101:6379> info ##查询server信息 

    192.168.100.101:6379> slaveof ##改变复制策略设置

  • 相关阅读:
    Docker 常用命令
    SpringMVC Controller 返回值几种类型
    SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    springmvc 自定义拦截器实现未登录用户的拦截
    使用idea搭建SSM框架
    详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)
    IntelliJ IDEA maven项目new里没有package
    ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES)
    MySql 5.7密码查看或修改
  • 原文地址:https://www.cnblogs.com/omgasw/p/10756052.html
Copyright © 2020-2023  润新知