基础拾遗------redis详解

基础拾遗

基础拾遗------redis详解

基础拾遗------反射详解

基础拾遗------委托详解

基础拾遗------接口详解

基础拾遗------泛型详解

前言

  这篇文章和以往的基础拾遗有所不同,以前的介绍的都是c#基础,今天介绍的是redis。因为项目中一只在使用,我想现在大部分项目中都会用到nosql,缓存,今天就介绍一下redis.。废话少说下面开始正题。

1.redis是什么?

  Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库

对的redis就是一个存键值对的数据库,它不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。【我习惯于存简单的key-value(value都是写成需要数据结构的对象)】。

2.redis使用场景

  1.取最新N个数据的操作

  2.排行榜应用,取TOP N 操作

  3.需要精确设定过期时间的应用

  4.计数器应用

  由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的 效果,假如,在某种场景下有3个
客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站 都利用redis的这个特性来实现业务上的统计计数需求。

  5.Uniq操作,获取某段时间所有数据排重值

  6.实时系统,反垃圾系统

  7.Pub/Sub构建实时消息系统

  8.构建队列系统

  9.缓存

最多的是用做缓存。他的操作所读是mysql的10倍不止。SET操作每秒钟 110000 次,GET操作每秒钟 81000 次。

3.redis数据结构

上边已经说了redis是一种高级的key:value存储系统,其中value支持五种数据类型:

1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)

3.1.key

1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key最好使用统一的命名模式,例如power_loginname

3.2.字符串(strings)

strings类型是一个很基础的数据类型,也是任何存储系统都必备的数据类型.

操作如下:

set myredis ‘kmonkeywyl‘
get myredis

注:在遇到非字符串类型比如int,redis会默认转为string.

3.3.字符串列表(lists)

  redis中的lists在底层实现上并不是数组,而是链表.所以插入数据快,但定位性能操作较差。

lists的常用操作包括lpush、rpush、lpush,lrange等

操作如下:

//新建一个list叫做mylist,并在列表头部插入元素"1"
lpush mylist "1"
//在mylist右侧插入元素"2"
rpush mylist "2"
//在mylist左侧插入元素"0"
lpush mylist "0"
//列出mylist中从编号0到编号1的元素
lrange mylist 0 1
//列出mylist中从编号0到倒数第一个元素
lrange mylist 0 -1 

  注:上边应用场景1,2,8都用到lists就会很方便,具体应用场景(消息队列,分页,博客评论)

3.3.字符串集合(sets)

集合对于我们来说应该不陌生,就是我们初中学的那个集合,针对于集合有几个概念不知道你还熟悉不?取交集、取并集、取差,不熟悉的自己去熟悉去吧。

操作如下:

//向集合myset中加入新元素"wyl"
sadd myset "wyl"
(integer) 1
sadd myset "kmonkey"
(integer) 1
//列出集合myset中的所有元素
smembers myset
1) "wyl"
2) "kmonkey"
//判断元素1是否在集合myset中,返回1表示存在
sismember myset "wyl"
(integer) 1
//判断元素是否在集合myset中,返回0表示不存在
sismember myset "wangyanling"
(integer) 0
//新建一个新的集合yourset
sadd yourset "1"
(integer) 1
sadd yourset "2"
(integer) 1
smembers yourset
1) "1"
2) "2"
//对两个集合求并集
sunion myset yourset
1) "1"
2) "wyl"
3) "2"
4) "kmonkey"

3.4.有序字符串集合(sorted sets)

和上边的无须集合唯一的差别是有序的每个元素都有一个序号score,主要是便于排序

操作如下:

zadd myzset 1 baidu.com
(integer) 1
//向myzset中新增一个元素360.com,赋予它的序号是3
zadd myzset 3 360.com
(integer) 1
//向myzset中新增一个元素google.com,赋予它的序号是2
 zadd myzset 2 google.com
(integer) 1
//列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。
zrange myzset 0 -1 with scores
1) "baidu.com"
2) "1"
3) "google.com"
4) "2"
5) "360.com"
6) "3"
//只列出myzset的元素
 zrange myzset 0 -1
1) "baidu.com"
2) "google.com"
3) "360.com"

3.5.哈希(hashes)

这就和结构数据库类似了。我是不喜欢在redis中使用hashes的。

操作如下

//建立哈希,并赋值
HMSET user:001 username wylpassword 111 age 34
OK
//列出哈希的内容
127.0.0.1:6379> HGETALL user:001
1) "username"
2) "wyl"
3) "password"
4) "111"
5) "age"
6) "34"
//更改哈希中的某一个值
HSET user:001 password 12345
(integer) 0
//再次列出哈希的内容
127.0.0.1:6379> HGETALL user:001
1) "username"
2) "wyl"
3) "password"
4) "12345"
5) "age"
6) "34"

4.redis常用指令

4.1.键值相关命令

keys * 取出当前所有的key

exists key查看key是否存在

del key删除key

expire key 设置key过期

ttl key获取key的有效时长

select 0 选择到0数据库 redis默认的数据库是0~15一共16个数据库

move key1 将当前数据库中的key移动到其他的数据库中

persist key 移除key的过期时间

random key 随机返回数据库里面的一个key

rename key2 key3 重命名key2 为key3

type key2 返回key的数据类型

4.2.服务器相关命令

ping PONG返回响应是否连接成功

echo 在命令行打印一些内容

select 0~15 编号的数据库

quit  /exit 退出客户端

dbsize 返回当前数据库中所有key的数量

