Redis基础版

redis

文章目录

进阶ppt可以私信

1.基础操作

1.信息添加
-set key value
-set name chan
2.信息查询
-get key
-get name
3.清除屏幕信息

清除屏幕中的信息

clear
4.退出客户端命令行模式

退出客户端

quit
exit
<ESC>

2.数据类型

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

1.string
1.添加/修改数据
set key value
setnx key value //key存在返回0
2.获取数据
get key
3.删除数据
del key
4.添加/修改多个数据
mset key1 value1 key2 value2...
5.获取多个数据
mget key1 key2
6.获取数据字符个数(字符串长度)
strlen key
7.追加信息到原始信息后部

如果原始信息存在就追加,否则新建,追加 value 之后, 键 key 的值的长度

append key value
8.设置数值数据增加指定范围的值
incr key //key++
incrby key increment //key += increment
incrbyfloat key increment //加小数
9.设置数值数据减少指定范围的值
decr key //key--	
decrby key increment //key -= increment
10.设置数据具有制定的生命周期
setex key seconds value
psetex key milliseconds value //value不重要
11.数据库中的热点数据key命名管理
      表名   :主键名 : 主键值   : 字段名
eg1:  order :  id  : 294123  :  name
eg2:  equip :  id  : 294123  :  type
eg3:   news :  id  : 294123  :  title
2.hash

-hash类型下的value只能存储字符串

-每个hash可以存储2^32-1个键值对

1.添加/修改数据
-hset key field value
-hset user name chan
-hset user age 20

hmset key field1 value1 field2 value2

hsetnx key field value //如果field有数据,返回0不修改数据,否则添加数据
2.获取数据
hget key field
hgetall key
hmget key field1 field2
3.删除数据
hdel key field1 [field2]
4.获取哈希表中字段的数量
hlen key //field数量
5.获取哈希表中是否存在指定的字段
hexists key field
6.获取哈希表中所有的字段名或字段值
hkeys key //所有field
hvals key //所有field的值
7.设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
8.hash 类型应用场景

解决方案

  • 以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息
  • 将商品编号作为field,购买数量作为value进行存储
  • 添加商品:追加全新的field与value
  • 浏览:遍历hash
  • 更改数量:自增/自减,设置value值
  • 删除商品:删除field
  • 清空:删除key

此处仅讨论购物车中的模型设计

购物车与数据库间持久化同步、购物车与订单间关系、未登录用户购物车信息存储不进行讨论

3.list
  • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分

  • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序

  • list类型:保存多个数据,底层使用双向链表存储结构实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0UCZdS7-1603976526834)(C:\Users\Administrator\Desktop\images\1595683534(1)].png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BnJEl70-1603976526840)(C:\Users\Administrator\Desktop\images\1595683877(1)].png)

1.添加/修改数据
lpush key value1 [value2] ……  //左插
rpush key value1 [value2] ……  //右插
2.获取数据
lrange key start stop 
lindex key index 
llen key  //长度 
3.获取并移除数据
lpop key
rpop key
4.规定时间内获取并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout
//元素从 source 中弹出来,并压入 destination 中。 如果达到 timeout 时限,会返回一个空的多批量回复(nil-reply)
5.移除制定数据
lrem key count value
4.set
  • 新的存储需求:存储大量的数据,在查询方面提供更高的效率

  • 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询

  • set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

  • set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份()

1.添加数据
sadd key member1 [member2]
2.获取全部数据
smembers key
3.删除数据
srem key member1 [member2]
4.获取集合数据总量
scard key
5.判断集合中是否包含指定数据
sismember key member
6.随机获取集合中指定数量的数据
srandmember key [count]
7.随机获取集合中的某个数据并将该数据移出集合
spop key [count]
8.求两个集合的交、并、差集
sinter key1 [key2] //交
sunion key1 [key2] //并
sdiff key1 [key2]  //差
9.求两个集合的交、并、差集并存储到指定集合中
sinterstore destination key1 [key2] 
sunionstore destination key1 [key2] 
sdiffstore destination key1 [key2]
10.将指定数据从原始集合中移动到目标集合中
smove source dest ination member
5.sorted_set
  • 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式

  • 需要的存储结构:新的存储模型,可以保存可排序的数据

  • sorted_set类型:在set的存储结构基础上添加可排序字段

