[学习笔记] Redis数据库之Redis入门

# 学习 # · 2021-10-16

Redis概述

1、Redis(Remote Dictionary Server):远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存、可持久化的日执型、key-value数据库,并提供多种语言的API。

2、Redis特点:

  • a、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • b、Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储
  • c、Redis支持数据的备份,即master-slave模式的数据备份。

3、Redis的优势:

  • a、性能极高:读的速度是110000次/s,写的速度是81000次/s。
  • b、丰富的数据类型:支持二进制案例的Strings、Lists、Hashes、Sets、Ordered Sets数据类型操作。
  • c、原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • d、丰富的特性:Redis还支持publish/subscribe、通知、key过期等等特性。

Redis初体验

1、Windows安装Redis:

  • a、下载Redis:https://github.com/dmajkic/redis/releases
  • b、解压压缩包,运行Redis服务端redis-server.exe即可。
  • c、使用Redis客户端redis-cli.exe连接Redis。
  • # 测试连接
    ping

    2、Redis是单线程的:Redis基于内存操作,瓶颈是服务器内存和网络带宽。

    3、Redis默认有16个数据库,可以使用select进行数据库切换。

    # 切换数据库
    select 3

查看数据库大小

dbsize


4、数据库存取:


设置key-value

set name helloredis

根据key获取value

get name

查看当前数据库中所有key

keys *

清空当前数据库全部数据

flushdb

清空所有数据库全部数据

flushall


5、Redis-Key操作:

判断当前Key是否存在

exists key

移除当前Key到数据库1

move key 1

设置Key过期时间,单位为秒

expire key 10

查看当前Key剩余时间

ttl key

查看当前Key-Value的类型

type key


-----

##### Redis五大数据类型

1、String(字符串):

设置key1=v1

set key1 v1

根据key在对应value后面追加字符串,如果key不存在则相当于set key

append key "hello"

根据key获取字符串长度

strlen key1

初始浏览量为0

set views 0

自增+1

incr views

自减-1

decr views

指定步长自增

incrby views 10

指定步长自减

decrby views 10

截取字符串 [0,3]

getrange key1 0 3

获取全部字符串,等同于get key

getrange key1 0 -1

替换指定位置开始往后的字符串

setrange key1 1 xx

设置过期时间

setex key3 30 "30秒后过期"

设置key-value,如果不存在则设置,如果已存在则设置失败

setnx key2 "key2不存在,自动创建key2"
setnx key2 "key2已存在,创建失败"

同时设置多个key-value

msetnx:原子性操作,要么都成功要么都失败

mset k1 v1 k2 v2
msetnx k1 v1 k2 v2

同时获取多个key-value

mget k1 k2

设置对象:设置一个user:1对象,值为json字符

set user:1 {id:1,name:duozai}

使用mset设置对象:user:{id}:{filed}

mset user:1:id 1
mset user:1:name duozai

获取对象

mget user:1:id user:1:name

先get再set,如果值不存在则返回nil,如果值存在,先获取原来的值,再设置新的值

getset key value


2、List(列表):

将一个值或多个值插入列表头部(左边)

lpush list v1
lpush list v2

获取list中的值

lrange list 0 -1

通过区间获取list的值

lrange list 0 1

将一个或多个值插入列表尾部(右边)

roush list v3

移除list的第一个元素

lpop list

移除list的最后一个元素

rpop list

通过下标获得list的某一个值

lindex list 1

返回列表长度

llen list

移除list集合中指定个数的value

lrem list 1

通过下标截取指定长度

ltrim list 1 2

将列表的最后一个元素移动到新列表中

rpoplpush list1 list2

判断列表是否存在

exists list

将列表中指定下标的值替换,不存在则报错

lset list 1 new

将other插入到word元素的前面

linsert list before "word" "other"

将other插入到word元素的后面

linsert list after "word" "other"


3、Set(集合):

向集合中添加数据

sadd myset "hello"

查看指定set的所有值

smembers myset

获取set集合中内容元素个数

scard myset

移除set集合中指定元素

srem myset hello

随机抽取一个元素

srandmember myset

