redis学习笔记(二)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: redis学习笔记(二)

redis数据类型

redis可以理解成一个全局的大字典,key就是数据的唯一标识符。根据key对应的值不同,可以划分成5个基本数据类型。
redis = {
    "name":"yuan",
    "scors":["100","89","78"],
    "info":{
        "name":"rain"
        "age":22
    },
    "s":{item1,itme2,..}
}
1. string类型:
  字符串类型,是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,也就是byte类型。
  单个数据的最大容量是512M。
    key: 值
2. hash类型:
  哈希类型,用于存储对象/字典,对象/字典的结构为键值对。key、域、值的类型都为string。域在同一个hash中是唯一的。
    key:{
            域(属性): 值,
            域:值,            
            域:值,
            域:值,
            ...
    }
3. list类型:
  列表类型,它的子成员类型为string。
    key: [值1,值2, 值3.....]
4. set类型:
  无序集合,它的子成员类型为string类型,元素唯一不重复,没有修改操作。
    key: {值1, 值4, 值3, ...., 值5}
5. zset类型(sortedSet):
  有序集合,它的子成员值的类型为string类型,元素唯一不重复,没有修改操作。权重值(score,分数)从小到大排列。
    key: {
      值1 权重值1(数字);
      值2 权重值2;
      值3 权重值3;
      值4 权重值4;
    }

string(字符串)

  • SET/SETEX/MSET/MSETNX
  • GET/MGET
  • GETSET
  • INCR/DECR
  • DEL

1. 设置键值

set 设置的数据没有额外操作时,是不会过期的。

set key value

设置键为name值为yuan的数据

set name yuan
set name rain # 一个变量可以设置多次
127.0.0.1:6379>set name yuan
OK
127.0.0.1:6379>get name 
"yuan"
127.0.0.1:6379>

注意:redis中的所有数据操作,如果设置的键不存在则为添加,如果设置的键已经存在则修改。

设置一个键,当键不存在时才能设置成功,用于一个变量只能被设置一次的情况。

setnx  key  value

一般用于给数据加锁(分布式锁)

127.0.0.1:6379> setnx goods_1 101
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 0  # 表示设置不成功
127.0.0.1:6379> del goods_1
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 1

2. 设置键值的过期时间

redis中可以对一切的数据进行设置有效期。以秒为单位

setex key seconds value

设置键为goods_1值为101过期时间为10秒的数据

setex name goods_1 10

3. 关于设置保存数据的有效期

setex 添加保存数据到redis,同时设置有效期,格式:

setex key time value
127.0.0.1:6379>setex name 5 rain
OK
127.0.0.1:6379>get name 
"rain"
127.0.0.1:6379>get name 
(nil)

4. 设置多个键值

mset key1 value1 key2 value2 ...

例3:设置键为a1值为goland、键为a2值为java、键为a3值为c

mset a1 goland a2 java a3 c

5. 字符串拼接值

常见于大文件上传

append key value

向键为a1中拼接值haha

set title "我的"
append title "redis"
append title "学习之路"

6. 根据键获取值

根据键获取值,如果不存在此键则返回nil

get key

获取键name的值

get name

根据多个键获取多个值

mget key1 key2 ...

获取键a1、a2、a3的值

mget a1 a2 a3

getset:设置key的新值,返回旧值

redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)
redis> GET db
"mongodb"
redis> GETSET db redis      # 返回旧值 mongodb
"mongodb"
redis> GET db
"redis"

7. 自增自减

web开发中的电商抢购、秒杀。游戏里面的投票、攻击计数。系统中计算当前在线人数、

set id 1
incr id   # 相当于id+1
get id    # 2
incr id   # 相当于id+1
get id    # 3
set goods_id_1 10
decr goods_id_1  # 相当于 id-1
get goods_id_1    # "9"
decr goods_id_1   # 相当于id-1
get goods_id_1    # 8
 set age 22
 incrby age 2 # 自增自减大于1的值时候用incrby

8. 获取字符串的长度

set name xiaoming
strlen name  # 8

9. 比特流操作

————————

mykey 00000011

1字节=8比特 1kb = 1024字节 1mb = 1024kb 1gb = 1024mb

1个int8就是一个字节,一个中文:3个字节

SETBIT     # SETBIT key offset value 按从左到右的偏移量设置一个bit数据的值 
GETBIT     # 获取一个bit数据的值
BITCOUNT   # 统计字符串被设置为1的bit数.
BITPOS     # 返回字符串里面第一个被设置为1或者0的bit位。

案例1:

SETBIT mykey 7 1
# 00000001
getbit mykey 7
# 00000001
SETBIT mykey 4 1
# 00001001
SETBIT mykey 15 1
# 0000100100000001

我们知道 ‘a’ 的ASCII码是 97。转换为二进制是:01100001。offset的学名叫做“偏移” 。二进制中的每一位就是offset值啦,比如在这里 offset 0 等于 ‘0’ ,offset 1等于 ‘1’ ,offset 2 等于 ‘1’,offset 6 等于 ‘0’ ,没错,offset是从左往右计数的,也就是从高位往低位

我们通过SETBIT 命令将 andy中的 ‘a’ 变成 ‘b’ 应该怎么变呢?

也就是将 01100001 变成 01100010 (b的ASCII码是98),这个很简单啦,也就是将’a’中的offset 6从0变成1,将offset 7 从1变成0 。

案例2:签到系统

setbit user_1 6 1
setbit user_1 5 1
setbit user_1 4 0
setbit user_1 3 1
setbit user_1 2 0
setbit user_1 1 1
setbit user_1 0 1
BITCOUNT user_1 # 统计一周的打卡情况


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
存储 缓存 NoSQL
|
4月前
|
缓存 负载均衡 NoSQL
这样学Redis,才能技高一筹
【7月更文挑战第18天】
53 3
|
5月前
|
SQL NoSQL Redis
|
NoSQL Redis
06Redis - Redis的使用
06Redis - Redis的使用
58 0
|
存储 NoSQL Linux
Redis之Redis为什么这么快解读
Redis之Redis为什么这么快解读
|
消息中间件 缓存 NoSQL
### 1.2 使用Redis能做什么
### 1.2 使用Redis能做什么
39 0
|
存储 缓存 NoSQL
|
NoSQL Java Redis
Redis4
Redis4
42 0
|
存储 NoSQL Redis
Redis 为什么这么快?
Redis 为什么这么快?
128 0
Redis 为什么这么快?
|
存储 SQL 缓存
Redis(四)初识Redis
Redis是一个非关系型远程内存数据库,由于操作都在内存中,所以Redis的速度非常快,性能十分强劲。 它可以存储键和5种不同类型的值之间的映射。可以帮助用户解决各式各样的问题,直接将数据自然的映射到这5种数据结构。 通过复制、持久化和客户端分片功能,可以将Redis拓展成为一个包含数百GB的数据库,除非非常高的并发量。
149 0
Redis(四)初识Redis