1.添加数据
zadd key score1 member1 [score2 member2] 
2.获取全部数据
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
3.删除数据
zrem key member [member ...]
4.按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT] //递增
zrevrangebyscore key max min [WITHSCORES] //递减
5.条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max

注意:

  • min与max用于限定搜索查询的条件

  • start与stop用于限定查询范围,作用于索引,表示开始和结束索引

  • offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量

6.获取集合数据总量
zcard key
zcount key min max
7.集合交、并操作
zinterstore destination numkeys key [key ...]   //相同member的score会相加
zunionstore destination numkeys key [key ...]
//numkeys为key的数量
8.获取数据对应的索引(排名)
zrank key member
zrevrank key member
9.score值获取与修改
zscore key member
zincrby key increment member
3.key通用操作
1.删除指定key
del key
2.key是否存在
exists key
3.获取key的类型
type key
4.为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
5.获取key的有效时间
ttl key
pttl key
6.切换key从时效性转换为永久性
persist key
7.查询key
keys pattern

查询模式规则

*匹配任意数量的任意符号 ? 配合一个任意符号 [] 匹配一个指定符号

keys * 查询所有

keys it* 查询所有以it开头

keys *heima 查询所有以heima结尾

keys ??heima 查询所有前面两个字符任意,后面以heima结尾

keys user:? 查询所有以user:开头,最后一个字符任意

keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t

8.为key改名
rename key newkey
renamenx key newkey
9.对所有key排序
sort
4.db操作
1.切换数据库
select index //0(默认)-15

2.数据清除

dbsize
flushdb
flushall
5.Jedis
1.Idea连接
-连接redis
Jedis jedis = new Jedis("localhost", 6379);
-操作redis
jedis.set("name", "itheima");
jedis.get("name");
-关闭redis连接
jedis.close();

案例:

1. 设定业务方法

void business(String id,long num){
 System.out.println("用户"+id+"发起业务调用,当前第"+num+"次");
}

2. 设定多线类,模拟用户调用

public void run(){
 while(true){
 	jd.service(id);
 	//模拟调用间隔,设定为1.x秒
        try{
         	Random r = new Random();
        	 Thread.sleep(1000+ r.nextInt(200));
        }catch (InterruptedException e){
        	e.printStackTrace();;
 		}
 	} 
 } 

3. 设计redis控制方案

void service(String id){
     Jedis jedis = new Jedis("localhost", 6379);
     String value = jedis.get("compid:" + id);
     //判定是否具有调用计数控制,利用异常进行控制处理
     if(value == null) {
     //没有控制,创建控制计数器
     jedis.setex("compid:" + id, 20, ""+(Long.MAX_VALUE-10));
     }else{
     //有控制,自增,并调用业务
     try{
     Long val = jedis.incr("compid:"+id);
     business(id,10+val-Long.MAX_VALUE);
     }catch (JedisDataException e){
     //调用次数溢出,弹出提示
     System.out.println("用户:"+id+"使用次数已达到上限,请稍后再试,或升级VIP会员");
     return;
     }finally{
     jedis.close();
     }
  } 
}

4. 设计启动主程序

public static void main(String[] args) {
     MyThread t1 = new MyThread("初级用户");
     t1.start();
}
2.基于连接池获取连接

JedisPool:Jedis提供的连接池技术

poolConfig:连接池配置对象

host:redis服务地址

port:redis服务端口号

1.jedis.properties
jedis.host=localhost
jedis.port=6379
jedis.maxTotal=30
jedis.maxIdle=10
2.静态代码块初始化资源
static{
     //读取配置文件 获得参数值
     ResourceBundle rb = ResourceBundle.getBundle("jedis");
     host = rb.getString("jedis.host");
     port = Integer.parseInt(rb.getString("jedis.port"));
     maxTotal = Integer.parseInt(rb.getString("jedis.maxTotal"));
     maxIdle = Integer.parseInt(rb.getString("jedis.maxIdle"));
     poolConfig = new JedisPoolConfig();
     poolConfig.setMaxTotal(maxTotal);
     poolConfig.setMaxIdle(maxIdle);
     jedisPool = new JedisPool(poolConfig,host,port);
}
3.对外访问接口,提供jedis连接对象,连接从连接池获取
public static Jedis getJedis(){
     Jedis jedis = jedisPool.getResource();
     return jedis;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值