Redis基础操作

一、什么是Redis

远程字典服务器, Remote dictionary server,⼀个开源的基于内存的数据库,常⽤作键值存储、缓存和消息队列等。Redis通常将全部数据存储在内存中,也可以不时的将数据写⼊硬盘实现持久化,但仅⽤于重新启动后将数据加载回内存。

二、启动Redis服务和Redis客户端链接

1、启动Redis服务代码

redis-server.exe redis.windows.conf

2、打开Redis客户端链接的代码

redis-cli.exe -h 127.0.0.1 -p 6379

3、通过shutdown命令来关闭redis服务

三、Redis操作

在这里插入图片描述

1、基本操作

(1) 数据库操作

redis默认有16个数据库,编号为0~15,且默认访问0号数据库。

select 数据库编号选择指定数据库
dbsize获取当前数据键值对数量
flushdb清空当前数据库
flushall清空所有数据库
save将数据库保存至磁盘
bgsave

将数据库异步保存至磁盘(后台:Background)

*默认每两秒自动执行一次

lastsave获取最后一次成功保存的unix秒

(2)通用数据操作

keys格式查看符合指定格式的key, * 为通配符
exists key1[key2 ...]查看是否存在一至多个指定的key
type key按key查看value的数据类型
del key1[key2 ...]按key删除一至多个键值对
rename key1 key2重命名key1,如果key2已经存在,其值会被覆盖
renamenx key1 key2key2不存在时重命名key1
move key 数据库编号按key将一个键值对移动到指定数据库
copy key1 key2将key1的值拷贝给key2
get key打开db库
get key获取指定 key 的值
set key value设置指定 key 的值(新增)
del key设置指定 key 的值(新增)
keys *显示所有key值

2、字符串String操作

key-value 结构,value 除了字符串还可以是数字(整型、浮点型)

应用场景:

  • 普通的赋值
  • 使用incr、decr命令进行递增和递减统计数据。用于实现乐观锁watch(事物)
  • setNx实现分布式锁

底层数据类型:

// 数据结构
struct sdshdr{
    //记录buf数组中已使用字节的数量
    int len;
    //记录 buf 数组中未使用字节的数量
    int free;
    //字符数组,用于保存字符串
    char buf[];
}
  • int:当存储为int类型的整数时
  • embstr:编码简单的动态字符串。单字符串长度小于44个字节时
  • raw:简单的动态字符串,大字符串,当长度大于44个字节时
set key value #设置key value
setex key n value #设置 key 和 value 并设置过期时间, n 代表设置的时间(秒)
set key value ex n #设置 key 和 value 并设置过期时间, n 代表设置的时间(秒)
set key value px n #设置 key 和 value 并设置过期时间, n 代表设置的时间(毫秒)
setrange key 0 value #替换某个key 指定位置开始的字符串
setnx key value #判断这个值是否存在,如果存在则不设置值,如果不存在则设置值
mset key value key value key value #设置多个 key value
mget key key key #获取多个 key 的值
msetnx key value name value #设置多个值,如果存在就创建,不存在就不创建,这是原子性操作,要么全部成功要么全部失败

exists key #判断某个 key 是否存在
move key value(目标数据库) #移除当前 key 到某个数据库中
expire key value(时间:单位为S) #设置 key 个值得过期时间
ttl key #查看某个 key 的过期时间
type key #查看这个 key 的类型
append key value #追加某个 key 的值,如果这个 key 不存在,就相当于 set key
strlen key #获取字符串的长度
incr key #当前 key 自增1
decr key #当前 key 自减1
incrby key 10 #当前 key 增加多少
decrby key 5 #当前 key 减少多少
del key #删除某个key
getrange key 0 3 #获取这个 key 从某个下标到某个下标的值
getrange key 0 -1 #获取这个 key 所有的值等同于 get name

set user:1 {name:value,age:value} #设置 JSON 值
mset user:1:key zhangsan user:1:age 13 #设置 JSON 值(需要注意的是 Windows 系统的 Redis 不支持这样操作)
getset key value #先get再set

3、List操作

list可用于来存储有序的可重复的数据,可快速获取头尾数据,最多存储2^{32}-1个元素。

应用场景:

  • 可以用于实现堆栈
  • 可用于阻塞队列
  • 可用于各种列表,比如用户列表、商品列表、评论列表等。
lpush list value #往一个集合里面进行插值(尾部)
lrange list 0 -1 #获取这个集合所有的值
lrange list 0 2 #获取这个集合0 - 2之间的值
rpush list value #往一个集合里面进行插值(头部)
lpop list #移除列表尾部的值
rpop list #移除列表头部的值
lindex list 1 #根据下标获取list中的值
llen list #获取列表的长度
lrem list 1 value #移除list中指定的值
ltrim list 1 3 #通过下标截取list指定的长度,只保留截取的,剩下的删除

4、Set操作

Set是无序不重复集合

底层数据结构:

  • intset:当存储的类型为整数并且元素的个数小于set-max-intset-entries的时候使用intset存储数据,intset使用的是一个数组来存储数据
  • dict字典:当存储的数据不是int类型,或者数据的量超过了set-max-intset-entries则使用字典来存储,字典的key就为数据的值,value等于null。

应用场景:

  用于保存不能重复且不需要排序的数据,比如关注的用户信息
使用spop返回集合中一个随机元素,并将其删除、srandmember返回集合中一个随机元素并不删除。这两个命令来实现随机抽奖功能

