redis(2)

redis的五大数据类型:

string
 hash
 list
 set
 sorted_set

string

特点:
 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
 存储数据的格式:一个存储空间保存一个数据
 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

基础使用:

127.0.0.1:6379> set univercity ccu
OK
127.0.0.1:6379> get univercity
"ccu"

127.0.0.1:6379> del univercity

高级使用:

【一次性创建多个键值,获取多个键值。值的长度。值的追加】

127.0.0.1:6379> mset desk red pan white
127.0.0.1:6379> mget desk pan
127.0.0.1:6379> strlen desk
(integer) 3
127.0.0.1:6379> append desk -desk
(integer) 8
127.0.0.1:6379> get desk
"red-desk"
127.0.0.1:6379>

扩展:

127.0.0.1:6379> incr desk-height【默认初始为1】
(integer) 1
127.0.0.1:6379> get desk-height
"1"
127.0.0.1:6379> incrby desk-height 30
(integer) 31
127.0.0.1:6379> incrbyfloat desk-height 2.1
"33.100000000000001"
没有递减的浮点数
127.0.0.1:6379> decr desk-weight
(integer) -1

127.0.0.1:6379> decr desk-weight 20

定制数据的有效时间

127.0.0.1:6379> setex death-time 59 death
OK
127.0.0.1:6379> ttl death-time
(integer) 30
127.0.0.1:6379> get death-time
"death"
127.0.0.1:6379> psetex li 50000 time
OK
127.0.0.1:6379> get li
"time"
127.0.0.1:6379> ttl li
(integer) 40

 hash

 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
 需要的存储结构:一个存储空间保存多个键值对数据
 hash类型:底层使用哈希表结构实现数据存储

  hash存储结构优化
     如果field数量较少,存储结构优化为类数组结构
     如果field数量较多,存储结构使用HashMap结构

应用

基础:设置,获取,删除
127.0.0.1:6379> hset man field short-hair
(integer) 1
127.0.0.1:6379> hset man field2 blue-eye
(integer) 1
127.0.0.1:6379> hgetall man
1) "field"
2) "short-hair"
3) "field2"
4) "blue-eye"
127.0.0.1:6379> hdel man field2
(integer) 1
127.0.0.1:6379> hgetall man
1) "field"
2) "short-hair"
127.0.0.1:6379> 
批量使用:

  hexists key field【存在】
  hmset key field1 value1 field2 value2 【设置】
  hmget key field1 field2【获取】
  hlen key【总长度】

hash 类型应用场景

电商网站购物车设计与实现
  增加:hincrby            设置:hset
  商品id:field             用户id:key
  删除:hdel              总量:hlen
  全选:hgetall             数量:value
  总量:hlen              数量:value
  商品id:field             取值:hget
  
业务分析
 仅分析购物车的redis存储模型
  添加、浏览、更改数量、删除、清空
 购物车于数据库间持久化同步
 购物车于订单间关系
  提交购物车:读取数据生成订单
  商家临时价格调整:隶属于订单级别
 未登录用户购物车信息存储
  cookie存储

list

 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
 list类型:保存多个数据,底层使用双向链表存储结构实现

基本使用:

127.0.0.1:6379> lpush tup 1 2 3
(integer) 3
127.0.0.1:6379> rpush tup 4 5
(integer) 5
127.0.0.1:6379> lrange tup 1 3
1) "2"
2) "1"
3) "4"
127.0.0.1:6379> lrange tup 0 4
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"

当然还有获取索引位置和长度获取

扩展:

规定时间内获取并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout

 

set

 新的存储需求:存储大量的数据,在查询方面提供更高的效率
 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
 set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

基本使用:

127.0.0.1:6379> sadd num [2 2 4]
(integer) 3
127.0.0.1:6379> smembers num【可以看出来,存储的数据类型不单一,但是以空格作为界定是很明显的】
1) "4]"
2) "[2"
3) "2"
127.0.0.1:6379> srem num 4
(integer) 0
127.0.0.1:6379> srem num 2
(integer) 1
127.0.0.1:6379> smembers num
1) "4]"
2) "[2"

127.0.0.1:6379> sadd num 1 2 4
(integer) 3
127.0.0.1:6379> smembers num
1) "2"
2) "1"
3) "4]"
4) "[2"
5) "4"
127.0.0.1:6379> scard num
(integer) 5
127.0.0.1:6379> sismember num 1
(integer) 1
127.0.0.1:6379>

交并差集的实现:

sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]


set 类型应用场景
公司对旗下新的网站做推广,统计网站的PV(访问量),UV(独立访客),IP(独立IP)。
PV:网站被访问次数,可通过刷新页面提高访问量
UV:网站被不同用户访问的次数,可通过cookie统计访问量,相同用户切换IP地址,UV不变
IP:网站被不同IP地址访问的总次数,可通过IP地址统计访问量,相同IP不同用户访问,IP不变

 

sorted_set

 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
 需要的存储结构:新的存储模型,可以保存可排序的数据
 sorted_set类型:在set的存储结构基础上添加可排序字段

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

redis 127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
原文地址:https://www.cnblogs.com/topass123/p/13063226.html