info 返回redis的相关信息

config get dir/* 实时传储收到的请求

flushdb 删除当前选择数据库中的所有key

flushall 删除所有数据库中的数据库

4.3.字符串类型的操作

  set key value 存在就修改,不存在就创建

  get key 取值

  mset key1 value1 key2 value2 一次设置多个值

  mget key1 key2 :一次获取多个值

简单就这些大家可进一步去网上搜,因为太多我就部在这写了。

5.c#实例

(1)首先是redis连接服务基类。

 public abstract class BaseRedis
    {
        private IRedisClient _client;
        private string _configuration_string;

        public BaseRedis()
        {
        }

        public BaseRedis(string configuration_string)
        {
            this._configuration_string = configuration_string;
        }

        public void set_configuration_string(string configuration_string)
        {
            this._configuration_string = configuration_string;
        }

        public IRedisClient rs
        {
            get
            {
                if (string.IsNullOrWhiteSpace(this._configuration_string))
                {
                    return null;
                }
                if (this._client == null)
                {
                    this._client = new RedisClient(this._configuration_string);
                }
                return this._client;
            }
        }
    }

(2)配置文件

  其中路径可以直接写服务器ip地址。我把他写成字符串,是为了开发环境和正是环境都不用修改程序,直接做ip映射就行了。

(3)连接redis服务器

 public class DbPerfmon : RedisHelper
    {
        public DbPerfmon()
            : base()
        {
            string myredis = ConfigurationManager.AppSettings["Redis_Server_Url_Perfmon"].ToString();
            set_configuration_string(myredis);
        }

(4)简单操作

  lock (sessionLocker)
            {
                if (string.IsNullOrEmpty(synKey) || user == null)
                    return string.Empty;
                SessionObject so = null;
                using (rs)
                {
//获取redis值
                    so = rs.Get<SessionObject>(synKey);
                    if (so != null)
                    {
                        so.ResetLastTime();
                        if (!so.IsEffective())
                        {
                            so.SignType = signType;
                            so.User = user;
                        }
                    }
                    else
                    {
                        so = new SessionObject(user, signType, synKey);
                    }
                }
                DateTime dt = DateTime.Now.AddMinutes(30);
//添加redis
                rs.Set<SessionObject>(synKey, so);
//设置有效时长
                rs.ExpireEntryAt(synKey, dt);
                return so.Id;
            }
时间: 2024-10-15 06:46:50

基础拾遗------redis详解的相关文章

基础拾遗------webservice详解

基础拾遗 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗------接口详解 基础拾遗------泛型详解 前言 工作当中常用的服务接口有三个wcf,webservice和webapi.首先第一个接触的就是webservice,今天大致总结一下. 1.webservice概念相关 1.1.Web Service也叫XML Web Service WebService 是一种可以接收从Inter

Redis详解:sorted sets数据类型及操作

sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序.可以理解为有两列的mysql表,一列存value,一列存顺序.操作中key理解为zset的名字. 系列文章: Redis详解:strings数据类型及操作 Redis详解:hashes数据类型及操作 Redis详解:lists数据类型及操作 Redis详解:sets数据类型及操作 和set一样sorted set也是string类

使用Python操作Redis详解

之前的五天,过了个愉快的周末,然后将公司AbaseDump的调度部分代码看懂并且在此之上完成了OnlyDump的功能代码,代码不可以公开,今天完工,明天测试,晚上来总结一下这几天学到的一点应用. 使用Python操作Redis详解 ------------------------------------------------------------------------------------------------- 一. 文档说明 本文档仅介绍Redis在Python中的使用,Redis

Linux 程序设计学习笔记----终端及串口编程基础之概念详解

转载请注明出处,谢谢! linux下的终端及串口的相关概念有: tty,控制台,虚拟终端,串口,console(控制台终端)详解 部分内容整理于网络. 终端/控制台 终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 1.终端 一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两种. 控制台是另一种人机接口, 不通过终端与主机相连, 而是通过显示卡-显示器和键盘接口分别与主机相连, 这是人控制主机的第一人机接口.

(赵小明RHCE笔记)linux基础之四 权限详解

一.special permissions for executables1.special permissions for executables:  -suid:command run with permissions of the owner of the command,not executor of   the command  -sgid:command runs with group affiliation of the group of the commandeg:file:us

Spring Data操作Redis详解

Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis进行了很好的封装,用起来也是十分的得心应手.Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted se

java笔记--反射机制之基础总结与详解

一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象. 它提供了在运行时检查对象属性的方法,这些属性包括它的成员和类型信息. 更重要的是Class对象是所有反射API的入口. Class类是泛型类,可以使用@SuppressWarnings("unchecked")忽略泛型或者使用Class<V>类型. 获得Class对象的5种

Redis详解:sets数据类型及操作

set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key理解为集合的名字. 系列文章: Redis详解:strings数据类型及操作 Redis详解:hashes数据类型及操作 Redis详解:lists数据类型及操作 Redis的set是string类型的无序集合.set元素最大可以包含(2的32次方)个元素. set的是通过hash table实现的,所以添加.删除和查找的复杂度都是O(1).hash table会随着添加或者删除自动的调

.Net使用Redis详解之ServiceStack.Redis(七)

原文:.Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redis官方推荐的.NET驱动类库为Service.Stack.Redis.然而网上对这个类库的中文文档不是很全面与合理,这篇文章主要就对这个类库做注释展现.不足遗漏之处还望见谅,海涵. .Net使用Redis是非常方便与快捷与