Redis学习笔记

启动Redis服务

通过指定的配置文件启动服务

redis-server kconfig/redis.conf

在这里插入图片描述

通过Redis客户端进行连接

redis-cli -p 6379

简单测试

在这里插入图片描述

查看redis的进程是否开启

ps -ef|grep redis

在这里插入图片描述
在这里插入图片描述

关闭服务

shutdown

在这里插入图片描述
再次查看进程 关闭成功
在这里插入图片描述

数据类型

String字符串

127.0.0.1:6379> flushdb //清空
OK
127.0.0.1:6379> keys *  //查看所有
(empty array)
127.0.0.1:6379> set key1 v1  //设置
OK
127.0.0.1:6379> get key1  //获取
"v1"
127.0.0.1:6379> keys *   //查看所有
1) "key1"
127.0.0.1:6379> exists key1   //判断某一个键是否存在
(integer) 1
127.0.0.1:6379> exists key2   //不存在返回0
(integer) 0
127.0.0.1:6379> append key1 "hello"  //追加字符串
(integer) 7
127.0.0.1:6379> get key1  
"v1hello" 
127.0.0.1:6379> strlen key1   //求长度
(integer) 7
127.0.0.1:6379> append key2 "zhangsan"  //追加字符串,如果键不存在,相当于 set key
(integer) 8
127.0.0.1:6379> get key2  //获取
"zhangsan"
127.0.0.1:6379> 

自增 自减
incr decr

127.0.0.1:6379> set views 0   //设置浏览量为0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views   //自增1
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views   //自减1
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
127.0.0.1:6379> incrby views 10  //自增10
(integer) 9
127.0.0.1:6379> incrby views 10
(integer) 19
127.0.0.1:6379> get views
"19"
127.0.0.1:6379> decrby view 5   //敲错了 应该是views
(integer) -5
127.0.0.1:6379> get views
"19"
127.0.0.1:6379> decrby views 5	//自减10
(integer) 14
127.0.0.1:6379> get views
"14"
127.0.0.1:6379> get view
"-5"
127.0.0.1:6379> 

截取 替换字符串

127.0.0.1:6379> set key1 "hello, dhco"
OK
127.0.0.1:6379> get key1
"hello, dhco"
127.0.0.1:6379> getrange key1 0 3   //截取字符串[0,3]
"hell"
127.0.0.1:6379> getrange key1 0 -1
"hello, dhco"
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> setrange key2 1 xx  //替换从下标开始的字符串
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
127.0.0.1:6379> 

setex(set with expire) 设置过期时间
setnx (set if not exist) 不存在再设置(在分布式锁中会常常使用!)

127.0.0.1:6379> setex key3 30 "hello" 设置过期时间30s
OK
127.0.0.1:6379> ttl key3	查看过期时间 还有25s过期
(integer) 25
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> set nx mykey "redis"  
(error) ERR syntax error
127.0.0.1:6379> setnx mykey "redis"  //不存在这个键再设置
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "key2"
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> setnx mykey "mongoDB" 这个键已经存在,返回0表示设置失败
(integer) 0
127.0.0.1:6379> get mykey  //mykey没变 还是第一次设置的redis
"redis"
127.0.0.1:6379> 

mset
mget

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 //同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3   //同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4	//msetnx是一个原子性的操作,要么一起成功 要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> 
127.0.0.1:6379> set user:1:name zhangsan user:1:age 2
(error) ERR syntax error
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"

//getset 先get然后再set
127.0.0.1:6379> getset db redis  //如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb  //如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379> 

String里面的value除了字符串还可以是数字
使用场景:
计数器(incr decr)
统计多单位的数量
粉丝数
对象缓存存储!

List列表

在redis里,可以把list根据需要来实现队列,栈等数据结构
所有的list命令是以l开头的

127.0.0.1:6379> lpush list one
//将一个值或者多个值,插入到列表头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
//获取list中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
//通过区间获取具体的值
1) "three"
2) "two"
127.0.0.1:6379> rpush list right
//将一个值或者多个值,插入到列表尾部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> 

LPOP
RPOP

127.0.0.1:6379> lpop list
//移除list的第一个元素
"three"
127.0.0.1:6379> rpop list
//移除list的最后一个元素
"two"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
4) "one"
127.0.0.1:6379> lindex list 1
//通过下标获取list中的某一个值
"one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lpush list one
(integer) 5
127.0.0.1:6379> llen list
//获取列表长度
(integer) 5
127.0.0.1:6379> 
lrem list 1 one 
//移除list集合中指定个数的value,精确匹配
lrem list 2 three
ltrim list 1 2
//通过下标截取指定的长度
//这个List已经被改变了,截断了只剩下截取的元素

小结:它实际上是一个链表。如果key不存在,创建新的链表;如果key存在,新增内容;如果移除了所有值,空链表,也代表不存在;
在两边插入或者改动值,效率最高,中间元素,相对来说效率会低一点。

Set集合

Set集合中的元素是不能重复的。

127.0.0.1:6379> sadd myset "hello"
//向set集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset "hello1"
(integer) 1
127.0.0.1:6379> sadd myset "hello1"
(integer) 0
127.0.0.1:6379> smembers myset
//查看指定set的所有值
1) "hello"
2) "hello1"
127.0.0.1:6379> sismember myset hello
//判断某一个值是不是在set集合中
//返回1说明在
(integer) 1
127.0.0.1:6379> sismember myset hello2
//返回0说明不再
(integer) 0
127.0.0.1:6379> scard myset
//获取set集合中的内容元素个数
(integer) 2
127.0.0.1:6379> 

应用场景:
微博,A用户将所有关注的人放在一个set集合中,将它的粉丝也放在一个集合中!

Hash哈希

Map集合
本质和String类型没有太大区别。

127.0.0.1:6379> hset myhash field1 cpw
(integer) 1
127.0.0.1:6379> hget muhash field1
(nil)
127.0.0.1:6379> hget myhash field1
"cpw"
127.0.0.1:6379> hmset myhash field1 hello field2 world
OK
127.0.0.1:6379> hmget myhash field1 field2
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash
//获取全部的数据
1) "field1"
2) "hello"
3) "field2"
4) "world"
127.0.0.1:6379> 
127.0.0.1:6379> hdel myhash field1
//删除hash指定key字段~对应的value值也就消失了
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"
127.0.0.1:6379> 
127.0.0.1:6379> hlen myhash
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "field2"
127.0.0.1:6379> hvals myhash
1) "world"
127.0.0.1:6379> 

hash更适合于对象的存储,经常需要变更的数据。我觉得是因为hash比string更快。

String更适合字符串存储

Zset(有序集合)

127.0.0.1:6379> zadd myset 1 one
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three
(integer) 2
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zadd salary 2500 c
(integer) 1
127.0.0.1:6379> zadd salary 5000 p
(integer) 1
127.0.0.1:6379> zadd salary 500 w
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf
1) "w"
2) "c"
3) "p"
127.0.0.1:6379> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值