sadd name value #设置Set集合值
smembers name #读取某个Set的值
sismember name value #判断某个值是否在Set集合中
scard name #获取Set集合中的值个数
srem name value #移除Set集合中的某个数据
srandmember name #从Set集合中随机抽选一个值
spop name #从Set集合中随机删除元素
smove name name2 value #从Set集合中将某个数据移动到另一个Set集合中去
sdiff name name2 #获取两个集合的差集
sinter name name2 #获取两个集合的交集
sunion name name2 #获取两个集合的并集

5、Hash

 Redis hash 是一个 string 类型的 field 和 value 的映射表,它提供了字段和字段值的映射。

底层数据结构:

  • ziplist:当散列表元素的个数比较少,且元素都是小整数或短字符串时。
  • dict:当散列表元素的个数比较多或元素不是小整数或短字符串时。

应用场景:

  • 对象的存储
hset name key value #设置Hash的值
hget name key #获取Hash的值
hmset name key1 value1 key2 value2 #设置多个值
hgetall name #获取Hash中所有的值,以key-value展示
hdel name key #删除Hash中指定的key-value
hlen name #获取Hash中的Key数量
hexists name key #判断Hash中是否存在该Key
hkeys name #获取Hash中所有Key
hvals name #获取Hash中所有value
hincrby name key 1 #使Hash中的某个Key的值自增某个值
hsetnx name key value #判断Hash中是否存在该Key如果不存在则设置,存在则不设置

6、Zset

有序集合,应用于工资表排序,成绩表排序、排行榜、Top N。

sortset有序集合类型

  存储有序的并且不重复的数据。sortset中的元素都会关联一个score分数并按照分数排序,分数可重复。

底层数据结构:

  • ziplist:当数据量较少且元素都是小整数或者短字符串时
  • skiplist:跳跃表

应用场景:

实现排行榜的功能

zadd name 1 value #设置zset的值,1 表示的是优先级
zadd name 1 value 2 value #设置多个zset的值
zrange name 0 -1 #获取这个zset中的所有值
zrangebyscore name -value +value #排序一个集合,第一个value是最小数,如果   -inf 表示负无穷,+inf 表示正无穷,只显示Key,这是升序
zrangebyscore name -value +value withscore #排序集合并将Key和value显示,这是升序
zrevrange name 0 -1 #降序排列,只显示Key
zrem name key #删除zset集合中的Key和Value
zcard name #获取Zset集合中的个数
zcount name 1 2 #获取set集合中某个区间的值

7、Geospatial

GEO底层是由Zset进行实现的,所有可以使用Zset命令来操作;
地理位置、附近的人、打车距离位置计算;
redis的Geo在redis3.0推出的;

geoadd name 经度 维度 名称 #插入城市的经纬度和名称
geopos name key #获取该城市的经纬度 

geodist name key1 key2 km/m/mi/ft #获取两个位置直接的距离可以是千米、米、英里、英尺

#我附近的人,以给定的经纬度为中心,通过半径查询
georadius name 110(用户自己的经度) 30(用户自己的维度) 1000 km #半径寻找
georadius china:city 110 30 500 km withdist #显示中间的距离
georadius china:city 110 30 500 km withcoord #显示他人的经纬度
georadius china:city 110 30 500 km withdist count 2 #只显示2人

georadiusbymember name key 1000 km #以该元素为中心寻找1000KM内的对象

geohash name key key #将二维的经纬度转换为一维的字符串(11位的字符串),如果两个字符串越接近,那么则距离越近

8、Hyperloglog

数据不能重复;
Reids2.8.9版本推出的;
是用于做基数统计的算法;
优点:占用的内存是固定的;
会有一个0.81%的错误率;

如果允许容错,一定使用Hyperloglog;

pfadd name value value value value value #存储Hyper数据
pfcount name #查看该Hyper的长度
pfmerge name1 name2 name3 #将name2和name3中的数据复制到name1中(不可重复)

9、Bitmap

使用位存储(0 1 0 1 0 1)。通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。bitmap的数据主要是key、偏移量offset、值,其中值只能是0和1。极大的节省的内存空间

应用场景:

  • 记录员工的打卡记录:key为日期,偏移量是用户id,值为0表示未打卡,1表示已打卡。或者key为用户id,偏移量为日期,值为0表示未打卡,1表示已打卡。
  • 统计用户信息:登陆、未登录,活跃、不活跃;(两个状态)
setbit name 3 1 #插入值,第一个数字代表位置,第二个数字代表状态
getbit name 3 #查询值,3代表的是位置
bitcount name #统计1的数字有几个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: Redis数据库是一个内存数据库,通过key-value键值对的方式进行数据存储。它的优点包括访问速度快、适用于缓存系统和存储大量活跃数据,可以提高网站的响应速度。\[1\]在Java中,有两个比较出名的连接Redis的驱动包,分别是Jedis和Redisson,我们可以使用Jedis来进行程序操作Redis。\[3\]以下是一些基本的Redis操作方法: - 使用`new Jedis(host, port)`创建Jedis对象,其中host是Redis服务器地址,port是Redis服务端口。 - 使用`set(key, value)`方法设置字符串类型的数据。 - 使用`get(key)`方法获取字符串类型的数据。 - 使用`hset(key, field, value)`方法设置哈希类型的数据。 - 使用`hget(key, field)`方法获取哈希类型的数据。 - 使用`lpush(key, values)`方法设置列表类型的数据。 - 使用`lpop(key)`方法从列表左侧弹出元素。 - 使用`rpop(key)`方法从列表右侧弹出元素。 - 使用`del(key)`方法删除指定的key。\[3\] #### 引用[.reference_title] - *1* [redis的基本操作](https://blog.csdn.net/m0_50782114/article/details/128119748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Redis基本使用!](https://blog.csdn.net/weixin_50769390/article/details/127134134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金州饿霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值