随机抽取指定个数的元素

srandmember myset 2

随机删除一些set集合中的元素

spop myset

将指定值移动到另一个set集合

smove myset newset "hello"

差集

sdiff set1 set2

交集

sinter set1 set2

并集

sinto key1 key2


4、Zset(有序集合):

添加一个值

zadd myset 1 zhangsan

添加多个值

zadd myset 2 lisi 3 wangwu

获取所有值

zrange myset 0 -1

获取所有值并设置排序,-inf负无穷 +inf正无穷

zrangebyscore key min max

移除集合中指定元素

zrem myset zhangsan

获取集合中的个数

zcard myset

获取指定区间的成员数量

zcount myset 1 3


5、Hash(哈希):

set一个具体的key-value

hset myhash field1 hello

设置值,如果存在则不能设置

hsetnx myhash field hello

获取一个字段值

hget myhash field1

set多个key-value

hmset myhash field1 value1 field2 value2

获取多个字段值

hmget myhash field1 field2

获取全部数据

hgetall myhash

获取hash表的字段数量

hlen myhash

判断hash中指定字段是否存在

hexists myhash field1

只获得所有field

hkeys myhash

只获得所有value

hvals myhash

指定增量

hset myhash field 5
hincrby myhash field 1


-----

##### Redis三大特殊数据类型

1、Geospatial:地理位置

getadd:添加地理位置

getadd china:city 121.47 31.23 shanghai

getpos:获取指定城市的经纬度

getpos china:city shanghai

geodist:计算两地之间的距离

getdist china:city fujian guangdong km

georadius:以给定的经纬度为中心,找出某一半径内的元素

以110 30为经纬度中心,寻找方圆1000km内的城市

getradius china:city 110 30 1000 km

显示到中间距离的位置

getradius china:city 110 30 1000 km withdist

显示他人的定位信息

getradius china:city 110 30 1000 km withcoord

georadiusbymember:找出位于指定元素周围的其他元素

georadiusbymember china:city shanghai 400 km

geohash:返回一个或多个位置元素的Geohash表示

即将二维码的经纬度转换成一维字符串

gethash china:city fujian guangdong

查看地图中的全部元素

zrange china:city 0 -1

移除地图中指定元素

zrem china:city shanghai


2、Hyperloglog:

创建第一组元素 mykey

pfadd mykey a b c d e f g h i j

统计mykey元素的基数数量

pfcount mykey

创建第二组元素 newkey

pfadd newkey i j b h m n s

合并两组数据

pfmerge resultkey mykey newkey

查看并集数量

pfcount resultkey


3、Bitmap:

记录打卡情况

setbit sign 1 0
setbit sign 2 1
setbit sign 3 1

查看某一天是否有打卡

getbit sign 2

统计所有完成打卡(值为1)记录数量

bitcount sign


-----

##### Redis事务

1、事务定义:Redis通过multi、 discard、exec、watch四个命令来实现事务功能。

- a、一个事务中的命令要么都执行,要么都不执行。

- b、事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。

- c、Redis事务没有隔离级别的概念,所有在事务中的命令只有发起执行命令的时候才会执行。

- d、Redis单条命令保持原子性,但事务不保证原子性。

2、开始事务:

- a、开启事务:让客户端从非事务状态切换到事务状态。

- ```shell
  # 开启事务
  multi
  • b、命令入队:当客户端进入事务状态之后,服务器在收到来自客户端的命令时,不会立即执行命令,而是将这些命令全部放进一个事务队列里,然后返回 QUEUED ,表示命令已入队。
  • # 命令入队
    set k1 v1
    set k2 v2
    get k1
  • c、执行事务:以先进先出的方式执行事务队列中的命令。
  • # 执行事务
    exec
  • d、取消事务:空客户端的整个事务队列, 然后将客户端从事务状态调整回非事务状态。
  • # 取消事务
    discard

    3、watch:用于在事务开始之前监视任意数量的键,当exec执行事务时,如果任意一个被监视的键已经被其他客户端修改,则整个事务不再执行,返回失败。

    # 监控k1
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/316/

评论