redis五种数据类型及用法

Redis简介(nosql) 

Redis 是完全开源免费的,分布式的,高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

         Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

         Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

         Redis支持数据的备份

         Redis是单线程的。Redis中不适合保存内容大的数据。

 

进入redis目录后 开启服务   redis-server.exe redis.windows.conf  出现上图画面证明服务开启成功

注: 此窗口不要关闭

再开启一个cmd用于使用,

切换到redis安装目录执行以下命令(注意修改自己的ip地址):

redis-cli.exe -h 127.0.0.1 -p 6379    客户端连接redis.(也可以点击reids-cli)

Redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

以下为数据类型中部分方法实例。

数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串 。

1.string

存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型

存储数据的格式:一个存储空间保存一个数据

存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

基本命令:

set key value   添加/修改数据

get key 获取数据

del key 删除数据

mset key1 value1 key2 value2 key3 value3 添加/修改多个数据

mget key1,key2 获取多个数据

strlen key 获取字符串长度

append key value 追加数据,不存在则创建

数据量大时,尽量选择mset添加修改

incr key 增1

decr key 减1

incrby key number 增number

decrby key number 减number

incrbyfloat key number 增加小数

string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。

redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发 带来的数据影响。

按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。 

setex key seconds value 设置生命周期以秒为单位

psetex key  milliseconds value  设置生命周期以毫秒为单位

 数据库中的热点数据key命名惯例   

两种方式:

1.key=user:id:1234:name,value=zhangsan;key=user:id:1234:type,value=1

2.(json形式)key=user:id:1234,value={"name":"zhangsan","type":1"}

优缺点:

第一种多人操作或不影响,数据传递不方便,及时更新数据。

第二种要等他人使用完成,传递数据方便,可以定期更新数据。

2.hash

Redis hash 是一个键值对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象,但又不适合存大量的对象。

HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
HSET key field value 将哈希表 key 中的字段 field 的值设为 value

HGETALL key 获取在哈希表中指定 key 的所有字段和值

HGET key field 获取存储在哈希表中指定字段的值。

HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。

HDEL key field1 [field2] 删除一个或多个哈希表字段

hkeys key  获取所有的key值

hvals key 获取所有的value值

 hincrby key field increment   增加值increment ,和string类型不一样的是没有减命令,如果减需将值设为负数

例: hincrby key field -1 
 hincrbyfloat key field increment  增加值increment  为小数

       hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到, 对应的值为(nil), 每个 hash 可以存储 232 - 1 个键值对 ,hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存 储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用 。
       hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈。 

 hsetnx key field value 存在无效,不存在创建
命令用于为哈希表中不存在的的字段赋值 。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

3.list

Redis 列表是简单的字符串列表,,底层使用双向链表存储结构实现 ,有序可重复.

lpush key value1 value2 从左侧依次放入

rpush key value1 value2 从右侧依次放入

lrange key start stop 从右侧开始获取数据

一般获取全部为 lrange key 0 -1,从左侧放入取的为倒序,右侧放入取的为正序

lindex key index 获取第几个索引

llen key 获取list列表的长度

lpop key 从左侧获取并移除数据

rpop key 从右侧获取并移除数据

blpop key1 [key2] timeout  阻塞型从左获取并移除数据,没有时等待timeout 秒,有则立即获取

brpop key1 [key2] timeout 阻塞型从右获取并移除数据,没有时等待timeout 秒,有则立即获取

 brpoplpush source destination timeout 阻塞型从source列表右侧取出一个数放入destination 的左侧,没有时等待timeout 秒,有则立即获取

lrem key count value 从右侧开始删除key列表中的,等于value的count数量

list中保存的数据都是string类型的,数据总容量是有限的,最多232 - 1 个元素 (4294967295)。 
list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作 
list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载 

4.set

set类型:能够保存大量的数据,高效的内部存储机制,便于查询

底层为hash,与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

sadd key num1 num2 添加数据

smembers key 得到全部数据

srem key num1 num2 删除某些数据

scard key 获得数据数量

sismember key num 判断是否含有

srandmember key count 随机得到count个数据,key中数量不变,默认count为1

spop key count 随机取出count个数据,key中相应减少这些取出的数据,默认count为1

交并差集操作

交 a和b重叠的部分

并 a和b的全部

a差b为a的不包含b的部分

sinter key1 key2 获得key1和key2的交集

sunion key1 key2 获得key1和key2的并集

sdiff key1 key2 获得key1和key2的差集,有顺序 key1-key2

sinterstore destination key1 key2 获得key1和key2的交集,放入destination中

sunionstore destination key1 key2 获得key1和key2的并集,放入destination中

sdiffstore destination key1 key2 获得key1和key2的差集,放入destination中

move source destination num 将source中的num值移动到destination

set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份 ,适用于去重操作。

set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间 

5.zset

在set的存储结构基础上添加可排序字段 

zadd key score member 添加数据

zrange key start stop 获取全部数据 后面可追加参数,如WITHSCORES

zrevrange key start stop 逆序获取全部数据 后面可追加参数,如WITHSCORES

zrem key number 删除数据

zrangebyscore key min max 查询score在min和max中的数据,后面可追加参数,如WITHSCORES

zrevrangebyscore key min max 逆序查询score在min和max中的数据,后面可追加参数,如WITHSCORES

zremrangebyrank key start stop 按索引删除

zremrangebyscore key min max 按排序删除

zcard key 获取数据总量

zcount key min max 获取score在min和max之间的数据总理

zinterstore destination numkeys key1 key2 将key1和key2交集放入destination中,相同的相加,numkeys是key的数量

zunionstore destination numkeys key1 key2 将key1和key2并集放入destination中,相同的相加,numkeys是key的数量

zrank key number 获得索引

zrevrank key number 逆序获得索引

zscore key member 获取score

zincrby key num member 修改score

score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992 
 
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时 候要慎重 
 
sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反 复覆盖,保留最后一次修改的结果 
 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值